ESP8266 + DHT22 + MQTT : fabriquer un objet connecté et l’inclure dans Home Assistant – Home Assistant – Bienvenue sur le forum de domotique-et-objets-connectes.fr

#define wifi_ssid « NUMERICABLE-A9BE » #define wifi_password « ********** »

#define mqtt_server « test.mosquitto.org »

long lastMsg = 0;
float DS18B20_temperature;

WiFiClient espClient; PubSubClient client(espClient);

OneWire ds(2);

void setup() { Serial.begin(115200); setup_wifi(); client.setServer(mqtt_server, 1883);

}

/* ————— loop ———————————– */ void loop() { long now = millis(); if (now – lastMsg > 1000 * 10) {

lastMsg = now;

if (WiFi.status() != WL_CONNECTED) {setup_wifi();} if (!client.connected()) {reconnect();}

client.loop();

char message_temperature[10] = «  »; DS18B20_temperature = getTemperatureDS18b20(); dtostrf(DS18B20_temperature, 3, 2, message_temperature); if (client.publish(« victor », message_temperature, true)){ Serial.println(« message publie »); } else { Serial.println(« Message non publie »); } Serial.println(message_temperature); }

}

/* ————— Connexion au réseau WIFI ———————————– */ void setup_wifi() { delay(10); Serial.println(); Serial.print(« Connection a « );

Serial.print(wifi_ssid);

WiFi.begin(wifi_ssid, wifi_password);

while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.print( » . »);

}

Serial.println(«  »); Serial.println(« WiFi connecte, « ); Serial.print(« adresse IP : « ); Serial.println(WiFi.localIP());

}

/* ————— Connexion au serveur MQTT ———————————– */ void reconnect() { while (!client.connected()) { Serial.print(« Connexion au serveur MQTT… »); if (client.connect(« ESP8266Client »)) { Serial.println(« OK »); } else { Serial.println(« KO, erreur : « ); Serial.print(client.state()); if (client.state() == -2) { if (WiFi.status() != WL_CONNECTED) {setup_wifi();} } Serial.println(« On attend 5 secondes avant de recommencer »); delay(5000); } }

}

/* ————— Acquisition de la température ———————————– */ float getTemperatureDS18b20() { byte i; byte data[12]; byte addr[8];

float temp = 0.0;

ds.search(addr);

// Cette fonction sert à surveiller si la transmission s’est bien passée if (OneWire::crc8( addr, 7) != addr[7]) { Serial.println(« CRC is not valid! »); return false;

}

// Demander au capteur de mesure et mémoriser la température ds.reset(); ds.select(addr);

ds.write(0x44);

delay(800);

// Demander au capteur de nous envoyer la température mémorisé ds.reset(); ds.select(addr);

ds.write(0xBE);

// Le MOT reçu du capteur fait 9 octets, on les charge donc un par un dans le tableau data[] for ( i = 0; i < 9; i++) { data[i] = ds.read();

}

// Puis on converti la température (*0.0625 car la température est stockée sur 12 bits)
temp = ( (data[1]