Les capteurs Aosong DHT11 et DHT22 sont des sondes de température et humidité digitales. Ils contiennent un capteur d’humidité capacitif, une thermistance, ainsi qu’un CAN (convertisseur analogique numérique, ADC en Anglais). La communication se fait par une interface à 1 fil propriétaire (ce n’est pas le One-Wire de chez Dallas).
Caractéristiques
Caractéristique | DHT11 | DHT22 |
Couleur du boîtier | Bleu clair | Blanc |
Tension | 3,3 à 5,5 v | |
Consommation | 2,5 mA max | |
Mesure d’humidité | 20 à 80 % +/- 5 % | 0 à 100 % +/- 2 à 5 % |
Mesure température | 0 à 50 °C +/- 2 °C | -40 à 80 °C +/- 0,5 °C |
Fréquence mesure | 1 Hz | 0,5 Hz |
Distance max | 100 m | 20 m |
Note: Le DHT22 peut aussi être nommé AM2302. Il existe deux versions du boîtier. Une avec sortie sur broches et une avec sortie sur fils.
Le brochage est commun à cette famille de composants. Lorsqu’on regarde le boîtier de face (côté grille vers soi), broches en bas, on trouve de gauche à droite :
- L’alimentation
- Le bus à 1 fil
- Une broche non connectée
- La masse
Le seul composant requis est une résistance pull-up de 10 kOhms à placer entre l’alimentation et le bus de données.
Protocole de communication
La communication sur un fil est propriétaire. Chaque session dure environ 4 ms, et se déroule comme suit :
- Par défaut, le bus de données est à l’état haut du côté du DHT.
- Le Raspberry Pi le maintient à l’état bas pendant 18 ms pour informer le DHT qu’il est prêt à recevoir. Il envoie ensuite une impulsion haute de 20 à 40 µs et se met en attente de réponse.
- Quand le DHT reçoit ce signal de démarrage, il va placer le bus de données à l’état bas pendant 80 µs, puis à l’état haut pendant 80 µs en guise d’accusé de réception.
- Pendant la transmission des données, chaque bit émis par le DHT commence par un état bas de 50 µs suivi d’un état haut de 26 à 28 µs pour un « 0 »; ou de 70 µs pour un « 1 ».
- Au total, 40 bits (ou 5 octets) seront transmis. 4 de données plus 1 de somme de contrôle (voir décodage).
Lorsque la transmission est valide, la somme de contrôle doit contenir les 8 bits de poids le plus faible de l’addition des 4 octets de données.
Décodage du DHT11
Un DHT11 retournera 4 valeurs sur 8 bits non signés :
- la partie entière du taux d’humidité en %,
- la partie décimale du taux d’humidité en %,
- la partie entière de la température en °C,
- la partie décimale de la température en °C.
Décodage du DHT22
Un DHT22 retournera 2 valeurs de 16 bits signés :
- Le taux d’humidité en dixièmes de pourcent.
- La température en dixièmes de °C.
Le premier bit (de poids fort, donc) indique le signe. Positif pour 0 et négatif pour 1.
Chacune de ces deux valeurs devra être divisée par 10.
Mise en pratique 1: Outil en C
Note: La compilation de ces codes sources nécessite l’installation de WiringPi.
L’outil est basé sur un précédent travail ( »dht11.c ») d’auteur inconnu, disparu depuis (le code, pas l’auteur, quoi que, je n’en sais rien), et assez compliqué à trouver. Comme son nom le précise, c’est la version pour la sonde DHT11. Le second est basé sur le premier. J’ai ajouté et retiré quelques fonctionnalités et uniformisé les conventions de code.
Ils sont tous deux très similaires, seul la conversion des données lues changent d’un module à l’autre, au sortir de la boucle »for » de la fonction »read_dhtxx_dat() ».
Version DHT11 : Afficher le code source
Exemple de retour :
1 2 3 4 5 |
$ sudo ./dht1 0 Raspberry Pi wiringPi DHT11 Temperature test program. Humidity = 42.0 % Temperature = 26.0 *C (78.8 *F). |
On peut compiler ce source avec la commande :
1 |
$ gcc -o dht11 -lwiringPi dht11.c |
Version DHT22 : Afficher le code source
Exemple de retour :
1 2 3 4 5 6 7 |
$ sudo ./dht22 0 Raspberry Pi wiringPi DHT22 Temperature test program. Data not good, skip. Humidity = 45.30 % Temperature = 23.90 *C (75.0 *F). |
On peut compiler ce source avec la commande :
1 |
$ gcc -o dht22 -lwiringPi dht22.c |
Note: Cet article n’est pas terminé, merci de visiter cette page à nouveau dans quelque temps.
Références
- Aosong: Fabricant de ces sondes.
bonjour, je suis en plein projet avec mon raspberry quand je voulu utiliser les pin gpio pour un capteur dht22 donc j’ai installer wiringPi avec succes mais les tests du capteur ne fonctionne pas
Pouvais-vous m’aidez ?
merci