Bonjour à tous!
Après de longues recherches, essais plus ou moins couronnées de succès, je suis parvenu à réaliser un programme qui me convient en partie !
Celui-ci est fonctionnel, mais je penses qu'il est simplifiable !
Et c'est là que je fait appel à vous!
Si vous pouviez me donner des pistes pour simplifier/alléger mon programme ou encore relever mes erreurs, je vous en remercie d'avance.
Ce programme est destiné à transmettre des relevés de consommation électrique sous forme JSON à chaque fois que l'on se connecte à son IP:Port.
Voici mon code :
#include <SPI.h>
#include <Ethernet.h>
#include <Wire.h>
#include <RTClib.h>
#include "EmonLib.h"
EnergyMonitor ct1, ct2, ct3, ct4, ct5, ct6, ct7, ct8, ct9, ct10, ct11, ct12;
RTC_DS1307 rtc;
byte mac[] = { 0x0a, 0xb5, 0xc4, 0x55, 0x3e, 0xf1 };
IPAddress ip(192,168,0,120);
EthernetServer serveur(4200);
static char valeur;
static String y;
static String d1;
static String d2;
static String m1;
static String m2;
static String h1;
static String h2;
static String mn1;
static String mn2;
static String s1;
static String s2;
static float E_0;
static float E_1;
static float E_2;
static float E_3;
static float E_4;
static float E_5;
static float E_6;
static float E_7;
static float E_8;
static float E_9;
static float E_10;
static float E_11;
static float E_12;
static boolean S_1;
static boolean S_2;
static boolean S_3;
static boolean S_4;
int a = 2;
int b = 3;
void setup() {
Serial.begin(9600);
pinMode(a,OUTPUT); // MOC3041 positif
pinMode(b, OUTPUT); // 3 // MOC3041 negatif
digitalWrite(a, LOW);
digitalWrite(b, LOW);
Ethernet.begin(mac, ip);
delay(1000);
Wire.begin();
if (!rtc.begin()) {
Serial.println("RTC echec");}
if (! rtc.isrunning()) {
Serial.println("RTC is NOT running!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); }
serveur.begin();
S_1 = 0;
S_2 = 0;
S_3 = 0;
S_4 = 1;
}
void loop() {
horodatage();
donnees();
EthernetClient client = serveur.available();
if (client) {
while(client.connected()) {
if(client.available()) {GET(client);} // A-t-il des choses à dire ?
pilotage();
repondre(client);
break;
}
}
delay(10);
client.stop();
}
void GET(EthernetClient cl) {
boolean lu = 0; //variable pour indiquer l'état de lecture
while (cl.available()) { // tant qu'il a des infos à transmettre
char c = cl.read(); // on lit le caractère
delay(10); //delai de lecture
if (c == '?' && lu == 0) { //si "?" repéré
c = cl.read(); //on lit le caractère suivant qui contient la donnée
valeur = c;
}
}
}
void horodatage(){
DateTime now = rtc.now();
y= String(now.year(), DEC);
d1= String(now.day()/10, DEC);
d2= String(now.day()%10, DEC);
m1= String(now.month()/10, DEC);
m2= String(now.month()%10, DEC);
h1= String(now.hour()/10, DEC);
h2= String(now.hour()%10, DEC);
mn1= String(now.minute()/10, DEC);
mn2= String(now.minute()%10, DEC);
s1= String(now.second()/10, DEC);
s2= String(now.second()%10, DEC);
}
void donnees(){
// ADC pin, Vcal Calibration, phase_shift // note: UK/EU Vcal = 268.97; USA Vcal = 130.0;
ct1.voltage(0, 268.97, 1.7);
ct2.voltage(0, 268.97, 1.7);
ct3.voltage(0, 268.97, 1.7);
ct4.voltage(0, 268.97, 1.7);
ct5.voltage(0, 268.97, 1.7);
ct6.voltage(0, 268.97, 1.7);
ct7.voltage(0, 268.97, 1.7);
ct8.voltage(0, 268.97, 1.7);
ct9.voltage(0, 268.97, 1.7);
ct10.voltage(0, 268.97, 1.7);
ct11.voltage(0, 268.97, 1.7);
ct12.voltage(0, 268.97, 1.7);
// CT Current calibration // (2000 turns / 22 Ohm burden resistor = 90.909)
ct1.current(1, 90.9);
ct2.current(2, 90.9);
ct3.current(3, 90.9);
ct4.current(4, 90.9);
ct5.current(5, 90.9);
ct6.current(6, 90.9);
ct7.current(7, 90.9);
ct8.current(8, 90.9);
ct9.current(9, 90.9);
ct10.current(10, 90.9);
ct11.current(11, 90.9);
ct12.current(12, 90.9);
// .calcVI: Calculate all. No.of half wavelengths (crossings), time-out
ct1.calcVI(20,2000);
ct2.calcVI(20,2000);
ct3.calcVI(20,2000);
ct4.calcVI(20,2000);
ct5.calcVI(20,2000);
ct6.calcVI(20,2000);
ct7.calcVI(20,2000);
ct8.calcVI(20,2000);
ct9.calcVI(20,2000);
ct10.calcVI(20,2000);
ct11.calcVI(20,2000);
ct12.calcVI(20,2000);
E_0 = ct1.realPower;
E_1 = ct2.realPower;
E_2 = ct3.realPower;
E_3 = ct4.realPower;
E_4 = ct5.realPower;
E_5 = ct6.realPower;
E_6 = ct7.realPower;
E_7 = ct8.realPower;
E_8 = ct9.realPower;
E_9 = ct10.realPower;
E_10 = ct11.realPower;
E_11 = ct12.realPower;
E_12 = 0;
}
void pilotage() {
if (valeur == '1') {
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
S_1 = 1;
S_2 = 0;
S_3 = 0;
S_4 = 0;
}
if (valeur == '2') {
digitalWrite(a,HIGH);
digitalWrite(b,LOW);
S_1 = 0;
S_2 = 1;
S_3 = 0;
S_4 = 0;
}
if (valeur == '3') {
digitalWrite(a,LOW);
digitalWrite(b,HIGH);
S_1 = 0;
S_2 = 0;
S_3 = 1;
S_4 = 0;
}
if (valeur == '4') {
digitalWrite(a,LOW);
digitalWrite(b,LOW);
S_1 = 0;
S_2 = 0;
S_3 = 0;
S_4 = 1;
}
}
void repondre(EthernetClient client) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: application/json");
client.println("Access-Control-Allow-Origin: *");
client.println();
client.println("{");
client.print("\t\"DH\": ");
client.print("\"");
client.print(y);
client.print("-");
client.print(m1);
client.print(m2);
client.print("-");
client.print(d1);
client.print(d2);
client.print(" ");
client.print(h1);
client.print(h2);
client.print(":");
client.print(mn1);
client.print(mn2);
client.print(":");
client.print(s1);
client.print(s2);
client.print("\"");
client.println(",");
client.print("\t\"A0\": ");
client.print(E_0);
client.println(",");
client.print("\t\"A1\": ");
client.print(E_1);
client.println(",");
client.print("\t\"A2\": ");
client.print(E_2);
client.println(",");
client.print("\t\"A3\": ");
client.print(E_3);
client.println(",");
client.print("\t\"A4\": ");
client.print(E_4);
client.println(",");
client.print("\t\"A5\": ");
client.print(E_5);
client.println(",");
client.print("\t\"A6\": ");
client.print(E_6);
client.println(",");
client.print("\t\"A7\": ");
client.print(E_7);
client.println(",");
client.print("\t\"A8\": ");
client.print(E_8);
client.println(",");
client.print("\t\"A9\": ");
client.print(E_9);
client.println(",");
client.print("\t\"A10\": ");
client.print(E_10);
client.println(",");
client.print("\t\"A11\": ");
client.print(E_11);
client.println(",");
client.print("\t\"A12\": ");
client.print(E_12);
client.println(",");
client.print("\t\"s1\": ");
client.print(S_1);
client.println(",");
client.print("\t\"s2\": ");
client.print(S_2);
client.println(",");
client.print("\t\"s3\": ");
client.print(S_3);
client.println(",");
client.print("\t\"s4\": ");
client.print(S_4);
client.println();
client.println("}");
}
Merci à tous d'avance !