DHT11 - Mesurer Temperature et Humidité Ambiante avec Raspberry Pi Pico en code Arduino
(Mis à jour le 05/01/2023)
Le capteur DHT11 est très populaire parmi les Makers et les amateurs de DIY en raison de son prix abordable et de sa facilité d’utilisation.

Avertissement
Toutefois, il ne peut mesurer qu’une seule fois par seconde, ce qui est son principal inconvénient. Cependant, il conviendra parfaitement pour fabriquer une station météo basique connectée.
Prendre en main le capteur DHT11
Il existe également un modèle plus avancé, le DHT22, qui est plus complet. On peut les différencier en regardant les couleurs de leur boîtier: le DHT11 a un boîtier bleu, tandis que le DHT22 est en blanc. Le DHT22 est également légèrement plus grand. Outre leurs différences, ils s’utilisent de la même façon. Pour en apprendre davantage sur leurs différences, vous pouvez lire la comparaison entre les capteurs DHT11 et DHT22 .
Quelques caractéristiques techniques du DHT11
Le DHT11 peut être alimenté en 3.3V.
Malheureusement, les performances sont très limitées, ce qui limite l’utilisation du capteur. Je vous recommande d’utiliser par exemple un capteur de la série des BMExxx de Bosh pour obtenir de meilleures mesures.
Branchements du capteur DHT11
Le DHT11 a entre 3 et 4 broches selon le module. Sur le modèle à 4 broches, une n’est pas nécessaire. Malheureusement, le brochage des modules varie selon le fabricant.

Différents brochages sont possibles (celui d’Elegoo est à gauche)
Voici un récapitulatif de différentes possibilités :
La numérotation se fait depuis la gauche si on tient le capteur face à vous (la partie avec la grille tournée vers vous). À l’exception des broches d’alimentation, le DHT11 possède une seule broche pour transmettre les données.
Schéma électrique pour utiliser le module DHT11 avec une Pico
Si le module ne comporte pas de résistance pull-up, ajoutez-en une entre 4.7kΩ (ou 10kΩ) entre les broches 3V
et GP5
. Vous pouvez utiliser n’importe quelle broche de sortie.
Dans les exemples suivants, j’utilise un capteur DHT11 d’Elegoo. N’hésitez pas à adapter votre code si votre modèle est légèrement différent.

Câblage du DHT11 avec une carte uPesy RP2040 DevKit (Pico++)
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 avec le capteur. La librairie DHT Sensor d’Adafruit est recommandée pour la Raspberry Pi Pico.
Voici comment l’installer depuis l’Arduino IDE :

Une fois installée, utilisez le code suivant pour récupérer la température et le taux d’humidité du DHT11 :
#include "DHT.h"
#define DHTPIN 5
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
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(F("Echec reception"));
return;
//Renvoi une erreur si l'esp ne reçoi 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çu vers l'ordinateur via l'usb
}
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 :

Ce type de capteur n’est pas très adapté pour détecter très rapidement un changement de température, car il ne peut pas donner plus d’une mesure par seconde.
Note
Vous pouvez souffler sur le capteur DHT11, comme quand on souffle sur une fenêtre embuée pour la dégager. Vous devriez remarquer que le taux d’humidité augmente rapidement.
Faire des mesures asynchrones avec le DHT11
Vous remarquerez que la mesure est bloquante: la Raspberry Pi Pico 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 34% à découvrir.
Devenir membre premiumDéjà abonné ? Connectez-vous