Raspberry PI

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:

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/

https://cdn-learn.adafruit.com/downloads/pdf/dht-humidity-sensing-on-raspberry-pi-with-gdocs-logging.pdf

* 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

Lascia una risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *