Leçon 31/31 : Mesurer la température et l'humidité via Wi-Fi à l'aide du DHT11 et du kit ESP01 SunFounder
Ce guide de projet vous accompagne dans la construction d'un système de surveillance sans fil de la température et de l'humidité à l'aide d'un module ESP8266 (ESP-01) et d'un capteur DHT11. À la fin, vous disposerez d'un appareil qui crée son propre serveur web, vous permettant de consulter les relevés de capteurs en temps réel sur n'importe quel appareil connecté à votre réseau local, comme un smartphone, une tablette ou un ordinateur. Il s'agit d'un projet IoT fondamental qui démontre comment relier le monde physique des capteurs au monde numérique des interfaces web.
Les compétences que vous acquerrez ici sont hautement transférables. Ce montage exact peut être adapté à une large gamme d'applications pratiques, notamment :
- Construire une station de surveillance à distance pour une serre ou un jardin afin de garantir des conditions de croissance optimales.
- Créer un système domotique simple pour surveiller le climat d'une pièce spécifique, comme une cave à vin ou une chambre de bébé.
- Mettre en place un enregistreur de données environnementales à faible coût pour un projet scientifique scolaire.
- Développer un système de sécurité ou d'alerte de base capable de vous notifier en cas de changements soudains de température.
Matériel et composants
Pour suivre ce projet, vous aurez besoin des composants suivants. Les composants principaux sont le module ESP8266 et le capteur DHT11, mais les autres sont essentiels pour programmer et alimenter le module.
- Module ESP8266 (ESP-01S) : Le microcontrôleur principal avec capacité Wi-Fi intégrée.
- Capteur de température et d'humidité DHT11 : Le capteur qui mesure les données environnementales.
- Carte Arduino Uno (pour la conversion USB-série) : Dans ce projet, la carte Arduino principale n'est pas utilisée pour sa puissance de traitement. À la place, sa puce USB-série est utilisée pour programmer le module ESP8266.
- Résistance de 330 ohms : Utilisée pour le test initial de clignotement de la LED afin de limiter le courant.
- Résistance de 1k à 10k ohms : Une résistance de tirage vers le haut (pull-up) pour la ligne de données du capteur DHT11.
- LED et fils de connexion : Pour la phase de test et pour réaliser toutes les connexions nécessaires.
- Plaque d'essai (breadboard) : Pour créer les connexions du circuit.
Guide de câblage
Le processus de câblage se fait par étapes. Tout d'abord, nous allons monter le circuit de base pour programmer l'ESP-01. Cela implique d'utiliser l'Arduino Uno comme programmateur. La vidéo montre clairement ce montage. Les connexions clés sont les suivantes :
Pour entrer en mode programmation, vous devez connecter la broche IO1 (GPIO1) à la masse (GND). Cela indique à l'ESP8266 d'attendre un nouveau firmware. Les autres connexions pour la programmation sont :
- VCC (3,3 V) à EN (Enable) : Cela active le module.
- GND à GND : Masse commune pour le circuit.
- VCC (5 V) à VCC (5 V) : Pour alimenter la carte programmateur.
- RX (ESP) à TX (Arduino) : Pour la communication série du programmateur vers le module.
- TX (ESP) à RX (Arduino) : Pour la communication série du module vers le programmateur.
- RST (Reset) à GND : C'est une connexion temporaire utilisée pour réinitialiser le module après la programmation.
Une fois l'ESP-01 programmé, le câblage du capteur est simple. Le capteur DHT11 nécessite une résistance de tirage vers le haut (pull-up) sur sa ligne de données pour garantir une communication stable.
Pour le montage du capteur, le câblage est le suivant :
- DHT11 VCC (Broche 1) à 3,3 V : Alimentation du capteur.
- DHT11 DATA (Broche 2) à GPIO2 (IO2) sur l'ESP-01 : La ligne de données pour les relevés du capteur. Une résistance de tirage vers le haut de 1k à 10k ohms doit être connectée entre cette ligne de données et la ligne d'alimentation 3,3 V.
- DHT11 GND (Broche 4) à GND : Masse commune pour le capteur.
Préparation de l'IDE Arduino
Pour programmer l'ESP8266, vous devez d'abord ajouter son support de carte à votre IDE Arduino. Cela se fait en deux étapes :
- Ajouter l'URL du gestionnaire de cartes : Allez dans
Fichier > Préférences. Dans le champ "URLs de gestionnaire de cartes supplémentaires", collez l'URL suivante :http://arduino.esp8266.com/stable/package_esp8266com_index.jsonet cliquez sur "OK". - Installer le paquet de cartes ESP8266 : Naviguez vers
Outils > Type de carte > Gestionnaire de cartes.... Recherchez "esp8266", trouvez "esp8266 par ESP8266 Community", et cliquez sur "Installer". Après l'installation, vous pouvez sélectionner la carte en allant dansOutils > Type de carte > Cartes ESP8266 > Generic ESP8266 Module.
Installation de la bibliothèque du capteur DHT
Le code repose sur une bibliothèque pour interfacer avec le capteur DHT11. Cette bibliothèque doit être installée dans votre IDE Arduino.
- Allez dans
Outils > Gérer les bibliothèques.... - Recherchez "DHT sensor library".
- Trouvez la bibliothèque par Adafruit et cliquez sur "Installer". Cette bibliothèque simplifie le processus de lecture des données du capteur.
Projet 1 : Test de clignotement de LED
Avant de plonger dans le capteur, il est crucial de vérifier que vous pouvez programmer avec succès l'ESP-01. Cela se fait avec l'exemple classique « Blink ». La vidéo montre un processus d'exportation du binaire compilé et d'utilisation d'un fichier batch séparé pour le flasher, ce qui est une solution de contournement pour la configuration USB-série spécifique. L'objectif est de voir la LED intégrée clignoter, confirmant que la chaîne de programmation fonctionne. Pour exécuter le module après la programmation, vous devez déconnecter le fil reliant IO1 à GND, puis connecter brièvement la broche RST à GND pour réinitialiser le module.
Projet 2 : Lecture du DHT11 sur le moniteur série
Une fois la programmation confirmée, l'étape suivante consiste à connecter le capteur DHT11 et à lire ses données. Ce projet utilise l'exemple DHTtester de la bibliothèque de capteurs Adafruit DHT. Le code est configuré pour utiliser la bonne broche et le bon type de capteur. Après avoir flashé ce programme, vous pouvez ouvrir le moniteur série (réglé sur 9600 bauds) pour voir les relevés de température et d'humidité.
Projet 3 : Configuration du serveur web
Le projet final combine tout. L'ESP8266 est programmé pour se connecter à votre réseau Wi-Fi local et héberger une simple page web. Cette page affiche les relevés en direct de température et d'humidité. Le code est une version modifiée de l'exemple « HelloServer » de l'ESP8266. La vidéo montre comment accéder à ces données en saisissant l'adresse IP de l'appareil ou son nom mDNS (par exemple, robojaxDHT.local) dans un navigateur web sur n'importe quel appareil connecté au même réseau.
Explication du code
Étant donné que le programme complet est disponible en téléchargement, cette section se concentre sur les variables clés configurables par l'utilisateur que vous devrez ajuster pour votre propre réseau et vos préférences. Le code est une version modifiée de l'exemple « HelloServer » de l'ESP8266. La logique principale consiste à lire le capteur et à formater une page HTML pour afficher les données.
Voici les parties critiques du code que vous devrez modifier :
// Identifiants Wi-Fi - VOUS DEVEZ LES CHANGER
const char* ssid = "YourWiFiSSID"; // Remplacez par le nom de votre réseau Wi-Fi
const char* password = "YourWiFiPassword"; // Remplacez par votre mot de passe Wi-Fi
C'est la section la plus importante à modifier. Les variables ssid et password doivent correspondre exactement à votre réseau Wi-Fi local. Le nom Wi-Fi est sensible à la casse, assurez-vous donc de le saisir correctement.
// Configuration du capteur DHT11
#define DHTPIN 2 // Broche numérique connectée au capteur DHT (GPIO2)
#define DHTTYPE DHT11 // Type de capteur DHT 11
Ces définitions configurent le capteur. DHTPIN est la broche GPIO de l'ESP8266 à laquelle la ligne de données du capteur est connectée (qui est GPIO2 dans ce guide). DHTTYPE définit le modèle spécifique du capteur. Si vous utilisiez un capteur DHT22, vous décommenteriez la ligne pour DHT22 et commenteriez celle pour DHT11.
// Variables configurables
const long interval = 3000; // millisecondes entre les lectures du capteur
char temperature[] = "00.0";
char humidity[] = "00.0";
La variable interval contrôle la fréquence à laquelle le capteur est lu et la page web est mise à jour. La valeur par défaut est de 3000 millisecondes (3 secondes). Vous pouvez l'augmenter à une valeur plus élevée comme 5000 ou 10000 pour réduire la fréquence des mises à jour.
Le code inclut également une fonction qui formate la lecture de température. Vous pouvez choisir d'afficher la température en Celsius ou en Fahrenheit en modifiant la logique dans la fonction sendTemperature(). La vidéo explique que la variable Tvalue est définie pour contenir la lecture en Celsius, mais vous pouvez la changer pour utiliser la variable Fahrenheit F à la place.
Démonstration du projet en direct
Dans la vidéo, le projet terminé est démontré. Après avoir flashé le code et réinitialisé le module, il se connecte au réseau Wi-Fi. Le moniteur série affiche l'état de la connexion et l'adresse IP de l'appareil. En naviguant vers cette adresse IP dans un navigateur web, vous pouvez voir une simple page affichant la température et l'humidité actuelles. La démonstration montre les relevés se mettant à jour en temps réel. Lorsque le capteur DHT11 est chauffé avec un pistolet thermique, la lecture de température sur la page web augmente en conséquence. Si le fil de données du capteur est déconnecté, la page affiche « None » pour les valeurs du capteur, ce qui est une fonctionnalité de dépannage utile.
Chapitres
- [00:00] Introduction au projet
- [01:33] Comprendre l'ESP8266 et les serveurs web
- [05:47] Câblage de l'ESP-01 pour la programmation
- [08:51] Installation du support de carte ESP8266 dans l'IDE Arduino
- [11:47] Projet 1 : Faire clignoter une LED avec l'ESP8266
- [20:28] Câblage du capteur DHT11
- [22:34] Installation de la bibliothèque de capteurs DHT
- [23:13] Projet 2 : Lecture du DHT11 sur le moniteur série
- [30:10] Explication du code pour le projet de serveur web
- [36:14] Projet 3 : Flashage du code du serveur web
- [38:42] Démonstration : Visualisation de la température via Wi-Fi
- [41:43] Conclusion et dépannage
/*
* Display temperature using DHT11, DHT22 with NodeMCU ESP8266
* over WiFi in local network on computer o mobile devices
*
* Written by Ahmad Shamshiri on Sep 27, 2019
* in Ajax, Ontario, Canada
* Watch video instruciton for this video: https://youtu.be/1A4-6hDARQc
*
* I have combined DHT library of Adafruit with ESP8266 WebServer both links
* Adafruit DHT library on GitHub: https://github.com/adafruit/DHT-sensor-library
* and
* ESP8266 on GitHub : https://github.com/esp8266/Arduino
* Download and resource page https://robojax.com/RJT614
*
Get this code and other Arduono codes from Robojax.com
* Code is available at https://robojax.com/RJT614
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
const int refresh=3;//3 seconds
// DHT settings starts
#include "DHT.h"
#define DHTPIN 2 // what digital pin we're connected to
// Uncomment whatever type you're using!
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);
float tValue, hValue;//
char *simipleName="robojaxDHT";//android
// ****** DHT settings end (Robojax.com )
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#ifndef STASSID
#define STASSID "Robojax" // Your WiFi SSID
#define STAPSK "100%Right" //Your WiFi password
#endif
const char* ssid = STASSID;
const char* password = STAPSK;
ESP8266WebServer server(80);
void sendTemp() {
String page = "<!DOCTYPE html>";
page +=" <meta http-equiv='refresh' content='";
page += String(refresh);// how often temperature is read
page +="'/>";
page +="<html dir=\"rtl\">";
page +="<body>";
page +="<h1>رطوبت و حرارت توسط دی اچ تی</h1>";
page +="<p style=\"font-size:150px;\">حرارت<br/>";
page +="<span style=\"color:red; font-size:150px;\">";
page += String(tValue, 2);
page +="°C</p>";
page +="<p style=\"font-size:150px;\">رطوبت<br/>";
page +="<span style=\"color:red; font-size:150px;\">";
page += String(hValue, 2);
page +="%</p>";
page +="</body>";
page +="</html>";
server.send(200, "text/html",page);
}
void handleNotFound() {
String message = "File Not Found";
message += "URI: ";
message += server.uri();
message += "Method: ";
message += (server.method() == HTTP_GET) ? "GET" : "POST";
message += "Arguments: ";
message += server.args();
message += "";
for (uint8_t i = 0; i < server.args(); i++) {
message += " " + server.argName(i) + ": " + server.arg(i) + "";
}
server.send(404, "text/plain", message);
}
void setup(void) {
// Robojax.com code for ESP8266 and DHT11 DHT22
dht.begin();
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.println("");
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
if (WiFi.status() == WL_CONNECTED)
{
uint8_t macAddr[6];
WiFi.macAddress(macAddr);
Serial.printf("Connected, mac address: %02x:%02x:%02x:%02x:%02x:%02x", macAddr[0], macAddr[1], macAddr[2], macAddr[3], macAddr[4], macAddr[5]);
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
if (MDNS.begin(simipleName)) {
Serial.print("or view http://");
Serial.println(simipleName);
}
server.on("/", sendTemp);
server.on("/inline", []() {
server.send(200, "text/plain", "this works as well");
});
server.onNotFound(handleNotFound);
server.begin();
Serial.println("HTTP server started");
}
void loop(void) {
// Robojax.com code for ESP8266 and DHT11 DHT22
server.handleClient();
MDNS.update();//multicast DNS
float c = dht.readTemperature();// Read temperature as Celsius (the default)
float h = dht.readHumidity();// Reading humidity
float f = dht.readTemperature(true);// Read temperature as Fahrenheit (isFahrenheit = true)
Serial.print(c);
Serial.println(F("°C "));
tValue =c;//save temperature for display
hValue =h;//save humidity for display
delay(300);// change this to larger value (1000 or more) if you don't need very often reading
// Robojax.com code for ESP8266 and DHT11 DHT22
}
Common Course Links
Common Course Files
Ressources et références
Aucune ressource pour le moment.
Fichiers📁
Code Arduino (.ino)
-
Codes ESP8266_ESP1_DHT111 pour la leçon 31 du kit 3-en-1 de Sunfounder
ESP8266_ESP1_DHT111_all.zip9.31 MB
Fichier Fritzing
-
Capteur d'humidité et de température DHT11 (3 broches)
DHT11 Humitidy and Temperature Sensor (3 pins).fzpz0.20 MB
Manuel de l'Utilisateur
-
Manuel de l'utilisateur DHT11
robojax-DHT11_manual.pdf0.82 MB