
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.
Per il collegamento ad ua RASPBERRY occorrerà una resistenza di pull-up da 4.7KΩ da interporre tra il pin di alimentazione e quello di comunicazione. 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.
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.
Materiale necessario:
- una Raspberry
- una piastra sperimentale (si può cablare anche in aria o su millefori)
- cavetti
- sensore DHT22
- 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:
