Capteur Température / humidité : Wemos D1 DHT12

Codes

V1

#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
#include "EspMQTTClient.h"
 
const char* ssid = "kerminy";
const char* password = "passtruc";
const char* mqtt_server = "192.168.1.13";
const char* host = "ESP-C49200"; // = ausi nom client mqtt
const char* mqtt_user = "kerminy";
const char* mqtt_pass = "passtruc";
int mqtt_port = 1883;
int prog_version = 1;
int version_maj  = 1; // a faire la maj  OTA
 
EspMQTTClient client(NULL, NULL, mqtt_server, mqtt_user, mqtt_pass, host, mqtt_port);
double batterie = 0; // resistance 180 k A0<->GND
float minute_dodo = 10;
int boucle1 = 0;
unsigned long lastMsg = 0;
#define MSG_BUFFER_SIZE  (50)
char msg[MSG_BUFFER_SIZE];
int value = 0;
bool donnee_prete = false;
bool connexion_ok = false;
bool attend_flash = false;
 
#define capteur_dht12
float temperature = 0;
float humidite = 0;
float pression = 0;
 
#ifdef capteur_dht12
#include <WEMOS_DHT12.h>
DHT12 dht12;
#endif
void setup_wifi() {
 
  delay(10);
  // We start by connecting to a WiFi network
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
 
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}
void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
  }
  Serial.println();
 
  if ((char)payload[0] == 'F') { // FLASH si F
    digitalWrite(BUILTIN_LED, LOW);   // Turn the LED on (Note that LOW is the voltage level
    // A FAIRE
  } else {
    digitalWrite(BUILTIN_LED, HIGH);  // Turn the LED off by making the voltage HIGH
  }
 
}
void dodo() {
  Serial.print("dodo min :");
  Serial.println((float)minute_dodo);
  // Connect D0 to RST to wake up !
  ESP.deepSleep(minute_dodo * 60 * 1000000);
}
 
bool recup_donnees() {
  int boucle = 0;
  while (donnee_prete != true && boucle < 5) { // lescture des donnees
    if (dht12.get() == 0) {
      donnee_prete = true;
      temperature = dht12.cTemp;
      humidite = dht12.humidity;
      Serial.print("Température: ");
      Serial.println(temperature);
      Serial.print("Humidité   : ");
      Serial.println(humidite);
      Serial.println();
      return true;
    }
    Serial.println("relecture capteur");
    delay(1000);
    boucle++;
  }
  Serial.println("pb capteur =  reboot");
  dodo();
  return false;
}
void onConnectionEstablished() {
  connexion_ok = true;
  Serial.println("connected");
}
void setup() {
  Serial.begin(115200);
  pinMode(BUILTIN_LED, OUTPUT);     // Initialize the BUILTIN_LED pin as an output
  Serial.begin(115200);
  Serial.println("");
  Serial.print("ChipID : ");
  Serial.println(ESP.getChipId(), HEX);
  batterie = analogRead(A0) ;
  batterie = batterie / 214.5; // 209.66 assumes external 180K resistor / 1024) * 6.13;
  Serial.println(batterie);
  recup_donnees();
  setup_wifi();
  client.enableDebuggingMessages(); // Enable debugging messages sent to serial output
}
 
void loop() {
  // premiere lecture
  if (dht12.get() == 0) {
    donnee_prete = true;
    temperature = dht12.cTemp;
    humidite = dht12.humidity;
    Serial.println("");
    Serial.print("Température: ");
    Serial.println(temperature);
    Serial.print("Humidité   : ");
    Serial.println(humidite);
    Serial.println();
  }
 
  client.loop();  // on a au moins une valeur
  unsigned long now = millis();
  if (now - lastMsg > 15000) {
    Serial.println("pas d'acces au serveur MQTT , dodo min :");
    dodo();
  }
  if (now - lastMsg > 5000) { // attend 5s avant de faire
    lastMsg = now;
    ++value;
    if (donnee_prete == true && connexion_ok == true) { // tout est pret
      Serial.println("publie");
      // Publish a message to "mytopic/test"
      String topic1 = "pgvrs/"; topic1 += host;
      String topic2 = "temp/" ; topic2 += host;
      String topic3 = "humid/"; topic3 += host;
      String topic4 = "batt/" ; topic4 += host;
      Serial.println(topic1);
      Serial.println(topic2);
      Serial.println(topic3);
      Serial.println(topic4);
      if (
        client.publish(String(topic1).c_str(), String(prog_version) .c_str()    ) &&
        client.publish(String(topic2).c_str(), String(dht12.cTemp).c_str()      ) &&
        client.publish(String(topic3).c_str(), String(dht12.humidity).c_str()   ) &&
        client.publish(String(topic4).c_str(), String(batterie).c_str()         )
      ) {
        Serial.println("donnees transmises");
        delay(5000);
        /*
          // Subscribe to "mytopic/test" and display received message to Serial
          String topic = "";
          topic = String(host) + "/" + String(prog_version);
 
          if ( client.subscribe(topic, [](const String & payload) {
          version_maj = atoi(payload.c_str()) ;
          }) ) {
          if (version_maj != prog_version) {
            client.enableHTTPWebUpdater(); // Enable the web updater. User and password default to values of MQTTUsername and MQTTPassword. These can be overrited with enableHTTPWebUpdater("user", "password").
            Serial.println("attend flash");
            attend_flash = true;
          }
          }
        */
        dodo();
      }
    }
  }
  delay(1000);
}