Luftfeuchtigkeits-Sensor DHT22/AM2302
https://tutorials-raspberrypi.de/raspberry-pi-luftfeuchtigkeit-temperatur-messen-dht11-dht22/
Diese Beschreibung bezieht sich auf:
Raspberry Pi Model B Revision 2.0 (512MB) - Raspberry Pi (c)2011.12 Raspbian Jessie Lite - Release date 2017-04-10, Kernel version 4.4
Pinbelegung und Schaltung
Der Messbereich des DHT22 umfasst 0 bis 100% relative Luftfeuchtigkeit, sowie einen Temperaturbereich von -40 bis 80 C bei einer Genauigkeit von +-0,5. Die Pinbelegung und erforderliche Beschaltung erkennt man an folgender Abbildung:
Da der GPIO4 bereits durch den DS18B20 belegt ist, wird für den DHT22 der GPIO17 verwendet.
Die Schaltung wird wieder testweise auf dem Breadboard aufgebaut. Die Abbildung zeigt die Verkabelung von DS18B20 und DHT22.
Installation der Python Bibliothek von Adafruit
Zuerst müssen einige Pakete installiert werden:
sudo apt-get update sudo apt-get install build-essential python-dev python-openssl git
Nun kann die Bibliotheken für die Sensoren geladen werden. Hier wird eine vorgefertigte Bibliothek von Adafruit verwendet, die verschiedene Sensoren unterstützt:
git clone https://github.com/adafruit/Adafruit_Python_DHT.git && cd Adafruit_Python_DHT sudo python setup.py install
Wenn dieser Schritt funktioniert hat, können wir testweise Temperatur und Luftfeuchtigkeit auslesen. Dazu finden wir Demoskripte:
cd examples sudo ./AdafruitDHT.py 22 17
Der erste Parameter (22) gibt an, welcher Sensor benutzt wird (DHT22) und der zweite den Anschluss-GPIO (die GPIO-Nummer, also 17). Es sollte folgende Ausgabe erscheinen.
$ sudo ./AdafruitDHT.py 22 17 Temp=24.0* Humidity=41.0%
Die Sensoren sind nur alle zwei Sekunden bereit. Das muss man bei der Auswertung entsprechend berücksichtigen. Für die Einbindung der Bibliothek in Python-Skripte sind nur folgende Angaben nötig:
import Adafruit_DHT ... sensor = Adafruit_DHT.DHT22 pin = 17 humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
Python Skript
Unser Python-Skript, das den DS18B20 auswertet, wird erweitert und sieht nun wie folgt aus. Verbesserungsmöglichkeiten sind nicht ausgeschlossen.
#!/usr/bin/env python # -*- coding: utf-8 -*- # Auslesen DS18B20 und DHT22 #--------------------------- import os, sys, time import Adafruit_DHT def Temp(): # 1-wire Slave Datei lesen file = open('/sys/bus/w1/devices/28-0516a328deff/w1_slave') filecontent = file.read() file.close() # Temperaturwerte auslesen und konvertieren stringvalue = filecontent.split("\n")[1].split(" ")[9] temperature = float(stringvalue[2:]) / 1000 # Temperatur ausgeben wert = '%6.2f' % temperature return(wert) Zaehler = 0 Anzahl = 12 Pause = 5 while Zaehler <= Anzahl: messdaten = Temp() print "Temperatur: ", messdaten # DHT-22 auswerten ------------ sensor = Adafruit_DHT.DHT22 # GPIO-Nummer pin = 17 humidity, temperature = Adafruit_DHT.read_retry(sensor, pin) DHT22_Hum = '%6.2f' % humidity DHT22_Temp = '%6.2f' % temperature print "Feuchtigkeit: ", DHT22_Hum,"%" print "Temperatur DHT22: ", DHT22_Temp print "--------------------------" time.sleep(Pause) Zaehler = Zaehler + 1 print "Sensorabfrage beendet"