Alors il faut l’IDE arduino :
ajouter la gestion des wemos :
c’est un exemple mail il y a plein de sites a ce sujet
ensuite tu lui envoi ton code comme sur un arduino
voilà le mien
mais c’est du perso d’un non développeur, pas forcément optimisé au niveau code
mais j’ai fait en sorte d’être optimisé au niveau temps pour la connexion et l’envoi
mon code gère plusieurs types de capteurs en fonction du besoin
voir le fichier param.h
#define VERSION "Version 0.93"
#define DATEVER "04/05/2023"
#define TRACE_ON 0 // traces RS-232
#define SENSOR 9
#include "param.h"
#include <ESP8266WiFi.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
#include "DHTesp.h"
#include "Adafruit_CCS811.h"
#include <OneWire.h>
#include <DallasTemperature.h>
#if TH_BMP
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_BMP280.h>
Adafruit_BMP280 bmp; // use I2C interface
Adafruit_Sensor *bmp_temp = bmp.getTemperatureSensor();
Adafruit_Sensor *bmp_pressure = bmp.getPressureSensor();
#endif
WiFiClient client;
#if TH_DHT
DHTesp dht;
#endif
#if TH_CCS
Adafruit_CCS811 ccs;
#endif
#if BAT_INT
ADC_MODE(ADC_VCC);
#endif
#if TH_DS
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(DS_PIN);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensords(&oneWire);
#endif
// Setup the MQTT client class by passing in the WiFi client and MQTT server and login details.
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
// Notice MQTT paths for AIO follow the form: <username>/feeds/<feedname>
//Adafruit_MQTT_Publish temper = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/thermo" AIO_THERMO "/temper");
Adafruit_MQTT_Publish dht_json = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/thermo" AIO_THERMO "/dhtjson");
Adafruit_MQTT_Publish ds_json = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/thermo" AIO_THERMO "/dsjson");
Adafruit_MQTT_Publish bmp_json = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/thermo" AIO_THERMO "/bmpjson");
Adafruit_MQTT_Publish ccs_json = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/thermo" AIO_THERMO "/ccsjson");
Adafruit_MQTT_Publish nivlum = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/thermo" AIO_THERMO "/nivlum"); // niveau de lumière 0-100%
Adafruit_MQTT_Publish detlum = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/thermo" AIO_THERMO "/detlum"); // détecte un changement de niveau de lumière
Adafruit_MQTT_Publish inond = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/sensor" AIO_THERMO "/inond");
Adafruit_MQTT_Publish alerte = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/sensor" AIO_THERMO "/alerte");
Adafruit_MQTT_Publish debug = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/thermo" AIO_THERMO "/debug");
Adafruit_MQTT_Publish upt = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/thermo" AIO_THERMO "/uptime");
Adafruit_MQTT_Publish ver = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/thermo" AIO_THERMO "/version");
Adafruit_MQTT_Publish bat = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/thermo" AIO_THERMO "/vbat");
Adafruit_MQTT_Publish bat_json = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/thermo" AIO_THERMO "/batinfo");
Adafruit_MQTT_Publish wifi_json = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/thermo" AIO_THERMO "/wifiinfo");
// Réception des commandes depuis HomeAssistant >> /echo 'hello' >> ok || /reboot 'reboot' >> reboot module
Adafruit_MQTT_Subscribe hello = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/thermo" AIO_THERMO "/hello");
Adafruit_MQTT_Subscribe reboot = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/thermo" AIO_THERMO "/reboot");
boolean MQTTok =false; // indique si le MQTT est connecté
boolean MQTT_connect();
const float TMaxA0 = 3.3; // Tension maximale admissible par le convertisseur A/N de la carte (consulter la documentation du fabriquant)
const float coeff_pont = 0.5; // R1 / ( R1 + R2 ) R1 et R2 en ohms
const boolean TraceON = TRACE_ON;
float humidity; // mémo des dernières mesure humid et temp pour utilisation avec ccs
float tempDS1;
float tempDS2;
float temperature;
int TimeToSleep = UP_INTERVAL; // minutes en veille
String EtatCharge; // état de la charge si 'BAT_CHARG' activé
char* chEtatCharge;
char msg[99];
long day = 86400000; // 86400000 milliseconds in a day
long hour = 3600000; // 3600000 milliseconds in an hour
long minute = 60000; // 60000 milliseconds in a minute
long second = 1000; // 1000 milliseconds in a second
boolean booting = true;
int LumAmb = 500; // mesure lumière tenps réel
int LastLum1 = 0; // dernières mesures
int LastLum2 = 0;
int LastLum3 = 0;
int LastLum4 = 0;
int LastLum5 = 0;
boolean LumAllumee = false; // info si lumière est allumée : considérée comme éteinte au départ
boolean Nuit =false; // détecte nuit : considéré comme jour au départ
int sensorWetValue;
boolean EauDetectee =0;
void setup()
{
#if BAT_CHARG
pinMode(CHARGE,INPUT);
pinMode(STANDBY,INPUT);
#endif
// WiFi.disconnect();
WiFi.mode( WIFI_OFF );
WiFi.forceSleepBegin();
delay( 1 );
// #if TRACE_ON
Serial.begin(115200); // must be same baudrate with the Serial Monitor
Serial.println("Boot..."); Serial.println(" ");
// #endif
#if TH_DHT
pinMode(PWR_PIN,OUTPUT);
digitalWrite(PWR_PIN,1);
dht.setup(DHT_PIN, DHTesp::DHT_MODULE); // Connect DHT sensor to GPIO 2 / D4
delay(dht.getMinimumSamplingPeriod());
#endif
#if TH_DS
pinMode(PWR_PIN,OUTPUT);
digitalWrite(PWR_PIN,1);
sensords.begin();
#endif
#if TH_BMP
pinMode(PWR_PIN,OUTPUT);
digitalWrite(PWR_PIN,1);
#endif
pinMode(LDR_PIN,INPUT); // == INOND_PIN
IPAddress ip(192, 168, IP3, IP4);
IPAddress gateway(192, 168, IP3, 1);
IPAddress subnet(255, 255, 255, 0);
IPAddress dns(192, 168, IP3, 1);
//---
#if TH_VEILLE
WiFi.forceSleepWake();
delay( 1 );
WiFi.persistent( false );
#endif
WiFi.mode( WIFI_STA );
WiFi.config( ip, gateway, subnet );
//---
// WiFi.config(ip, dns, gateway, subnet);
WiFi.begin(ssid, password);
int WIFIretry = 100;
while (WiFi.status() != WL_CONNECTED)
{
// on attend la connexion wifi
delay(100);
WIFIretry--;
if (TraceON) {Serial.println(WIFIretry); }
if (WIFIretry < 0) {
#if TH_VEILLE
if (TraceON) { Serial.println("Erreur connexion !"); }
SleepESP();
#endif
break;
}
}
if (TraceON) { Serial.println("Wifi ok !"); Serial.print("IP address: "); Serial.println(WiFi.localIP()); }
mqtt.subscribe(&hello);
mqtt.subscribe(&reboot);
MQTT_connect();
if (MQTTok) { debug.publish("thermo" AIO_THERMO " present"); }
// niveau wifi
if (TraceON) { Serial.print("wifi_level: "); Serial.println(WiFi.RSSI()); }
String adresseIpLocale = String() + WiFi.localIP()[0] + "." + WiFi.localIP()[1] + "." + WiFi.localIP()[2] + "." + WiFi.localIP()[3];
char lip[16]; adresseIpLocale.toCharArray(lip, 16);
int rssi = WiFi.RSSI();
char msg[99];
snprintf (msg, 99, "{\"wlevel\":%d,\"wip\":\"%s\",\"wssid\":\"%s\"}", rssi, lip, WiFi.SSID());
if (TraceON) { Serial.println(msg); }
if (MQTTok) { wifi_json.publish(msg); }
#if TH_DHT
LectureTemp();
//digitalWrite(DHT_PWR_PIN,0);
#endif
#if TH_DS
// sensords.begin();
LectureTempDS();
//digitalWrite(DHT_PWR_PIN,0);
#endif
#if TH_BMP
LectureTempBMP();
//digitalWrite(DHT_PWR_PIN,0);
#endif
#if TH_CCS
if(!ccs.begin()) {
if (TraceON) { Serial.println("Failed to start sensor! Please check your wiring."); }
if (MQTTok) { debug.publish("thermo" AIO_THERMO " : erreur init module CCS811 !"); }
}
while(!ccs.available());
LectureCCS();
#endif
digitalWrite(PWR_PIN,0);
#if TH_BAT
LectureTensionBat();
#endif
LectureVersion();
#if TH_VEILLE
SleepESP();
#endif
}
////////////////////////////////////////////////////// LOOP
void loop()
{
MQTT_connect();
static uint32_t bclLecture = 0;
static uint32_t bclTrace = 0;
// cas si on ne met pas en veille,
// envoi en boucle en MQTT en respectant le TimeToSleep en delai
// pas d'envoi niveau batterie dans ce cas
// envoi uptime
if (millis() - bclLecture >= TimeToSleep * 60 * 1000)
{
bclLecture = millis();
Serial.println(" ");
Serial.println("boucle lecture !");
#if TH_DHT
digitalWrite(PWR_PIN,1);
LectureTemp();
digitalWrite(PWR_PIN,0);
#endif
LectureVersion();
LectureUptime();
#if TH_CCS
LectureCCS();
#endif
} // fin bclLecture
if (millis() - bclTrace >= 1000) // 1s
{
bclTrace = millis();
LectureLDR();
VerifieEau();
}
Adafruit_MQTT_Subscribe *subscription;
while ((subscription = mqtt.readSubscription(50)))
{
if (subscription == &hello)
{
// Serial.print(F("Got: "));
// Serial.println((char *)hello.lastread);
String temp3;
temp3 = (char *)hello.lastread;
if ((temp3 == "hello") || (temp3 == "HELLO"))
{
// LectureVersion();
//EnvoiDebug();
debug.publish("present");
}
}
if (subscription == &reboot)
{
String temp3;
temp3 = (char *)reboot.lastread;
if ((temp3 == "reboot") || (temp3 == "REBOOT") || (temp3 == "reset") || (temp3 == "RESET"))
{
debug.publish("reset module");
delay(2000);
ESP.reset();
}
}
}
} // fin loop
void VerifieEau()
{
#if !SENS_INOND
return;
#endif
sensorWetValue = analogRead(INOND_PIN);
Serial.println(sensorWetValue);
if ((sensorWetValue > 200) && (EauDetectee ==false)) {
// on détecte de l'eau
inond.publish("1");
EauDetectee =true;
Serial.println("Inondé");
}
if ((sensorWetValue < 50) && (EauDetectee ==true)) {
// plus d'eau présente
inond.publish("0");
EauDetectee =false;
Serial.println("Sec");
}
}
void LectureLDR()
{
#if !TH_LDR
return;
#endif
LastLum5 = LastLum4;
LastLum4 = LastLum3;
LastLum3 = LastLum2;
LastLum2 = LastLum1;
LastLum1 = LumAmb;
LumAmb = analogRead(LDR_PIN);
// pour éviter les erreurs au démarrage
if (millis() < 10000) { return; }
if (Nuit) { Serial.print("N."); } else { Serial.print("J."); }
if (LumAllumee) { Serial.print("on."); } else { Serial.print("off."); }
Serial.println(LumAmb);
if ((LumAmb < 20) && (Nuit ==false))
{
Nuit =true;
LumAllumee =false;
if (TraceON) { Serial.println("nuit >> lumière éteinte"); }
if (MQTTok) { detlum.publish("0"); }
}
if ((Nuit ==true) && (LastLum5+120 < LumAmb) && (LumAllumee ==false))
{
LumAllumee =true;
if (TraceON) { Serial.println("lumière allumée"); }
if (MQTTok) { detlum.publish("1"); }
}
if ((Nuit ==true) && (LastLum5-120 > LumAmb) && (LumAllumee ==true))
{
LumAllumee =false;
if (TraceON) { Serial.println("lumière éteinte"); }
if (MQTTok) { detlum.publish("0"); }
}
if ((Nuit ==false) && (LumAmb < 640) && (LastLum3+120 < LumAmb) && (LumAllumee ==false))
{
LumAllumee =true;
if (TraceON) { Serial.println("lumière allumée"); }
if (MQTTok) { detlum.publish("1"); }
}
if ((Nuit ==false) && (LastLum3-120 > LumAmb) && (LumAllumee ==true))
{
LumAllumee =false;
if (TraceON) { Serial.println("lumière éteinte"); }
if (MQTTok) { detlum.publish("0"); }
}
if ((LumAmb > 100) && ((LastLum5+2 < LumAmb) && (LastLum5+8 > LumAmb)) && (Nuit ==true) && (LumAllumee ==false))
{
Nuit =false;
if (TraceON) { Serial.println("jour && lumière éteinte"); }
if (MQTTok) { detlum.publish("0"); }
}
}
void LectureTensionBat()
{
#if BAT_INT
// Mesure tension alimentation ESP >> https://phmarduino.wordpress.com/2018/07/18/station-de-mesures-v1/
float mesureADC = ESP.getVcc();
float tension_bat = mesureADC/1023.00; // cf ADC sur 10 bits
tension_bat = tension_bat*3.27/2.89; // cf calibrage de mon NodeMCU
#else
// Mesure du niveau renvoyé par le convertisseur A/N
unsigned int raw_bat = analogRead(A0);
// Calcul de la tension réel >> https://projetsdiy.fr/mesurer-tensialimentation-batterie-esp8266-arduino/
float tension_bat = ((raw_bat * ( TMaxA0 / 1024)) / coeff_pont) + 0.38;
if (TraceON) {
if (TraceON) { Serial.print("raw : "); Serial.println(raw_bat); }
if (TraceON) { Serial.print("vbat : "); Serial.println(tension_bat); }
}
#endif
#if BAT_CHARG
boolean CHGE;
boolean STBY;
CHGE = digitalRead(CHARGE);
STBY = digitalRead(STANDBY);
if (TraceON) { Serial.print("CHGE:"); Serial.println(CHGE); }
if (TraceON) { Serial.print("STBY:"); Serial.println(STBY); }
if ( (CHGE == 1) && (STBY == 1) )
{
EtatCharge = "décharge";
chEtatCharge = (char*)"décharge";
}
if ( (CHGE == 0) && (STBY == 1) )
{
EtatCharge = "En Charge";
chEtatCharge = (char*)"En Charge";
}
if ( (CHGE == 1) && (STBY == 0) )
{
EtatCharge = "Pleine";
chEtatCharge = (char*)"Pleine";
}
if ( (CHGE == 0) && (STBY == 0) )
{
EtatCharge = "anomalie";
chEtatCharge = (char*)"anomalie";
}
#else
EtatCharge = "";
#endif
char chTensionBat[8]; dtostrf(tension_bat, 2, 2, chTensionBat);
char chRawBat[8]; dtostrf(raw_bat, 4, 0, chRawBat);
// char chEtatCharge = "";
char msg[99];
snprintf (msg, 99, "{\"tension\":%s,\"raw\":%s,\"etat\":\"%s\"}", chTensionBat, chRawBat, chEtatCharge);
if (TraceON) { Serial.println(msg); }
if (TraceON) { Serial.println(EtatCharge); }
if (MQTTok) { bat_json.publish(msg); }
if (TraceON) { Serial.print("Bat. "); Serial.print(tension_bat); Serial.println("V"); }
}
#if TH_CCS
void LectureCCS()
{
if(ccs.available()) {
if(!ccs.readData()) {
ccs.setEnvironmentalData(humidity,temperature);
int co = ccs.geteCO2();
int tvoc = ccs.getTVOC();
if (TraceON) { Serial.print("CO2: "); Serial.print(co); }
// if (TraceON) { Serial.print(ccs.geteCO2()); }
if (TraceON) { Serial.print("ppm, TVOC: "); Serial.println(tvoc); }
// if (TraceON) { Serial.println(ccs.getTVOC()); }
char msg[50];
snprintf (msg, 50, "{\"co2\":%d,\"tvoc\":%d}", co, tvoc);
if (TraceON) { Serial.println(msg); }
if (MQTTok) { ccs_json.publish(msg); }
} else {
if (TraceON) { Serial.println("ERREUR LECTURE CCS811 !"); }
if (MQTTok) { debug.publish("ERREUR LECTURE CCS811 !"); }
return;
//while(1);
}
}
}
#endif
#if TH_DHT
void LectureTemp()
{
if (TraceON) { Serial.print("Delay: "); Serial.println(dht.getMinimumSamplingPeriod()); }
delay(dht.getMinimumSamplingPeriod());
humidity = dht.getHumidity();
temperature = dht.getTemperature();
TempAndHumidity newValues = dht.getTempAndHumidity();
if (dht.getStatusString() == "TIMEOUT") {
delay(1000);
if (TraceON) { Serial.println("2e lecture"); }
delay(dht.getMinimumSamplingPeriod());
humidity = dht.getHumidity();
temperature = dht.getTemperature();
TempAndHumidity newValues = dht.getTempAndHumidity();
if (dht.getStatusString() == "TIMEOUT") {
if (TraceON) { Serial.println("Module DHT ne répond pas !"); }
if (MQTTok) { debug.publish("Module DHT ne répond pas !"); }
if (MQTTok) { dht_json.publish("{\"temperature\":nan\"humidite\":nan}"); }
return;
}
}
// else if (dht.getStatusString() == "OK") {
// if (TraceON) { Serial.println(dht.getStatusString()); }
// temper.publish(temperature);
// humid.publish(humidity);
// debug.publish(dht.getStatusString());
char chTemperature[8]; dtostrf(newValues.temperature, 2, 1, chTemperature);
char chHumidite[8]; dtostrf(newValues.humidity, 2, 1, chHumidite);
char msg[50];
snprintf (msg, 50, "{\"temperature\":%5s,\"humidite\":%5s}", chTemperature, chHumidite);
if (TraceON) {
Serial.println(" T:" + String(newValues.temperature) + " H:" + String(newValues.humidity)); //+ " I:" + String(heatIndex) + " D:" + String(dewPoint) + " " + comfortStatus);
Serial.println(chTemperature);
Serial.println(msg);
}
if (MQTTok) { dht_json.publish(msg); }
}
#endif
#if TH_DS
void LectureTempDS()
{
sensords.requestTemperatures();
humidity = 0;
//temperature = sensords.getTempCByIndex(0);
tempDS1 = sensords.getTempCByIndex(0);
if (tempDS1 == -127.0)
{
if (TraceON) { Serial.println("ERREUR LECTURE TEMPERATURE DS"); }
if (MQTTok) { debug.publish("Erreur DS !"); }
if (MQTTok) { ds_json.publish("{\"temperature\":nan\"humidite\":nan}"); }
return;
}
if (TH_DS == 2) {
tempDS2 = sensords.getTempCByIndex(1);
temperature = ( tempDS1 + tempDS2 ) / 2;
}
char chTemperature[8]; dtostrf(temperature, 2, 1, chTemperature);
char chHumidite[8]; dtostrf(humidity, 2, 1, chHumidite);
char msg[50];
snprintf (msg, 50, "{\"temperature\":%5s,\"humidite\":%5s}", chTemperature, chHumidite);
if (TraceON) {
Serial.println(" T:" + String(temperature) + " H:" + String(humidity)); //+ " I:" + String(heatIndex) + " D:" + String(dewPoint) + " " + comfortStatus);
Serial.println(chTemperature);
Serial.println(msg);
}
if (MQTTok) { ds_json.publish(msg); }
//}
}
#endif
#if TH_BMP
void LectureTempBMP()
{
unsigned status;
//status = bmp.begin(BMP280_ADDRESS_ALT, BMP280_CHIPID);
status = bmp.begin();
if (!status) {
if (TraceON) {
Serial.println(F("Could not find a valid BMP280 sensor, check wiring or "
"try a different address!"));
Serial.print("SensorID was: 0x"); Serial.println(bmp.sensorID(),16);
Serial.print(" ID of 0xFF probably means a bad address, a BMP 180 or BMP 085\n");
Serial.print(" ID of 0x56-0x58 represents a BMP 280,\n");
Serial.print(" ID of 0x60 represents a BME 280.\n");
Serial.print(" ID of 0x61 represents a BME 680.\n");
Serial.println("ERREUR LECTURE TEMPERATURE BMP");
}
if (MQTTok) { debug.publish("Erreur BMP !"); }
if (MQTTok) { bmp_json.publish("{\"temperature\":nan\"pression\":nan}"); }
//while (1) delay(10);
return;
}
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, /* Operating Mode. */
Adafruit_BMP280::SAMPLING_X2, /* Temp. oversampling */
Adafruit_BMP280::SAMPLING_X16, /* Pressure oversampling */
Adafruit_BMP280::FILTER_X16, /* Filtering. */
Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */
bmp_temp->printSensorDetails();
sensors_event_t temp_event, pressure_event;
bmp_temp->getEvent(&temp_event);
bmp_pressure->getEvent(&pressure_event);
if (TraceON) {
Serial.print(F("Temperature = "));
Serial.print(temp_event.temperature);
Serial.println(" *C");
Serial.print(F("Pressure = "));
Serial.print(pressure_event.pressure);
Serial.println(" hPa");
Serial.println();
}
char chTemperature[8]; dtostrf(temp_event.temperature, 2, 1, chTemperature);
char chPression[8]; dtostrf(pressure_event.pressure, 2, 1, chPression);
char msg[50];
snprintf (msg, 50, "{\"temperature\":%5s,\"pression\":%5s}", chTemperature, chPression);
if (TraceON) { Serial.println(msg); }
if (MQTTok) { bmp_json.publish(msg); }
}
#endif
void LectureVersion()
{
snprintf (msg, 50, "%s du %s", VERSION, DATEVER);
if (MQTTok) { ver.publish(msg); }
if (TraceON) { Serial.println(msg); }
}
void LectureUptime()
{
long timeNow = millis();
int days = timeNow / day ; //number of days
int hours = (timeNow % day) / hour; //the remainder from days division (in milliseconds) divided by hours, this gives the full hours
int minutes = ((timeNow % day) % hour) / minute ; //and so on...
int seconds = (((timeNow % day) % hour) % minute) / second;
snprintf (msg, 50, "Uptime : %dj %dh %dm %ds", days,hours,minutes,seconds);
if (MQTTok) { upt.publish(msg); }
if (TraceON) { Serial.println(msg); }
}
boolean MQTT_connect() {
int8_t ret;
// Stop if already connected.
if (mqtt.connected()) {
MQTTok =true;
return 1;
}
if (TraceON) { Serial.println("Connecting to MQTT... "); }
mqtt.connect(); // semble éviter l'erreur de connexion et le délai
uint8_t retries = 3;
while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected
if (TraceON) { Serial.println(mqtt.connectErrorString(ret)); }
if (TraceON) { Serial.println("Retrying MQTT connection in 5 seconds..."); }
mqtt.disconnect();
delay(1000); // wait 1 seconds
retries--;
if (TraceON) { Serial.println(retries); }
if (retries <= 0) {
// basically die and wait for WDT to reset me
MQTTok =false;
if (TraceON) { Serial.println("Erreur de connexion MQTT"); }
#if TH_VEILLE
if (TraceON) { Serial.println(">> erreur MQTT sleep"); }
SleepESP();
//return 0;
#else
return 0;
#endif
//while (1);
}
}
if (mqtt.connected()) { MQTTok =true; if (TraceON) { Serial.println("MQTT Connecté !"); } }
if (MQTTok) { debug.publish("MQTT Connecté !"); }
return 1;
}
void SleepESP()
{
#if TH_VEILLE
if (TraceON) { Serial.println("go to sleep..."); delay(200); }
if (MQTTok) { debug.publish("thermo" AIO_THERMO " sleeping..."); }
delay(100); // délai pour laisser le temps d'envoi des infos mqtt avant la veille
WiFi.disconnect( true );
delay( 1 );
ESP.deepSleep( TimeToSleep * 60 * 1000000, WAKE_RF_DISABLED); //WAKE_RF_DEFAULT);
#endif
}
#if SENSOR == 1
#define IP3 20
#define IP4 91 // 4e position de l'ip
#define HOSTNAME "thermo01" // Nom réseau affiché
#define SENS_INOND 0 // capteur d'humidité
#define TH_DHT 1 // module DHT-22
#define TH_CCS 0 // module CCS-811
#define TH_LDR 0 // capteur de lumière
#define TH_BAT 0 // fonctionne sur batterie, envoi niveau sur MQTT
#define BAT_INT 0 // indique si on fait une mesure interne ou externe de la batterie >> voir code
#define TH_VEILLE 1 // fonction de mise en veille entre les lectures
#define UP_INTERVAL 5 // temps entre les mesures >> temps entre les réveils (minutes)
#define AIO_THERMO "01" // numéro du thermo
#endif
#if SENSOR == 2
#define IP3 20
#define IP4 92 // 4e position de l'ip
#define HOSTNAME "thermo02" // Nom réseau affiché
#define SENS_INOND 0 // capteur d'humidité
#define TH_DHT 1 // module DHT-22
#define TH_CCS 1 // module CCS-811
#define TH_LDR 0 // capteur de lumière
#define TH_BAT 0 // fonctionne sur batterie, envoi niveau sur MQTT
#define BAT_INT 0 // indique si on fait une mesure interne ou externe de la batterie >> voir code
#define TH_VEILLE 0 // fonction de mise en veille entre les lectures
#define UP_INTERVAL 5 // temps entre les mesures >> temps entre les réveils (minutes)
#define AIO_THERMO "02" // numéro du thermo
#endif
#if SENSOR == 3
#define IP3 20
#define IP4 93 // 4e position de l'ip
#define HOSTNAME "thermo03" // Nom réseau affiché
#define SENS_INOND 0 // capteur d'humidité
#define TH_DHT 1 // module DHT-22
#define TH_CCS 0 // module CCS-811
#define TH_LDR 0 // capteur de lumière
#define TH_BAT 1 // fonctionne sur batterie, envoi niveau sur MQTT
#define BAT_INT 1 // indique si on fait une mesure interne ou externe de la batterie >> voir code
#define TH_VEILLE 1 // fonction de mise en veille entre les lectures
#define UP_INTERVAL 30 // temps entre les mesures >> temps entre les réveils (minutes)
#define AIO_THERMO "03" // numéro du thermo
#endif
#if SENSOR == 4
#define IP3 20
#define IP4 94 // 4e position de l'ip
#define HOSTNAME "thermo04" // Nom réseau affiché
#define SENS_INOND 0 // capteur d'humidité
#define TH_DHT 1 // module DHT-22
#define TH_CCS 0 // module CCS-811
#define TH_LDR 1 // capteur de lumière
#define TH_BAT 0 // fonctionne sur batterie, envoi niveau sur MQTT
#define BAT_INT 0 // indique si on fait une mesure interne ou externe de la batterie >> voir code
#define TH_VEILLE 0 // fonction de mise en veille entre les lectures
#define UP_INTERVAL 15 // temps entre les mesures >> temps entre les réveils (minutes)
#define AIO_THERMO "04" // numéro du thermo
#endif
#if SENSOR == 7
#define IP3 20
#define IP4 97 // 4e position de l'ip
#define HOSTNAME "thermo07" // Nom réseau affiché
#define SENS_INOND 0 // capteur d'humidité
#define TH_DHT 0 // module DHT-22
#define TH_DS 1 // module DS-18B20 (piscine)
#define TH_CCS 0 // module CCS-811
#define TH_LDR 0 // capteur de lumière
#define TH_BAT 1 // fonctionne sur batterie, envoi niveau sur MQTT
#define BAT_INT 1 // indique si on fait une mesure interne ou externe de la batterie >> voir code
#define TH_VEILLE 1 // fonction de mise en veille entre les lectures
#define UP_INTERVAL 20 // temps entre les mesures >> temps entre les réveils (minutes)
#define AIO_THERMO "07" // numéro du thermo
#endif
#if SENSOR == 8
#define IP3 20
#define IP4 88 // 4e position de l'ip
#define HOSTNAME "humid01" // Nom réseau affiché
#define SENS_INOND 1 // capteur d'humidité
#define TH_DHT 0 // module DHT-22
#define TH_DS 0 // module DS-18B20 (piscine)
#define TH_CCS 0 // module CCS-811
#define TH_LDR 0 // capteur de lumière
#define TH_BAT 0 // fonctionne sur batterie, envoi niveau sur MQTT
#define BAT_INT 0 // indique si on fait une mesure interne ou externe de la batterie >> voir code
#define TH_VEILLE 0 // fonction de mise en veille entre les lectures
#define UP_INTERVAL 15 // temps entre les mesures >> temps entre les réveils (minutes)
#define AIO_THERMO "08" // numéro du thermo
#endif
#if SENSOR == 9
#define IP3 20
#define IP4 97 // 4e position de l'ip
#define HOSTNAME "thermoext01" // Nom réseau affiché
#define SENS_INOND 0 // capteur d'humidité
#define TH_DHT 1 // module DHT-22 th/humid
#define TH_DS 2 // module DS-18B20 th (2x moyenne)
#define TH_BMP 1 // module BMP280 th/pression
#define TH_CCS 0 // module CCS-811 co2
#define TH_LDR 0 // capteur de lumière
#define TH_BAT 1 // fonctionne sur batterie, envoi niveau sur MQTT
#define BAT_INT 0 // indique si on fait une mesure interne ou externe de la batterie >> voir code
#define BAT_CHARG 1 // vérifie les broces 6 et 7 du TP???? /CHARG et /STBY pour en charge et fin de charge sur D3 et D4
#define TH_VEILLE 1 // fonction de mise en veille entre les lectures
#define UP_INTERVAL 5 // temps entre les mesures >> temps entre les réveils (minutes)
#define AIO_THERMO "09" // numéro du thermo
#endif
// constantes
#define LDR_PIN A0 // capteur LDR
#define DS_PIN 13 // GPIO00 / D3
#define DHT_PIN 02 // DPIO13 / D7
#define DHT_MODULE DHT22
#define PWR_PIN 15 // GPIO15 / D8
#define INOND_PIN A0 // capteur d'eau +3.3 >> A0, res. rappel 1M+ C. 100n sur A0
#define SDA_PIN 04 // GPIO04 / D2
#define SCL_PIN 05 // GPIO05 / D1
#define CHARGE 12 // GPIO12 / D6
#define STANDBY 14 // GPIO14 / D5
#define AIO_SERVER "192.168.20.80"
#define AIO_SERVERPORT 1883 // use 8883 for SSL
#define AIO_USERNAME "**"
#define AIO_KEY "**"
const char* ssid = "**";
const char* password = "**";
normalement, sur le principe, tu n’a qu’à indiquer dans le fichier param ce que tu a de connecté dessus et tes paramètres de connnexion et il se débrouille …