capteur-dht11.py

BeagleBone AI-64 (TI TDA4VM / J721E) · Fichier : capteur-dht11.py · Langage : Python · Usage : Lire un capteur DHT11/DHT22 depuis Linux (température/humidité)

Le pilote Adafruit CircuitPython fonctionne sur Linux standard : il bit-bang le protocole 1 fil du DHT via libgpiod. Le script affiche température et humidité toutes les 2 s, en encaissant les trames invalides sans crasher.

Matériel requis

Une BeagleBone AI-64 (TI J721E, 2 GHz) sur image Debian officielle, alimentée en 5 V/4 A par USB-C, avec ses deux connecteurs cape P8/P9 en 3,3 V. 1 capteur DHT11/DHT22 + résistance 10 kΩ (module 3 broches : déjà intégrée).

Branchement

VDD sur 3,3 V, DATA sur la broche du script (GPIO4) avec pull-up 10 kΩ vers 3,3 V, GND sur GND.

Fonctionnement

adafruit_dht pilote le protocole par le noyau (use_pulseio=False) : impulsion de départ, lecture des microsecondes, décodage. Les échecs périodiques sont normaux sur DHT11. Sous Debian : sudo apt install gpiod python3-gpiod ; gpiodetect identifie les chips (le chip principal est 600000.gpio). Les broches P8/P9 sont nommées dans gpioinfo.

Pour aller plus loin

Journaliser en CSV avec le script cron, ou exposer les valeurs au réseau avec le serveur web intégré au port 8080.

capteur-dht11.py

#!/usr/bin/env python3
# DHT11/DHT22 via adafruit-circuitpython-dht (pilote en noyau ou bit-bang).
# Installation :
#   sudo apt install python3-dev python3-venv libgpiod2
#   python3 -m venv ~/.venv && source ~/.venv/bin/activate
#   pip install adafruit-circuitpython-dht
import time
import board
import adafruit_dht

# Broche physique 7 (GPIO4 sur connecteur standard 40 broches) :
capteur = adafruit_dht.DHT11(board.D4, use_pulseio=False)
# DHT22 : adafruit_dht.DHT22(board.D4, use_pulseio=False)

print("Ctrl-C pour arreter")
while True:
    try:
        t = capteur.temperature      # degres Celsius
        h = capteur.humidity         # % HR
        print(f"T = {t:0.1f} C | HR = {h:0.1f} %")
    except RuntimeError as erreur:
        # Le DHT rate parfois une trame : normal, on recommence.
        print("trame invalide:", erreur.args[0])
    time.sleep(2.0)

← Retour à la fiche