
Sensore di temperatura DHT22
In questa pagina verrà illustrato come collegare ad una Raspberry un sensore di temperatura e umidità DHT22 e leggerne i dati. Il sensore in oggetto è in grado di rilevare temperature comprese tra -40°C e +80°C; la sua alimentazione deve essere compresa tra i 3 ed i 5.5V; e comunica tramite protocollo 1-WIRE, ovvero un protocollo in grado di comunicare con il processore tramite un solo filo, alimentazione e massa a parte.
La lunghezza massima del cavo che può essere utilizzato dipende dalla qualità del cavo, il protocollo 1Wire è suscettibile alla capacità, utilizzare indi un cavo a bassa capacità, evitare cavi schermati ma preferire piattine telefoniche. Il funzionamento dovrebbe funzionare addirittura a 100 metri.
Se si ha a disposizione il solo sensore “bianco”, senza la scheda “nera” con le resistenze, sarà necessario interporre una resistenza di pull-up da 4.7KΩ tra il pin di alimentazione e quello di comunicazione.
Attenzione! Utilizzo due di questi sensori su due distinte Raspberry, e quasi quotidianamente rilevo una o più misurazioni artefate. Proprio oggi ho avuto una misurazione di -19°C e 5500% di umidità. Sarà quindi utile implementare nel software una funzione di controllo per misure (false) troppo estreme. Il problema è dovuto al protocollo 1WIRE che è di tipo asicrono, ed in caso di errore durante la trasmissione del segnale digitale, i dati saranno corrotti.
Materiale necessario:
- una Raspberry
- sensore DHT22 *
- una piastra sperimentale (si può cablare anche in aria o su millefori) *
- cavetti
- una resistenza da 4700Ω
Configurazione hardware/software
Iniziamo scaricando il software necessario:
git clone https://github.com/adafruit/Adafruit_Python_DHT.git
cd Adafruit_Python_DHT
installiamo le librerie e riavviamo il sistema:
sudo apt-get update
sudo apt-get install build-essential python-dev python-openssl
sudo python setup.py install
sudo reboot
Codice in PYTHON
Le istruzioni in PYTHON sono molto semplici e facilmente personalizzabili:
import Adafruit_DHT
DHT_SENSOR = Adafruit_DHT.DHT22
DHT_PIN = 4
def getTemp():
humidity, temperature = Adafruit_DHT.read_retry(DHT_SENSOR, DHT_PIN)
if humidity is not None and temperature is not None:
return ("Temp={0:0.1f}*C Umidità={1:0.1f}%".format(temperature, humidity))
else:
return ("Errore di lettura dati dal sensore DHT22")
if __name__ == "__main__":
from time import sleep
while True:
print(getTemp())
sleep(10)
Questo pagina prende spunto dal sito ADAFRUIT:
https://learn.adafruit.com/dht-humidity-sensing-on-raspberry-pi-with-gdocs-logging
https://pypi.org/project/Adafruit-DHT/
* In qualità di Affiliato Amazon io ricevo un guadagno dagli acquisti idonei

Un commento
Lorenzo
ciao, stavo provando ad utilizzare il sensore dht 22 con il raspberry 4 e quando provo ad usare il codice sopra mi restituisce il seguente errore
Traceback (most recent call last):
File “/home/pi/Adafruit_Python_DHT/temperatura.py”, line 14, in
humidity, temperature = Adafruit_DHT.read_retry(sensor, gpio)
File “/home/pi/Adafruit_Python_DHT/Adafruit_DHT/common.py”, line 94, in read_retry
humidity, temperature = read(sensor, pin, platform)
File “/home/pi/Adafruit_Python_DHT/Adafruit_DHT/common.py”, line 80, in read
platform = get_platform()
File “/home/pi/Adafruit_Python_DHT/Adafruit_DHT/common.py”, line 60, in get_platform
from . import Beaglebone_Black
File “/home/pi/Adafruit_Python_DHT/Adafruit_DHT/Beaglebone_Black.py”, line 24, in
from . import Beaglebone_Black_Driver as driver
ImportError: cannot import name ‘Beaglebone_Black_Driver’ from ‘Adafruit_DHT’ (/home/pi/Adafruit_Python_DHT/Adafruit_DHT/__init__.py)
da cosa dipende?
grazie ciao
Lorenzo