capteur-dht11.py

NanoPi R5S (FriendlyElec) · 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

Un NanoPi R5S (Rockchip RK3568B2, 4 Cortex-A55, 2-4 Go) sous FriendlyCore/Ubuntu, routeur 1× GbE WAN + 2× 2,5 GbE LAN avec M.2 NVMe. 1 capteur DHT11/DHT22 + résistance 10 kΩ (module 3 broches : déjà intégrée).

Câblage

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.

Exécution

Sous FriendlyCore : apt install gpiod python3-gpiod ; le connecteur GPIO suit le brochage FriendlyElec du R5S — identifier la puce avec gpiodetect et le numéro de ligne avec gpioinfo.

Variantes

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