Là je vois que c'est bon non?
C'est vous qui avez rectifié? dans ce cas merci.
Voila le ino (désolé, c'est un joyeux chantier)
// =========================== Version du 24/03/2025 ====================================
// ===================== Envoi valeurs vers CH1 pour affichage seul =====================
// ===================== CH1 gérée par ESP32 CH2 ===============
// ============ Version carte ESP32 3.0.7 OK pas la 3.1.1
// =================== SERVO ===========================
#include <ESP32Servo.h> // version=3.0.6 author=Kevin Harrington,John K. Bennett
static const int servoPin = 33;
Servo Bouchech2;
// =================== FRAM ===========================
#include "FRAM.h" // AUTHOR: Rob Tillaart V 0.8.1
FRAM11 fram; // memoire eeprom
uint32_t start;
uint32_t stop;
uint32_t sizeInBytes = 0;
#include <AsyncTCP.h>
// ===================== Gestion page Web ===============================
#include "pageweb.h"
#include "processeur.h" //conversion des variables en chaines de characteres
#include <ESPAsyncWebServer.h> // name=ESP Async WebServer/version=1.2.4/author=Me-No-Dev
AsyncWebServer server(80); // port vers web
//#include <ESPmDNS.h>
//===========AsyncClient client;
#include <WiFi.h>
#include <HTTPClient.h> // Pour envoyer des requêtes HTTP_GET
//======================= pour OTA ====================
//#include <ESPmDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
// ====================================================
// Gestion DS18B20
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 32
#define TEMPERATURE_PRECISION 12
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// Tableau adresses sondes ds18b20
DeviceAddress ch1, ch2, air;
String addressStr = "";
int tps_sondes = 0;
// ====================================================
#include "RTClib.h"
RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = { "Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi" };
// =============================================================================
// Pour acquisition heure N.T.P
#include "esp_sntp.h"
#define MAX_SIZE 80 // pour SNTP
const char *ntpServer = "pool.ntp.org";
bool timeSync = false; // bit synchro ok
// =====================================
//#define RXD1 12 // Données recues de CH1 3.3V
#define RXD1 2 // Données recues de ch1 3.3V
#define TXD1 13 // Données Emises vers ch1
#define RXD2 16 // Données Recues de Nextion 3.3V
#define TXD2 17 // Données Emises vers Nextion
const char *ssid = "xxxxxxx";
const char *password = "xxxxxxxxxxxx";
// ================= VARIABLES =====================
int Nb_sondes = 0;
bool mem_nextion_ok = false;
bool mem_cave_ok = false;
bool mem_wifi_ok = false;
bool flagwifiok = false; // Wifi connecté
bool flagwifiout = false; // Time out connection wifi
bool flagwifinextion = false;
const int ledverte = 23; // pour test
const int ledtest = 5; // pour test commande html
const int led_defaut = 15;
const int relais_chauffe = 14; // Contact sec vers Hoben
//tps attente connection wifi dans setup
unsigned long currentMilliswifi = 0;
const long tpswifi = 10000; //tps attente connection
unsigned long previousMillisWifi = 0; // interval de
unsigned long intervalWifi = 30000; // reconnection WIFI
unsigned long currentMillis = millis();
//==================================== Temporisations ======================================
unsigned long previousMillistemp = 0; // Interval de
const long intervalmesuretemp = 3000; // Mesure de temperature
unsigned long previousMillistimeout = 0; // Timeout ouverture/fermeture trappe
const long timeout = 15000;
//unsigned long temps;
//unsigned long tps; // temps temperature stable avant commutation etat 0/1
// =============================================================== Valeurs CH1 ===============================
// ====== Emission vers CH1 ====================
unsigned long previousMillisenvoi = 0; // Interval d'émission
const long intervalenvoi = 3000; // vers CH1
// ========= reception fde ch1 ================
int intFromPC1 = 0; // flag vie
int intFromPC2 = 0; // reserve
// ========================================
int statut_ch1 = 0; // demande chauffe CH1
int flagvie = 0;
int etattrappe = 0; // 0=fermée 1=ouverte 2=defaut ouverture 3=defaut fermeture
int reserve = 0;
char statutch1[10]; // Affichage WEB
char statuttrappech1[20]; // Affichage ouverte Fermée WEB
int resolution_tempreellech1 = 12;
float tempreellech1 = 0.0; // temperature issue de la mesure
float oldtempreellech1 = 0.0;
float tempoffsetch1 = 0.0; // temperature après application de l'offset
float minitempch1 = 10;
float maxitempch1 = 11;
float cons_temp_jour_ch1 = 0.0;
float oldcons_temp_jour_ch1 = 0.0;
float cons_temp_nuit_ch1 = 0.0;
float oldcons_temp_nuit_ch1 = 0.0;
float cons_encours_ch1 = 0.0; // consigne temperature en cours
float hystplusch1 = 0.0;
float oldhystplusch1 = 0.0;
float hystmoinsch1 = 0.0;
float oldhystmoinsch1 = 0.0;
float tpsintegrech1 = 0; // Temps intégration lecture changement temp
float oldtpsintegrech1 = 0;
float offsetsondech1 = 0.0; // Offset ds18b20 CH1
float oldoffsetsondech1 = 0.0;
// Consigne jours/ nuit CH1
unsigned int heure_debut_jourCH1 = 0;
unsigned int heure_debut_nuitCH1 = 0;
unsigned int oldheure_debut_jourCH1 = 0;
unsigned int oldheure_debut_nuitCH1 = 0;
unsigned long tempsch1;
unsigned long tpsch1; // temps temperature stable avant commutation etat 0/1
int demch1 = 0;
int journuitch1 = 0; // 0=jour 1=nuit
bool testplusch1 = 0; //test delta temperature/consigne ch1
bool testmoinsch1 = 0;
bool memoire_ch1_ok;
//======================================================== DRV8825 Trappe ============================
const int pinEnable = 25; // Activation du driver/pilote ++++ Logique inverse +++
const int pinStep = 26; // Signal de PAS (avancement)
const int pinDir = 27; // Direction pour drv
// ===================================================== Valeurs CH2 ===============================
int resolution_tempreellech2 = 12;
float tempreellech2 = 0.0; // temperature issue de la mesure
float oldtempreellech2 = 0.0; // temperature issue de la mesure
float tempoffsetch2 = 0.0; // temperature après application de l'offset
float oldtempoffsetch2 = 0; // temperature après application de l'offset
float cons_temp_jour_ch2 = 0.0;
float oldcons_temp_jour_ch2 = 0.0;
float cons_temp_nuit_ch2 = 0.0;
float oldcons_temp_nuit_ch2 = 0.0;
float cons_encours_ch2 = 0.0; // consigne temperature en cours
float minitempch2 = 21;
float maxitempch2 = 22;
float minitempair = 30;
float maxitempair = 32;
float hystplusch2 = 0.0;
float oldhystplusch2 = 0.0;
float hystmoinsch2 = 0.0;
float oldhystmoinsch2 = 0.0;
float tpsintegrech2 = 0; // Temps intégration lecture changement temp
float oldtpsintegrech2 = 0;
float offsetsondech2 = 0.0;
float oldoffsetsondech2 = 0.0;
int journuitch2 = 0; // 0=jour 1=nuit
int positionmin_servo = 0;
float positionmedia_servo = 20;
int oldpositionmedia_servo = 0;
int positionmax_servo = 68;
int valpos_servo = 0;
int oldposservo = 0;
const int pintrappeouverte = 34; //Fdc trappe ouverte
const int pintrappeferme = 35; //Fdc trappe fermée
int trappe_ouverte = 0;
int trappe_ferme = 0;
int defaut_ouverture = 0; //timeout ouverture trappe
int defaut_fermeture = 0; //timeout fermeture trappe
// Consigne jours/ nuit CH2
unsigned int heure_debut_jourCH2 = 0;
unsigned int heure_debut_nuitCH2 = 0;
unsigned int oldheure_debut_jourCH2 = 0;
unsigned int oldheure_debut_nuitCH2 = 0;
unsigned long tempsch2;
unsigned long tpsch2; // temps temperature stable avant commutation etat 0/1
int etatch2 = 0;
int etatbouche = 0; // 1=fermée 2=media 3= ouverte
bool testplusch2 = 0; //test delta temperature/consigne ch2
bool testmoinsch2 = 0;
char statutch2[10]; // Affichage WEB
char charetatbouche[20]; // pour affichage en clair du statut Bouche
float tempmaxi = 70; // control défaut sonde
float resetval = 0; // valeur de reset Maxi/Mini EEprom
float tempair = 0;
float ldtempair = 0;
int resolution_air = 12;
//float temppoele = 0;
int NB_defsonde_CH1 = 0; // Nombre de défauts sonde CH1
int NB_defsonde_CH2 = 0; // Nombre de défauts sonde CH2
int NB_defsonde_AIR = 0; // Nombre de défauts sonde air
int NB_defsonde_Poele = 0; // Nombre de défauts sonde poele
// ======================= AFFI Heure ==========================
unsigned int h100 = 0; // heures en centièmes ex 917=9h17
unsigned int oldh100 = 0;
int counterreconnectwifi = 0;
int oldcounterreconnectwifi = 0;
#define MAX_SIZE 80 // pour SNTP
//const char *ntpServer = "pool.ntp.org";
//bool timeSync = false; // bit synchro ok
char sHour[3]; //pour stocker heure avec 0 dans var sHour
char sMin[3]; //pour stocker minute avec 0 dans var sMin
char sSec[3]; //pour stocker secondes avec 0 dans var sSec
char Heure_Courante_Char[20];
int annee = 0;
int oldannee = 0; // pour tempo
int mois = 0;
int oldmois = 0;
int jour = 0;
int oldjour = 0;
int httpCode;
// ==================== Echanges avec nextion ===========================
float valeur = 0;
int quichar = 0; // reception ascii de nextion qui envoi la valeur
int numpage = 0; // de quelle page provient le message
//int refresh = 0;
char text[7] = " "; // recoit la valeur nextion
char recup[5] = " "; // recupere la valeur nextion
const byte numChars = 32; // pour 32 octets
char receivedChars[numChars];
boolean newData = false;
// ====================================================================
// ================================== SETUP ===============================
void setup() {
//Serial.begin(115200);
Serial1.begin(9600, SERIAL_8N1, RXD1, TXD1); //COM CH1
Serial2.begin(57600, SERIAL_8N1, RXD2, TXD2); // COM Nextion
Bouchech2.attach(servoPin);
sensors.begin();
// =============== ATTENTE COM NEXTION ===============
delay(4000);
Serial2.print("Init.b1.pic=");
Serial2.print(3); //numero image com nextion ok
endnextion();
mem_nextion_ok = true;
acquit_sondes();
// ===============================================================
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
//pinMode(ledbleu, OUTPUT);
//pinMode(ledrouge, OUTPUT);
pinMode(pinDir, OUTPUT);
pinMode(pinStep, OUTPUT);
pinMode(pinEnable, OUTPUT);
digitalWrite(pinEnable, HIGH); // logique inversée
pinMode(relais_chauffe, OUTPUT);
pinMode(led_defaut, OUTPUT);
pinMode(ledverte, OUTPUT);
pinMode(ledtest, OUTPUT);
pinMode(pintrappeouverte, INPUT);
pinMode(pintrappeferme, INPUT);
currentMilliswifi = millis();
// =====================Test si connection wifi Ok sinon timeout de 10s =========================
while ((flagwifiout == false) && (WiFi.status() != WL_CONNECTED)) {
Serial2.print(F("Init.t21.txt=\""));
Serial2.print("ATTENTE");
Serial2.print(F("\""));
endnextion();
if (millis() - currentMilliswifi >= tpswifi) {
flagwifiout = true;
//digitalWrite(ledbleu, HIGH);
Serial2.print(F("Init.t21.txt=\""));
Serial2.print("TIMEOUT");
Serial2.print(F("\""));
endnextion();
}
if ((WiFi.status() == WL_CONNECTED)) {
flagwifiok = true;
//digitalWrite(ledrouge, HIGH);
Serial2.print(F("Init.t21.txt=\""));
Serial2.print("connecte");
Serial2.print(F("\""));
endnextion();
delay(50);
OTA_wifi();
}
}
// ======================Si Wifi Ok demande serveur NTP ============================================
// ===================== Acquisition Date/Heure serveur NTP ====================================
if (flagwifiok == true) {
configTzTime("CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00", ntpServer);
sntp_set_time_sync_notification_cb(time_sync_notification);
while (timeSync != true) {
delay(500);
}
rtc.begin();
time_t timestamp = time(NULL);
char buffer[MAX_SIZE];
struct tm *pTime = localtime(×tamp);
strftime(buffer, MAX_SIZE, "%Y/%m/%d %H:%M:%S", pTime);
rtc.adjust(DateTime(buffer));
delay(500);
} else {
rtc.begin();
}
// ==================================== définition des pages =============================================
server.begin();
server.on("/Chauffage2025", HTTP_GET, [](AsyncWebServerRequest *request) { // Page web du chauffage
request->send_P(200, "text/html", Chauffage2025_htm, processeurEtat);
});
//===================================================================================
/*
// définition des pages led html
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
request->send_P(200, "text/html", index_html);
});
server.on("/on", HTTP_GET, [](AsyncWebServerRequest *request) {
allumer();
request->send_P(200, "text/html", ledon_html);
});
server.on("/off", HTTP_GET, [](AsyncWebServerRequest *request) {
eteindre();
request->send_P(200, "text/html", ledoff_html);
});
*/
server.on("/Chauffage2025", HTTP_GET, [](AsyncWebServerRequest *request) {
request->send_P(200, "text/html", index_html);
});
server.on("/Chauffage2025", HTTP_GET, [](AsyncWebServerRequest *request) {
allumer();
request->send_P(200, "text/html", ledon_html);
});
server.on("/Chauffage2025", HTTP_GET, [](AsyncWebServerRequest *request) {
eteindre();
request->send_P(200, "text/html", ledoff_html);
});
// ================================ Positionnement servo =================================================================
valpos_servo = positionmin_servo;
deplacemoins();
// ========================= Lecture variables eeprom FRAM =======================
//=============================Variables CH1 0X50 =================
fram.begin(0x50); // Zone memoire pour CH1
fram.readObject(0, cons_temp_jour_ch1);
//Serial.println(lect1, 1);
fram.readObject(4, cons_temp_nuit_ch1);
//Serial.println(lect2, 1);
fram.readObject(8, hystplusch1);
//Serial.println(lect3, 1);
fram.readObject(12, hystmoinsch1);
//Serial.println(lect4, 1);
fram.readObject(16, offsetsondech1);
//Serial.println(lect5, 0);
fram.readObject(20, tpsintegrech1);
//Serial.println(lect6, 1);
//============================= Variables CH2 0X51 =================
fram.begin(0x51);
fram.readObject(0, cons_temp_jour_ch2);
//Serial.println(lect1, 1);
fram.readObject(4, cons_temp_nuit_ch2);
//Serial.println(lect2, 1);
fram.readObject(8, hystplusch2);
//Serial.println(lect3, 1);
fram.readObject(12, hystmoinsch2);
//Serial.println(lect4, 1);
fram.readObject(16, offsetsondech2);
//Serial.println(lect5, 0);
fram.readObject(20, tpsintegrech2);
//Serial.println(lect6, 1);
fram.readObject(24, positionmedia_servo);
//Serial.println(lect7, 1);
//============================= Variables Min / Max Temperatures 0X52 =================
fram.begin(0x52);
fram.readObject(0, minitempch1);
fram.readObject(4, maxitempch1);
fram.readObject(8, minitempch2);
fram.readObject(12, maxitempch2);
fram.readObject(16, minitempair);
fram.readObject(20, maxitempair);
//=============================Variables Heures Jour/nuit CH1/CH2 0X53 =================
fram.begin(0x53);
fram.readObject(0, heure_debut_jourCH1);
fram.readObject(4, heure_debut_nuitCH1);
fram.readObject(8, heure_debut_jourCH2);
fram.readObject(12, heure_debut_nuitCH2);
}
// ====================================================================================================
// ================================================= LOOP =============================================
// ====================================================================================================
void loop() {
digitalWrite(ledverte, HIGH);
ArduinoOTA.handle();
unsigned long currentMillis = millis();
unsigned long currentMillisenvoi = millis();
//======================== Reconnection wifi si perdue ==================================
if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillisWifi >= intervalWifi)) {
//Serial.print(millis());
//Serial.println("Reconnecting to WiFi...");
WiFi.disconnect();
WiFi.reconnect();
previousMillisWifi = currentMillis;
counterreconnectwifi++;
}
recvWithStartEndMarkers(); // Reception des données de CH1
if (newData) {
//Serial.println(receivedChars);
if (parseData()) // showParsedData();
newData = false;
}
// =============================== Reception des valeurs de Nextion Nextion =================
HMI_read(); // Lecture des valeurs recues de nextion
repart(); // Affectation des valeurs recu de nextion
// =============================== Affichages vers Nextion =================================
affiinit();
if (numpage == 1) {
//Serial2.print(F("Init.t14.txt=\""));
//Serial2.print(numpage); //
//Serial2.print(F("\""));
//endnextion();
affiinit(); // Affichage paramètres page Init
}
if (numpage == 2) {
//Serial2.print(F("Temp.t17.txt=\""));
//Serial2.print(numpage); //
//Serial2.print(F("\""));
//endnextion();
affitemps(); // Affichage paramètres page Temp
}
if (numpage == 3) {
//Serial2.print(F("Temp.t17.txt=\""));
//Serial2.print(numpage); //
//Serial2.print(F("\""));
//endnextion();
affich1(); // Affichage paramètres page CH1
}
if (numpage == 4) {
affich2(); // Affichage paramètres page CH2
}
if (numpage == 5) {
affi_maxmin(); // Affichage Mini Maxi
}
if (numpage == 6) {
tempo(); // Affichage paramètres page Linky
}
if (numpage == 7) {
Reset(); // Affichage paramètres page Reset Defaut et Max/Min
}
//=============================== Lecture Temperatures ======================
if (currentMillis - previousMillistemp >= intervalmesuretemp) {
previousMillistemp = currentMillis;
acquis_temp(); // Acquisition des températures en mode rapide
maxmin();
}
reconnect_wifi(); // Reconnection wifi si perdue
// =============================================== Changement consigne jour/nuit CH1 ===========================
DateTime now = rtc.now(); //get the current date-time
h100 = now.hour() * 100 + now.minute(); // pour le changement de consigne suivant l'heure
if (h100 >= heure_debut_jourCH1 && h100 < heure_debut_nuitCH1) {
cons_encours_ch1 = cons_temp_jour_ch1;
journuitch1 = 0; // 0=jour 1=nuit
} else {
cons_encours_ch1 = cons_temp_nuit_ch1;
journuitch1 = 1; // 0=jour 1=nuit
}
// =============================================== Changement consigne jour/nuit CH2 ===========================
if (h100 >= heure_debut_jourCH2 && h100 < heure_debut_nuitCH2) {
cons_encours_ch2 = cons_temp_jour_ch2;
journuitch2 = 0; // 0=jour 1=nuit
} else {
cons_encours_ch2 = cons_temp_nuit_ch2;
journuitch2 = 1; // 0=jour 1=nuit
}
// =========================================================================================
//===============================================test demande de chauffe {temp+hystplus} CH1 ====================
if (tempoffsetch1 > cons_encours_ch1 + hystplusch1 and statut_ch1) {
testplusch1 = 1; //temperature > consigne+hysteresis
tpsch1 = (millis() - tempsch1);
if (tpsch1 > tpsintegrech1) { //temps temperature stable
statut_ch1 = 0; //autorisation fermeture trappe
}
} else {
testplusch1 = 0;
}
//==================================================test={temp-hystmoins} CH1 =========================
if (tempoffsetch1 < cons_encours_ch1 - hystmoinsch1 and not statut_ch1) {
testmoinsch1 = 1; //temperature < consigne+hysteresis
tpsch1 = (millis() - tempsch1);
if (tpsch1 > tpsintegrech1) { //temps temperature stable
statut_ch1 = 1; //autorisation ouverture trappe
}
} else {
testmoinsch1 = 0;
}
if (not testplusch1 and not testmoinsch1) {
tempsch1 = millis();
}
//===============================================test demande de chauffe {temp+hystplus} CH2 ====================
if (tempoffsetch2 > cons_encours_ch2 + hystplusch2 and etatch2) {
testplusch2 = 1; //temperature > consigne+hysteresis
tpsch2 = (millis() - tempsch2);
if (tpsch2 > tpsintegrech2) { //temps temperature stable
etatch2 = 0; //autorisation fermeture trappe
}
} else {
testplusch2 = 0;
}
//===========================================================test={temp-hystmoins} CH2 =============================
if (tempoffsetch2 < cons_encours_ch2 - hystmoinsch2 and not etatch2) {
testmoinsch2 = 1; //temperature < consigne+hysteresis
tpsch2 = (millis() - tempsch2);
if (tpsch2 > tpsintegrech2) { //temps temperature stable
etatch2 = 1; //autorisation ouverture trappe
}
} else {
testmoinsch2 = 0;
}
if (not testplusch2 and not testmoinsch2) {
tempsch2 = millis();
}
//=============================================== PILOTAGE SERVO ====================
servo();
//============================ Demande air chaud a Hoben ===================
if (((statut_ch1 == 1) && (defaut_ouverture == 0) && (defaut_fermeture == 0)) || (etatch2 == 1)) {
digitalWrite(relais_chauffe, HIGH);
}
if ((statut_ch1 == 0) && (etatch2 == 0)) {
digitalWrite(relais_chauffe, LOW);
}
// ======================================== Action selon Etat CH1 =====================================================
switch (statut_ch1) {
case 0: //Arret
strcpy(statutch1, "ARRET");
break;
case 1: //Marche
strcpy(statutch1, "CHAUFFAGE");
break;
}
switch (etattrappe) {
case 0:
strcpy(statuttrappech1, "FERMEE");
break;
case 1:
strcpy(statuttrappech1, "OUVERTE");
break;
case 2:
strcpy(statuttrappech1, "DEFAUT OUVERTURE");
break;
case 3:
strcpy(statuttrappech1, "DEFAUT FERMETURE");
break;
}
// ======================================== Action selon Etat CH2 =====================================================
switch (etatch2) {
case 0: //Arret
strcpy(statutch2, "ARRET");
break;
case 1: //Marche
strcpy(statutch2, "CHAUFFAGE");
break;
}
switch (etatbouche) {
case 1:
strcpy(charetatbouche, "FERMEE");
break;
case 2:
strcpy(charetatbouche, "MILIEU");
break;
case 3:
strcpy(charetatbouche, "OUVERTE");
break;
}
//============================== Ouverture/Fermeture trappe ==========================
trappe_ouverte = digitalRead(pintrappeouverte);
if ((statut_ch1 == 1) && (trappe_ouverte == false) && (defaut_ouverture == 0)) {
ouverture();
}
trappe_ferme = digitalRead(pintrappeferme);
if ((statut_ch1 == 0) && (trappe_ferme == false) && (defaut_fermeture == 0)) {
fermeture();
}
if ((trappe_ouverte == 1) && (defaut_ouverture == 0) && (defaut_fermeture == 0)) {
etattrappe = 1;
}
if ((trappe_ferme == 1) && (defaut_ouverture == 0) && (defaut_fermeture == 0)) {
etattrappe = 0;
}
//=========================================== Defaut Trappe =======================================
if (defaut_ouverture == 1) {
etattrappe = 2;
}
if (defaut_fermeture == 1) {
etattrappe = 3;
}
if ((defaut_ouverture == 1) || (defaut_fermeture == 1)) {
digitalWrite(led_defaut, HIGH);
}
if ((defaut_ouverture == 0) && (defaut_fermeture == 0)) {
digitalWrite(led_defaut, LOW);
}
//unsigned long start = millis();
//unsigned long stop = millis();
//tps_sondes = (stop - start);
/*
Serial2.print(F("Temp.t6.txt=\""));
Serial2.print(tps_sondes); // Temps mesures 3 sondes ds18b20
Serial2.print(F("\""));
endnextion();
*/
// ===================================Envoi données vers CH1 ======================================================
if (currentMillisenvoi - previousMillisenvoi >= intervalenvoi) {
previousMillisenvoi = currentMillisenvoi;
emissionversvch1();
}
}
// ================================ FIN LOOP ===============================
void time_sync_notification(struct timeval *tv) // verification synchro NTP
{
//Serial.println("Notification of a time synchronization event");
timeSync = true;
}
void reconnect_wifi() {
currentMillis = millis();
//======================== Reconnection wifi si perdue ==================================
// if WiFi is down, try reconnecting every CHECK_WIFI_TIME seconds
if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillisWifi >= intervalWifi)) {
//Serial.print(millis());
//Serial.println("Reconnecting to WiFi...");
WiFi.disconnect();
WiFi.reconnect();
previousMillisWifi = currentMillis;
counterreconnectwifi++;
//Serial2.print(F("Init.t17.txt=\""));
//Serial2.print(counterreconnectwifi);
//Serial2.print(F("\""));
//endnextion();
}
}
void acquis_temp() {
sensors.setWaitForConversion(false); // makes it async
sensors.requestTemperatures();
sensors.setWaitForConversion(true);
//unsigned long stop = millis();
//Serial.print("Time used: ");
//Serial.println(stop - start);
tempreellech1 = sensors.getTempCByIndex(0);
tempoffsetch1 = (tempreellech1 + offsetsondech1);
tempreellech2 = sensors.getTempCByIndex(1);
tempoffsetch2 = (tempreellech2 + offsetsondech2);
tempair = sensors.getTempCByIndex(2);
}
void acquit_sondes() {
Nb_sondes = (sensors.getDeviceCount(), DEC);
Serial2.print(F("Init.t18.txt=\""));
Serial2.print(sensors.getDeviceCount());
Serial2.print(F("\""));
endnextion();
if (!sensors.getAddress(ch1, 0)) {
Serial2.print(F("Init.t25.txt=\"NOK"));
Serial2.print(F("\""));
endnextion();
} else {
Serial2.print(F("Init.t25.txt=\"OK"));
Serial2.print(F("\""));
endnextion();
}
if (!sensors.getAddress(ch2, 1)) {
Serial2.print(F("Init.t26.txt=\"NOK"));
Serial2.print(F("\""));
endnextion();
} else {
Serial2.print(F("Init.t26.txt=\"OK"));
Serial2.print(F("\""));
endnextion();
}
if (!sensors.getAddress(air, 2)) {
Serial2.print(F("Init.t27.txt=\"NOK"));
Serial2.print(F("\""));
endnextion();
} else {
Serial2.print(F("Init.t27.txt=\"OK"));
Serial2.print(F("\""));
endnextion();
}
}
//========================= WI-FI OTA ===========================
void OTA_wifi() {
//Serial.println("Booting");
//WiFi.mode(WIFI_STA);
//WiFi.begin(ssid, password);
while (WiFi.waitForConnectResult() != WL_CONNECTED) {
//Serial.println("Connection Failed! Rebooting...");
delay(5000);
ESP.restart();
}
ArduinoOTA
.onStart([]() {
String type;
if (ArduinoOTA.getCommand() == U_FLASH)
type = "sketch";
else // U_SPIFFS
type = "filesystem";
// NOTE: if updating SPIFFS this would be the place to unmount SPIFFS using SPIFFS.end()
//Serial.println("Start updating " + type);
})
.onEnd([]() {
//Serial.println("\nEnd");
})
.onProgress([](unsigned int progress, unsigned int total) {
//Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
})
.onError([](ota_error_t error) {
Serial.printf("Error[%u]: ", error);
if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
else if (error == OTA_END_ERROR) Serial.println("End Failed");
});
ArduinoOTA.begin();
//Serial.println("Ready");
//Serial.print("IP address: ");
//Serial.println(WiFi.localIP());
// =========================== FIN WI-FI OTA ====================================
}
void allumer() {
digitalWrite(ledtest, HIGH);
}
void eteindre() {
digitalWrite(ledtest, LOW);
}
Et la page "Processeur"
// ============================== CH1 ===========================================
extern float tempoffsetch1;
extern float cons_encours_ch1;
extern float cons_temp_jour_ch1;
extern float cons_temp_nuit_ch1;
extern float hystplusch1;
extern float hystmoinsch1;
extern float offsetsondech1;
extern float tpsintegrech1;
extern float minitempch1;
extern float maxitempch1;
extern int statut_ch1;
extern unsigned int heure_debut_jourCH1;
extern unsigned int heure_debut_nuitCH1;
//extern char statutcharsch1[20] ;
extern char statutch1[10] ;
extern char statuttrappech1[20] ;
// ============================== CH2 ===========================================
extern float tempoffsetch2;
extern float tempreellech2;
extern float tempoffsetch2;
extern float cons_encours_ch2;
extern float cons_temp_jour_ch2;
extern float cons_temp_nuit_ch2;
extern float hystplusch2;
extern float hystmoinsch2;
extern float offsetsondech2;
extern float tpsintegrech2;
extern float minitempch2;
extern float maxitempch2;
extern int etatch2;
extern unsigned int heure_debut_jourCH2;
extern unsigned int heure_debut_nuitCH2;
extern float tempair;
extern float minitempair;
extern float maxitempair;
extern char statutcharsch2[20] ;
extern char statutch2[10] ;
extern char charetatbouche[20] ;
// ===============================================================================
// =================================================== Variables CH1 =====================================================================
String processeurEtat(const String& var)
{
char bufferTemporaire[20];
if (var == "TEMPOFFSETCH1") {
dtostrf(tempoffsetch1, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
return bufferTemporaire;
}
if (var == "CONS_ENCOURS_CH1") {
dtostrf(cons_encours_ch1, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
return bufferTemporaire;
}
if (var == "CONS_JOUR_CH1") {
dtostrf(cons_temp_jour_ch1, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
return bufferTemporaire;
}
if (var == "CONS_NUIT_CH1") {
dtostrf(cons_temp_nuit_ch1, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
return bufferTemporaire;
}
if (var == "HDEBUTJOURCH1") {
itoa(heure_debut_jourCH1, bufferTemporaire, 10);// convertir l'entier en chaine de charactere "XXX" en base 10 (en décimale).
return bufferTemporaire;
}
if (var == "HDEBUTNUITCH1") {
itoa(heure_debut_nuitCH1, bufferTemporaire, 10);// convertir l'entier en chaine de charactere "XXX" en base 10 (en décimale).
return bufferTemporaire;
}
if (var == "HYSTPLUSCH1") {
dtostrf(hystplusch1, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
return bufferTemporaire;
}
if (var == "HYSTMOINSCH1") {
dtostrf(hystmoinsch1, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
return bufferTemporaire;
}
if (var == "OFFSETSONDECH1") {
dtostrf(offsetsondech1, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
return bufferTemporaire;
}
if (var == "TPSINTEGRECH1") {
dtostrf((tpsintegrech1/1000), 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
return bufferTemporaire;
}
if (var == "MINITEMPCH1") {
dtostrf(minitempch1, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
return bufferTemporaire;
}
if (var == "MAXITEMPCH1") {
dtostrf(maxitempch1, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
return bufferTemporaire;
}
/*
if (var == "ETATCH1") {
itoa(statut_ch1, bufferTemporaire, 10);// convertir l'entier en chaine de charactere "XXX" en base 10 (en décimale).
return bufferTemporaire;
}
*/
if (var == "STATUTCH1") {// Deja en char
return statutch1;
}
if (var == "ETATTRAPPE") {// Deja en char
return statuttrappech1;
}
// =================================================== Variables CH2 =====================================================================
/*
if (var == "TEMPREELLECH2") {
dtostrf(tempreellech2, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
return bufferTemporaire;
}
*/
if (var == "TEMPOFFSETCH2") {
dtostrf(tempoffsetch2, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
return bufferTemporaire;
}
if (var == "CONS_ENCOURS_CH2") {
dtostrf(cons_encours_ch2, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
return bufferTemporaire;
}
if (var == "CONS_JOUR_CH2") {
dtostrf(cons_temp_jour_ch2, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
return bufferTemporaire;
}
if (var == "CONS_NUIT_CH2") {
dtostrf(cons_temp_nuit_ch2, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
return bufferTemporaire;
}
if (var == "HDEBUTJOURCH2") {
itoa(heure_debut_jourCH2, bufferTemporaire, 10);// convertir l'entier en chaine de charactere "XXX" en base 10 (en décimale).
return bufferTemporaire;
}
if (var == "HDEBUTNUITCH2") {
itoa(heure_debut_nuitCH2, bufferTemporaire, 10);// convertir l'entier en chaine de charactere "XXX" en base 10 (en décimale).
return bufferTemporaire;
}
if (var == "HYSTPLUSCH2") {
dtostrf(hystplusch2, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
return bufferTemporaire;
}
if (var == "HYSTMOINSCH2") {
dtostrf(hystmoinsch2, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
return bufferTemporaire;
}
if (var == "OFFSETSONDECH2") {
dtostrf(offsetsondech2, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
return bufferTemporaire;
}
if (var == "TPSINTEGRECH2") {
dtostrf((tpsintegrech2/1000), 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
return bufferTemporaire;
}
if (var == "MINITEMPCH2") {
dtostrf(minitempch2, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
return bufferTemporaire;
}
if (var == "MAXITEMPCH2") {
dtostrf(maxitempch2, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
return bufferTemporaire;
}
/*
if (var == "ETATCH2") {
itoa(etatch2, bufferTemporaire, 10);// convertir l'entier en chaine de charactere "XXX" en base 10 (en décimale).
return bufferTemporaire;
}
*/
if (var == "ETATCH2") {
return statutch2;
}
if (var == "CHARETATBOUCHE") {
return charetatbouche;
}
if (var == "TEMPERATUREAIR") {
dtostrf(tempair, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
return bufferTemporaire;
}
if (var == "MINITEMPAIR") {
dtostrf(minitempair, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
return bufferTemporaire;
}
if (var == "MAXITEMPAIR") {
dtostrf(maxitempair, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
return bufferTemporaire;
}
return String();
}