Raspberry Pi
Modèle : Raspberri Pi 3 Model B+ 64bits
Graver avec BelenaEtcher HA sur une carte micro SD de plus de 16Go : image
Ajouter l’addon ESPHome, File Editor et MQTT Mosquitto.
NodeMCU avec un DHT22
Pour flasher la première fois le NodeMCU v3, il faut rester appuyer sur le bouton FLASH puis appuyer sur RESET une fois pour entrer en mode bootloader.
Utiliser PyFlasher pour uploader le firmware de ESPHome.
Utiliser Visual Studio Code avec PlatformIO.
Code :
/*
@name : nodemcu_dht_mqtt
@date : 18/03/2020
@author : Samuel Goutenoir
@link : https://blackdrop.fr/
@description: NodeMCU v2 + DHT22 + MQTT + HomeAssistant + DeepSleep
*/
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
#define wifi_ssid "nom_reseau_wifi"
#define wifi_password "mot_de_passe_wifi"
#define mqtt_server "192.168.1.000" // Home Assistant url
#define mqtt_user "MQTT" //user HomeAssistant
#define mqtt_password "mqtt"
#define temperature_topic "serre/temperature" //Topic température
#define humidity_topic "serre/humidite" //Topic humidité
bool debug = true; //Affiche sur la console si True
#define DHTPIN D2 // Pin sur lequel est branché le DHT
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht(DHTPIN, DHTTYPE);
WiFiClient espClient;
PubSubClient client(espClient);
void setup_wifi() {
delay(10);
Serial.println();
Serial.println(millis());
Serial.print("Connexion a ");
Serial.println(wifi_ssid);
WiFi.begin(wifi_ssid, wifi_password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("Connexion WiFi etablie ");
Serial.print("=> Addresse IP : ");
Serial.println(WiFi.localIP());
}
void reconnect() {
//Boucle jusqu'à obtenur une reconnexion
while (!client.connected()) {
Serial.print("Connexion au serveur MQTT...");
if (client.connect("NodeMCU", mqtt_user, mqtt_password)) {
Serial.println("OK");
} else {
Serial.print("KO, erreur : ");
Serial.print(client.state());
Serial.println(" On attend 5 secondes avant de recommencer");
delay(5000);
}
}
}
void setup() {
long now = millis();
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883); /
dht.begin();
if (!client.connected()) {
reconnect();
}
//Lecture de l'humidité ambiante
float h = dht.readHumidity();
// Lecture de la température en Celcius
float t = dht.readTemperature();
//Inutile d'aller plus loin si le capteur ne renvoi rien
if ( isnan(t) || isnan(h)) {
Serial.println("Echec de lecture ! Verifiez votre capteur DHT");
return;
}
if ( debug ) {
Serial.print("Temperature : ");
Serial.print(t);
Serial.print(" | Humidite : ");
Serial.println(h);
}
client.publish(temperature_topic, String(t).c_str(), true); //Publie la température sur le topic temperature_topic
client.publish(humidity_topic, String(h).c_str(), true); //Et l'humidité
delay(1000); // Delay important sinon la pub mqtt ne se fait pas avant que l'ESP parte en DeepSleep
Serial.println(millis()-now);
ESP.deepSleep(10*60*1e6);
}
void loop() {
}
Côté HomeAssistant dans configuration.yaml
:
sensor:
- platform: mqtt
state_topic: "serre/temperature"
name: "Température de la serre"
qos: 0
unit_of_measurement: "°C"
unique_id: "serre_temp"
#value_template: ''
- platform: mqtt
state_topic: "serre/humidite"
name: "Humidité de la serre"
qos: 0
icon: humidity
unit_of_measurement: "%"
unique_id: "serre_hum"
#value_template: ''
J’utilise l’addon MQTT Mosquitto.
Calculateur d’autonomie sur batterie
Vous pouvez utiliser mon tableur pour le calcul d’autonomie de batterie :
PRÉCÉDENTNAS Synology
SUIVANTESP8266