capteur-dht11.py
The Adafruit CircuitPython driver runs on stock Linux: it bit-bangs the DHT 1-wire protocol through libgpiod. The script prints temperature and humidity every 2 s, shrugging off invalid frames without crashing.
Hardware
An Orange Pi 3B (Rockchip RK3566, 4 Cortex-A55, 2-8 GB) running Armbian, with an M.2 socket for NVMe/SATA SSD and gigabit Ethernet. 1 DHT11/DHT22 sensor + 10 kΩ resistor (3-pin module: already built in).
Wiring
VDD to 3.3 V, DATA to the script pin (GPIO4) with a 10 kΩ pull-up to 3.3 V, GND to GND.
How it works
adafruit_dht drives the protocol through the kernel (use_pulseio=False): start pulse, microsecond timing, decoding. Periodic failures are normal on the DHT11.
Running it
On Armbian: apt install gpiod python3-gpiod; identify the 40-pin header GPIO chip with gpiodetect and gpioinfo, then run the script (sudo the first time).
Variants
Log to CSV with the cron script, or expose readings over the network with the built-in web server on 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)