Note
Bonjour et bienvenue dans la Communauté Facebook des passionnés de Raspberry Pi, Arduino et ESP32 de SunFounder ! Plongez plus profondément dans l’univers des Raspberry Pi, Arduino et ESP32 avec d’autres passionnés.
Pourquoi rejoindre ?
Support d’experts : Résolvez les problèmes après-vente et les défis techniques avec l’aide de notre communauté et de notre équipe.
Apprendre et partager : Échangez des astuces et des tutoriels pour améliorer vos compétences.
Aperçus exclusifs : Accédez en avant-première aux annonces de nouveaux produits et aux aperçus.
Réductions spéciales : Profitez de réductions exclusives sur nos produits les plus récents.
Promotions festives et cadeaux : Participez à des cadeaux et des promotions de vacances.
👉 Prêt à explorer et à créer avec nous ? Cliquez [Ici] et rejoignez-nous aujourd’hui !
2.2.3 DHT-11
Introduction
Le capteur de température et d’humidité numérique DHT11 est un capteur composite qui contient une sortie de signal numérique calibrée de température et d’humidité. La technologie de collecte de modules numériques dédiés et la technologie de détection de température et d’humidité sont appliquées pour garantir que le produit possède une haute fiabilité et une excellente stabilité.
Les capteurs incluent un capteur résistif d’élément humide et un capteur de température NTC et ils sont connectés à un microcontrôleur 8 bits haute performance.
Composants Nécessaires
Pour ce projet, nous avons besoin des composants suivants :
Il est très pratique d’acheter un kit complet, voici le lien :
Nom |
ÉLÉMENTS DANS CE KIT |
LIEN |
|---|---|---|
Kit Raphael |
337 |
Vous pouvez également les acheter séparément via les liens ci-dessous.
INTRODUCTION DES COMPOSANTS |
LIEN D’ACHAT |
|---|---|
Schéma Électrique
Procédures Expérimentales
Étape 1 : Construire le circuit.
Étape 2 : Aller dans le dossier du code.
cd ~/raphael-kit/python/
Étape 3 : Exécuter le fichier exécutable.
sudo python3 2.2.3_DHT.py
Après l’exécution du code, le programme affichera la température et l’humidité détectées par le DHT11 sur l’écran de l’ordinateur.
Code
Note
Vous pouvez Modifier/Réinitialiser/Copier/Exécuter/Arrêter le code ci-dessous. Mais avant cela, vous devez accéder au chemin du code source comme raphael-kit/python. Après avoir modifié le code, vous pouvez l’exécuter directement pour voir l’effet.
from gpiozero import OutputDevice, InputDevice
import time
class DHT11():
MAX_DELAY_COUINT = 100
BIT_1_DELAY_COUNT = 10
BITS_LEN = 40
def __init__(self, pin, pull_up=False):
self._pin = pin
self._pull_up = pull_up
def read_data(self):
bit_count = 0
delay_count = 0
bits = ""
# -------------- send start --------------
gpio = OutputDevice(self._pin)
gpio.off()
time.sleep(0.02)
gpio.close()
gpio = InputDevice(self._pin, pull_up=self._pull_up)
# -------------- wait response --------------
while gpio.value == 1:
pass
# -------------- read data --------------
while bit_count < self.BITS_LEN:
while gpio.value == 0:
pass
# st = time.time()
while gpio.value == 1:
delay_count += 1
# break
if delay_count > self.MAX_DELAY_COUINT:
break
if delay_count > self.BIT_1_DELAY_COUNT:
bits += "1"
else:
bits += "0"
delay_count = 0
bit_count += 1
# -------------- verify --------------
humidity_integer = int(bits[0:8], 2)
humidity_decimal = int(bits[8:16], 2)
temperature_integer = int(bits[16:24], 2)
temperature_decimal = int(bits[24:32], 2)
check_sum = int(bits[32:40], 2)
_sum = humidity_integer + humidity_decimal + temperature_integer + temperature_decimal
# print(bits)
# print(humidity_integer, humidity_decimal, temperature_integer, temperature_decimal)
# print(f'sum:{_sum}, check_sum:{check_sum}')
# print()
if check_sum != _sum:
humidity = 0.0
temperature = 0.0
else:
humidity = float(f'{humidity_integer}.{humidity_decimal}')
temperature = float(f'{temperature_integer}.{temperature_decimal}')
# -------------- return --------------
return humidity, temperature
if __name__ == '__main__':
dht11 = DHT11(17)
while True:
humidity, temperature = dht11.read_data()
print(f"{time.time():.3f} temperature:{temperature}°C humidity: {humidity}%")
time.sleep(2)
Explication du Code
def read_data(self):
bit_count = 0
delay_count = 0
bits = ""
# -------------- send start --------------
gpio = OutputDevice(self._pin)
gpio.off()
time.sleep(0.02)
gpio.close()
gpio = InputDevice(self._pin, pull_up=self._pull_up)
#...
Cette fonction est utilisée pour implémenter les fonctions du DHT11. Elle stocke les données détectées dans le tableau bits[]. Le DHT11 transmet des données de 40 bits à la fois. Les 16 premiers bits sont liés à l’humidité, les 16 bits du milieu sont liés à la température, et les huit derniers bits sont utilisés pour la vérification.
Le format des données est le suivant :
8 bits de données entières d’humidité + 8 bits de données décimales d’humidité + 8 bits de données entières de température + 8 bits de données décimales de température + 8 bits de bit de contrôle.
Lorsque la validité est détectée via le bit de contrôle, la fonction renvoie deux résultats : 1. erreur ; 2. humidité et température.
_sum = humidity_integer + humidity_decimal + temperature_integer + temperature_decimal
if check_sum != _sum:
humidity = 0.0
temperature = 0.0
else:
humidity = float(f'{humidity_integer}.{humidity_decimal}')
temperature = float(f'{temperature_integer}.{temperature_decimal}')
Par exemple, si les données reçues sont 00101011 (valeur de 8 bits de l’entier d’humidité) 00000000 (valeur de 8 bits de la décimale d’humidité) 00111100 (valeur de 8 bits de l’entier de température) 00000000 (valeur de 8 bits de la décimale de température) 01100111 (bit de contrôle)
Calcul :
00101011+00000000+00111100+00000000=01100111.
Si le résultat final est égal aux données du bit de contrôle, la transmission des données est anormale : retour False.
Si le résultat final est égal aux données du bit de contrôle, les données reçues sont correctes,
alors il y aura un retour de humidity et temperature et l’affichage
« Humidité = 43%, Température = 60℃ ».
Image du Phénomène