DHT11 : Mesurer température et taux d’humidité ambiant avec l’ESP32 en code Arduino
(Mis à jour le 15/01/2023)
Le capteur DHT11 est un capteur de température et d’humidité très populaire dans le monde des Makers et du DIY. Son faible prix et sa facilité d’utilisation lui ont attribué ce succès.
Avertissement
Le fait qu’on puisse avoir qu’une mesure par seconde est son principal inconvénient. Ceci dit, il conviendra parfaitement pour fabriquer une station météo connectée basique 🙂.
Prendre en main le capteur DHT11
Il existe un modèle plus haut de gamme, le DHT 22 qui est plus complet. Pour les différencier, on peut regarder les couleurs de leur boîtier : le DHT11 à un boîtier bleu tandis que le DHT22 est en blanc. Le DHT22 est en légèrement plus gros également. Hormis leurs différences, ils s’utilisent exactement de la même façon. Pour en savoir plus sur les différences, je vous encourage à lire la comparaison entre les capteurs DHT11 et le DHT22 .
Quelques caractéristiques techniques du DHT11
Le DHT11 peut être directement alimenté en 3.3V.
Caractéristiques |
DHT11 |
---|---|
Précision température |
± 2°C |
Précision Humidité |
± 5% |
Plage de température |
0-50 °C |
Plage Humidité |
20-90% |
Échantillonnage |
1/s |
Tension d’alimentation |
3-5.5V |
Courant |
~2.5mA |
Les performances sont vraiment basiques, ce qui limite l’utilisation du capteur. Je vous conseille d’utiliser un capteur de la série des BMExxx du fabricant Bosh pour avoir de meilleures mesures.
Branchements du capteur DHT11
Le capteur DHT 11 possède entre 3 et 4 broches en fonction de votre module. Sur le modèle à 4 broches, une ne sert à rien. Malheureusement, il y a différent brochage en fonction du fabricant du module. Voici un récapitulatif de différentes possibilités :
La numérotation se fait depuis la gauche, quand vous tenez le capteur face à vous (la partie avec la grille en face de vous).
Mis à part les broches d’alimentations, le DHT11 possède une unique broche pour transmettre les données des capteurs.
Schéma électrique pour utiliser le module DHT11 avec un ESP32
Si le module ne contient pas de résistance de pullup, il faut en rajouter une entre 4.7kΩ (ou 10kΩ )entre les broches 3V3
et le signal (GPIO17
). Vous pouvez toujours en rajouter une, cela ne fera pas de mal.
N’importe quelle broche de sortie peut être utilisée. Ici, on utilise la broche GPIO17
. Dans les schémas suivants j’utilise le capteur DHT11 d’Elegoo, n’oubliez pas d’adapter à votre modèle si celui-ci est légèrement différent 🙂.
Avertissement
Vérifier que vous alimentez bien le module en 3.3V et non 5V pour avoir un signal de données de 3.3V également.
Mesurer la température et l’humidité ambiante du DHT11 avec du code Arduino
Puisque le DHT11 utilise un protocole propriétaire, il est indispensable d’utiliser une librairie pour communiquer facilement avec le capteur. Je vous conseille d’utiliser la librairie DHT Sensor d’Adafruit qui fonctionne correctement sur l’ESP32 .
Voici comment l’installer depuis l’Arduino IDE :
Une fois que la librairie est installée on utilise le code suivant qui récupère la température et le taux d’humidité du DHT11.
#include "DHT.h"
#define DHTPIN 17
#define DHTTYPE DHT11
//DHTTYPE = DHT11, mais il existe aussi le DHT22 et 21
DHT dht(DHTPIN, DHTTYPE); // constructeur pour déclarer notre capteur
void setup() {
Serial.begin(115200);
dht.begin();
}
void loop() {
delay(1000);
// Le DHT11 renvoie au maximum une mesure toute les 1s
float h = dht.readHumidity();
//Lis le taux d'humidite en %
float t = dht.readTemperature();
//Lis la température en degré celsius
float f = dht.readTemperature(true);
//Avec (true), renvoi la température en fahrenheit
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Echec reception");
return;
//Renvoie une erreur si l'ESP32 ne reçoit aucune mesure
}
Serial.print("Humidite: ");
Serial.print(h);
Serial.print("% Temperature: ");
Serial.print(t);
Serial.print("°C, ");
Serial.print(f);
Serial.println("°F");
// Transmet les mesures reçues dans le moniteur série
}
Note
Le DHT.h
au début du programme permet d’inclure la librairie DHT Sensor.
Voici ce que l’on obtient dans la console :
Note
Vous pouvez souffler sur le capteur DHT11, comme quand on souffle sur une vitre glacée pour enlever la buée. Vous devriez voir le taux d’humidité grimper en flèche.
Ce n’est pas possible d’avoir plus de mesures par seconde, ce capteur n’est pas très adapté pour détecter très rapidement un changement de température brutal.
Faire des mesures asynchrones avec le DHT11
Vous remarquerez que la mesure est bloquante: l’ESP32 ne peut rien faire d’autre pendant les mesures. Une solution évidente est de remplacer la fonction delay()
avec la fonction millis()
dans une condition if
. Mais malgré tout, l’échange de données avec le DHT11 sera toujours bloquant : votre programme sera bloqué par à-coups.
La meilleure solution est d’utiliser une librairie qui fonctionne avec des timers et des interruptions, pour que les mesures soient faites en tâches de fond :
Cette section est réservée aux abonnés. Il vous reste 36% à découvrir.
Devenir membre premiumDéjà abonné ? Connectez-vous