├── DHT22_LED.ino ├── LICENSE ├── README.md ├── branchement esp8266+led+dht22.jpg └── mqtt+home-assistant.png /DHT22_LED.ino: -------------------------------------------------------------------------------- 1 | /* 2 | Projet d'apprentissage d'un objet connecté (IoT) pour réaliser une sonde de température 3 | ESP8266 + DHT22 + LED + MQTT + Home-Assistant 4 | Projets DIY (http://www.projetsdiy.fr) - Mai 2016 5 | Article du projet : http://www.projetsdiy.fr/esp8266-dht22-mqtt-projet-objet-connecte/ 6 | Licence : MIT 7 | */ 8 | #include 9 | #include 10 | #include "DHT.h" // Librairie des capteurs DHT 11 | 12 | #define wifi_ssid "SSID" 13 | #define wifi_password "MOT-DE-PASSE" 14 | 15 | #define mqtt_server "ADRESSE-IP-MOSQUITTO" 16 | #define mqtt_user "guest" //s'il a été configuré sur Mosquitto 17 | #define mqtt_password "guest" //idem 18 | 19 | #define temperature_topic "sensor/temperature" //Topic température 20 | #define humidity_topic "sensor/humidity" //Topic humidité 21 | 22 | //Buffer qui permet de décoder les messages MQTT reçus 23 | char message_buff[100]; 24 | 25 | long lastMsg = 0; //Horodatage du dernier message publié sur MQTT 26 | long lastRecu = 0; 27 | bool debug = false; //Affiche sur la console si True 28 | 29 | #define DHTPIN D4 // Pin sur lequel est branché le DHT 30 | 31 | // Dé-commentez la ligne qui correspond à votre capteur 32 | //#define DHTTYPE DHT11 // DHT 11 33 | #define DHTTYPE DHT22 // DHT 22 (AM2302) 34 | 35 | //Création des objets 36 | DHT dht(DHTPIN, DHTTYPE); 37 | WiFiClient espClient; 38 | PubSubClient client(espClient); 39 | 40 | void setup() { 41 | Serial.begin(9600); //Facultatif pour le debug 42 | pinMode(D2,OUTPUT); //Pin 2 43 | setup_wifi(); //On se connecte au réseau wifi 44 | client.setServer(mqtt_server, 1883); //Configuration de la connexion au serveur MQTT 45 | client.setCallback(callback); //La fonction de callback qui est executée à chaque réception de message 46 | dht.begin(); 47 | } 48 | 49 | //Connexion au réseau WiFi 50 | void setup_wifi() { 51 | delay(10); 52 | Serial.println(); 53 | Serial.print("Connexion a "); 54 | Serial.println(wifi_ssid); 55 | 56 | WiFi.begin(wifi_ssid, wifi_password); 57 | 58 | while (WiFi.status() != WL_CONNECTED) { 59 | delay(500); 60 | Serial.print("."); 61 | } 62 | 63 | Serial.println(""); 64 | Serial.println("Connexion WiFi etablie "); 65 | Serial.print("=> Addresse IP : "); 66 | Serial.print(WiFi.localIP()); 67 | } 68 | 69 | //Reconnexion 70 | void reconnect() { 71 | //Boucle jusqu'à obtenur une reconnexion 72 | while (!client.connected()) { 73 | Serial.print("Connexion au serveur MQTT..."); 74 | if (client.connect("ESP8266Client", mqtt_user, mqtt_password)) { 75 | Serial.println("OK"); 76 | } else { 77 | Serial.print("KO, erreur : "); 78 | Serial.print(client.state()); 79 | Serial.println(" On attend 5 secondes avant de recommencer"); 80 | delay(5000); 81 | } 82 | } 83 | } 84 | 85 | void loop() { 86 | if (!client.connected()) { 87 | reconnect(); 88 | } 89 | client.loop(); 90 | 91 | long now = millis(); 92 | //Envoi d'un message par minute 93 | if (now - lastMsg > 1000 * 10) { 94 | lastMsg = now; 95 | //Lecture de l'humidité ambiante 96 | float h = dht.readHumidity(); 97 | // Lecture de la température en Celcius 98 | float t = dht.readTemperature(); 99 | 100 | //Inutile d'aller plus loin si le capteur ne renvoi rien 101 | /* 102 | if ( isnan(t) || isnan(h)) { 103 | Serial.println("Echec de lecture ! Verifiez votre capteur DHT"); 104 | return; 105 | } 106 | */ 107 | 108 | if ( debug ) { 109 | Serial.print("Temperature : "); 110 | Serial.print(t); 111 | Serial.print(" | Humidite : "); 112 | Serial.println(h); 113 | } 114 | client.publish(temperature_topic, String(t).c_str(), true); //Publie la température sur le topic temperature_topic 115 | client.publish(humidity_topic, String(h).c_str(), true); //Et l'humidité 116 | } 117 | if (now - lastRecu > 100 ) { 118 | lastRecu = now; 119 | client.subscribe("homeassistant/switch1"); 120 | } 121 | } 122 | 123 | // Déclenche les actions à la réception d'un message 124 | // D'après http://m2mio.tumblr.com/post/30048662088/a-simple-example-arduino-mqtt-m2mio 125 | void callback(char* topic, byte* payload, unsigned int length) { 126 | 127 | int i = 0; 128 | if ( debug ) { 129 | Serial.println("Message recu => topic: " + String(topic)); 130 | Serial.print(" | longueur: " + String(length,DEC)); 131 | } 132 | // create character buffer with ending null terminator (string) 133 | for(i=0; iMatériel nécessaire 8 | Pour réaliser ce projet vous aurez besoin des éléments suivants : 9 | - Un module WiFi ESP8266 de préférence basé sur un ESP-12. J'utilise une Wemos D1 mini qui coûte 5€ environ. 10 | - Une sonde de température DHT11 ou DHT22 11 | - Une Led 12 | - Une résistance 220 ohms 13 | - Un câble USB (pour programmer et alimenter l'ESP) 14 | - Une batterie LiPo 3.7V ou un boitier de 2 piles AA si vous voulez 15 | 16 |

