DHT11 : Mesurer température et taux d’humidité ambiant avec l’ESP32 en MicroPython
(Mis à jour le 05/01/2023)

Le capteur DHT11 est très populaire parmi les makers et les adeptes du DIY. Il est, en effet, si prisé qu’il est inclus par défaut dans MicroPython. Son prix avantageux et sa simplicité d’utilisation en sont les principales raisons.
Avertissement
Le principal inconvénient est qu’on peut prendre une mesure qu’une fois par seconde. Cependant, cela conviendra parfaitement pour la fabrication d’une station météo connectée basique 🙂.
Prendre en main le capteur DHT11
Il existe un modèle plus avancé, le DHT 22, qui est plus complet. On peut les différencier en regardant les couleurs de leur boîtier : le DHT11 a une couleur bleue alors que le DHT22 est blanc. Le DHT22 est aussi légèrement plus grand. Malgré leurs différences, ils sont utilisés de la même façon. Pour en savoir plus sur les différences, je vous encourage à consulter la comparaison entre les capteurs DHT11 et le DHT22 .
Quelques caractéristiques techniques du DHT11
Le DHT11 peut être alimenté directement par la tension de 3.3V de l’ESP32.
Étant donné que les mesures du DHT11 sont très simples, je vous suggère d’utiliser un capteur de la série BMExxx du fabricant Bosh pour des mesures plus précises. Bien sûr, le coût n’est pas le même 😉
Branchements du capteur DHT11
Le capteur DHT11 a entre 3 et 4 broches selon votre module. Sur le modèle à 4 broches, une ne sert à rien. Malheureusement, il y a différentes connectiques en fonction du fabricant du module. La numérotation se fait à partir de la gauche, lorsque vous tenez le capteur face à vous (la partie avec la grille en face de vous). Voici un récapitulatif des différentes possibilités :

Différents brochages sont possibles (celui d’Elegoo est à gauche)
À part les broches d’alimentation, le DHT11 possède une seule broche pour transmettre les données des capteurs.
Circuit électrique pour utiliser le module DHT11 avec un ESP32
Si le module ne comporte pas de résistance de pullup, il faut en ajouter une entre 4.7kΩ (ou 10kΩ) entre les broches 3V3
et le signal (GPIO17
). Il ne peut pas y avoir de mal à en ajouter une 🙂.
N’importe quelle broche de sortie peut être utilisée. Ici, c’est la broche GPIO17
. Dans les circuits suivants, j’utilise le capteur DHT11 d’Elegoo, n’oubliez pas de modifier selon votre modèle si celui-ci est différent.


Avertissement
Assurez-vous que le module est bien alimenté en 3.3V et non 5V pour qu’un signal de données de 3.3V soit obtenu.
Mesurer la température et l’humidité ambiante du DHT11 avec MicroPython
Puisque le DHT11 utilise un protocole propriétaire, il est nécessaire d’utiliser une bibliothèque pour communiquer facilement avec le capteur. Heureusement, elle est incluse par défaut dans MicroPython, donc il n’y a pas besoin de télécharger une bibliothèque externe supplémentaire 😎.
Le code à utiliser est très simple : il suffit d’instancier un objet dht
avec un numéro de pin et d’utiliser la fonction capteur.measure()
.
from machine import Pin
from time import sleep
import dht
capteur = dht.DHT11(Pin(17))
while True:
try:
sleep(1)
# Le DHT11 renvoie au maximum une mesure toute les 1s
capteur.measure()
# Récupère les mesures du capteur
print(f"Temperature : {capteur.temperature():.1f}")
print(f"Humidite : {capteur.humidity():.1f}")
# Transmet la température sur la console de l'ordinateur
except OSError as e:
print('Echec reception')
# Si l'esp ne reçoit pas les mesures du capteur
Note
On ajoute une seconde entre chaque mesure car le DHT11 ne peut pas aller plus vite😮💨. Si le DHT11 ne parvient pas à suivre le rythme, une erreur sera capturée grâce au try: execpt:
!
Voici ce qui est affiché dans le terminal de l’IDE Thonny. La température est exprimée en degrés Celsius, tandis que l’humidité est exprimée en pourcentage.

Note
Vous pouvez souffler sur le capteur DHT11, comme vous le feriez sur une vitre givrée pour enlever la buée.
En Python, vous pouvez utiliser des f-string
pour afficher facilement des variables avec du texte f"Humidite: {capteur.humidity():.1f}"
. La chaîne de caractères doit commencer par un f
et la variable devra être entre crochets. Vous pouvez également spécifier le nombre de chiffres après la virgule qui doivent être affichés avec :.1f
.
Avertissement
Vous pourriez même mettre zéro car le capteur est précis qu’à un degré près !