Gestion deep sleep Wemos D1 esphome

Bonjour à tous,

Je viens vers vous car là ! je sèche ! et je commence à m’arracher les cheveux …

En effet j’ai câblé un wemos mini D1 avec une photorésistance afin de connaitre l’intensité de la lumière dans mon salon et en faire des automatisations avec les lumières.
Jusque là tout vas bien ^^

Tout fonctionne bien jusqu’au moment ou je veux faire rentrer la sonde en deep sleep (car sur batterie) .

le capteur se met bien en deep sleep selon le code que je lui ai demandé mais il ne se réveil pas !

J’ai bien relié la pin D0 à la pin RST avec une résistance de 470R mais rien n’y fait il ne veux pas …

Quelqu’un à déjà eu le problème ?

Je suis preneur de toute solution lol ^^

Merci d’avance et bonne journée à tous

esphome:
  name: "capteur-luminosite"
  friendly_name: Capteur luminosité

esp8266:
  board: d1_mini

# Enable logging
logger:

deep_sleep:
  id: deep_sleep_1
  run_duration: 30s
  sleep_duration: 120s


mqtt:
  broker: *****
  discovery: true
  username: ****
  password: ****
  port: ****


  
# Enable Home Assistant API
api:
  encryption:
    key: "JfkTrsyt0DI5nTfTquTgMcIjlbbrGK329cRaAmgowJA="

ota:
  password: "35310efd55a258b25b4499defac23b45"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Capteur-luminosite"
    password: "ngztk6g1QdZm"

captive_portal:
sensor:
    - platform: adc
      pin: A0
      device_class: signal_strength
      name: "Luminosité Salon"
      icon: "mdi:weather-sunset"
      unit_of_measurement: "lx"
      accuracy_decimals: 0
      raw: true
      update_interval: 10s

Bonjour,

alors j’adore esphome
mais je n’ai jamais fait de projet deep sleep avec
déjà je n’ai jamais trop réussi mais je ne suis pas certain que ce soit trop optimisé pour ce genre d’application

mes projets, sont fait en code avec l’interface arduino avec connexion wifi, connexion mqtt, envoi des données et veille

par contre, pourquoi une résistance entre le D0 et le RST, je n’en ai jamais mis … à tester sans c’est peut être une piste

Merci de ta réponse ,
Concernant la résistance entre les 2 pins j’ai essayé sans aucune connexion puis avec un simple fil puis après avoir lu sur un site internet la fameuse résistance mais toujours sans aucun succès…

Comment fais tu en passant par Arduino et non esphome ? Je suis un peu « bleu » sur Arduino

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 …

Je vais jeter un œil a tout cela je te remercie grandement de ta réponse