Logiciels nécessaires

17 | Pour recevoir les mesures de votre objets et piloter la led, vous aurez besoin d'un ordinateur avec les logiciels suivants d'installés. Un Raspberry Pi 3 sera parfait 18 | - Broker MQTT. Mosquitto est très simple et performant. Voici un article de présentation http://www.projetsdiy.fr/mosquitto-broker-mqtt-raspberry-pi/ 19 | - Un serveur domotique. Si vous débutez, Home-Assistant est très simple à installer et à utiliser même si l'anglais n'est pas votre fort (http://www.projetsdiy.fr/home-assistant-serveur-domotique-raspberry-pi/). 20 | 21 |

Branchement

22 | 23 | 24 |

Code

25 | Téléchargez et ouvrez le fichier DTH22_LED.ino avec l'IDE Arduino 26 | Si vous découvrez les modules ESP8266, lisez cet article qui explique comment les programmer avec l'IDE Arduino http://www.projetsdiy.fr/esp-01-esp8266-flasher-firmware-origine/ 27 | 28 |

Installer Home-Assistant

29 | Python 3 (ou supérieur) doit être présent sur votre ordinateur 30 | puis 31 |
pip3 install homeassistant
32 | 33 | Pour les utilisateurs de Windows 10 (ou 7) 34 |
python -m pip install homeassistant
35 | 36 |

Intégration MQTT + Home-Assistant

37 | Allez dans le répertroire d'installation d'Home-Assistant 38 |
cd ~/.homeassistant
39 | puis 40 |
sudo nano configuration.yaml 
41 | Ajoutez une section mqtt 42 |
43 | mqtt:
44 |   broker: localhost          
45 |   port: 1883                 #par défaut
46 |   client_id: home-assistant-1
47 |   keepalive: 60
48 |   username: USERNAME  #optionnel
49 |   password: PASSWORD   #optionnel
50 |   protocol: 3.1              #par défaut
51 | 
52 | 53 | et maintenant deux sensors (température et humidité) 54 |
55 | sensor:
56 |   platform: mqtt
57 |   state_topic: "sensor/temperature"
58 |   name: "Température"
59 |   qos: 0
60 |   unit_of_measurement: "°C"
61 |   #value_template: '{{ payload }}'
62 | 
63 | sensor 2:
64 |   platform: mqtt
65 |   state_topic: "sensor/humidity"
66 |   name: "Humidité"
67 |   qos: 0
68 |   unit_of_measurement: "°C"
69 |   #value_template: '{{ payload }}'
70 | 
71 | et enfin un switch pour piloter la Led 72 |
73 | switch:
74 |   platform: mqtt
75 |   name: "Cuisine"
76 |   command_topic: "homeassistant/switch1" #Topic sur lequel on publie l'état de l'interrupteur
77 |   payload_on: "ON"      # ON pour allumer
78 |   payload_off: "OFF"    # et OFF pour éteindre (à vous de choisir)
79 |   optimistic: true      
80 |   qos: 0
81 | 
82 |
83 | Rechargez la page d'Home-Assistant. Vous avez maintenant deux indicateurs (température et humidité) ainsi qu'un switch pour allumer / éteindre la Led 84 | 85 | 86 | 87 | 88 | J'espère que ce petit projet vous sera utile pour débuter en domotique. 89 | -------------------------------------------------------------------------------- /branchement esp8266+led+dht22.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/projetsdiy/esp8266-dht22-mqtt-home-assistant/41846b2bbeb9f16ab0dd41af6b18dd9b2df79732/branchement esp8266+led+dht22.jpg -------------------------------------------------------------------------------- /mqtt+home-assistant.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/projetsdiy/esp8266-dht22-mqtt-home-assistant/41846b2bbeb9f16ab0dd41af6b18dd9b2df79732/mqtt+home-assistant.png --------------------------------------------------------------------------------