Luftfeuchtigkeits-Sensor DHT22/AM2302: Unterschied zwischen den Versionen
Geli (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Geli (Diskussion | Beiträge) |
||
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 28: | Zeile 28: | ||
$ sudo ./AdafruitDHT.py 22 17 | $ sudo ./AdafruitDHT.py 22 17 | ||
Temp=24.0* Humidity=41.0% | 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 | 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 | import Adafruit_DHT | ||
... | ... | ||
Zeile 34: | Zeile 34: | ||
pin = 17 | pin = 17 | ||
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin) | humidity, temperature = Adafruit_DHT.read_retry(sensor, pin) | ||
==Python Skript== | |||
Unser Python-Skript wertet nun zwei DS18B20 aus und zusätzlich den DHT22. Verbesserungsmöglichkeiten sind nicht unwahrscheinlich.<br /> | |||
#!/usr/bin/env python | |||
# -*- coding: utf-8 -*- | |||
# Auslesen zwei DS18B20 und DHT22 | |||
#-------------------------------- | |||
import os, sys, time | |||
import Adafruit_DHT | |||
def Temp(sensorfile): | |||
# 1-wire Slave Datei lesen | |||
file = open('/sys/bus/w1/devices/' + sensorfile + '/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.1f' % temperature | |||
return(wert) | |||
Zaehler = 0 | |||
Anzahl = 12 | |||
Pause = 5 | |||
while Zaehler <= Anzahl: | |||
# Zwei DS18B20 auswerten ----------------- | |||
print "Temperatur DS18B20-1: ", Temp('28-0516a328deff'),"C" | |||
print "Temperatur DS18B20-2: ", Temp('28-0316a3428cff'),"C" | |||
# DHT-22 auswerten ------------------ | |||
sensor = Adafruit_DHT.DHT22 | |||
# GPIO-Nummer | |||
pin = 17 | |||
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin) | |||
DHT22_Hum = '%6.1f' % humidity | |||
DHT22_Temp = '%6.1f' % temperature | |||
print "Temperatur DHT22: ", DHT22_Temp,"C" | |||
print "Feuchtigkeit DHT22: ", DHT22_Hum,"%" | |||
print "-------------------------------" | |||
time.sleep(Pause) | |||
Zaehler = Zaehler + 1 | |||
print "Sensorabfrage beendet" |
Aktuelle Version vom 1. Juli 2017, 19:54 Uhr
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 wertet nun zwei DS18B20 aus und zusätzlich den DHT22. Verbesserungsmöglichkeiten sind nicht unwahrscheinlich.
#!/usr/bin/env python # -*- coding: utf-8 -*- # Auslesen zwei DS18B20 und DHT22 #-------------------------------- import os, sys, time import Adafruit_DHT def Temp(sensorfile): # 1-wire Slave Datei lesen file = open('/sys/bus/w1/devices/' + sensorfile + '/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.1f' % temperature return(wert) Zaehler = 0 Anzahl = 12 Pause = 5 while Zaehler <= Anzahl: # Zwei DS18B20 auswerten ----------------- print "Temperatur DS18B20-1: ", Temp('28-0516a328deff'),"C" print "Temperatur DS18B20-2: ", Temp('28-0316a3428cff'),"C" # DHT-22 auswerten ------------------ sensor = Adafruit_DHT.DHT22 # GPIO-Nummer pin = 17 humidity, temperature = Adafruit_DHT.read_retry(sensor, pin) DHT22_Hum = '%6.1f' % humidity DHT22_Temp = '%6.1f' % temperature print "Temperatur DHT22: ", DHT22_Temp,"C" print "Feuchtigkeit DHT22: ", DHT22_Hum,"%" print "-------------------------------" time.sleep(Pause) Zaehler = Zaehler + 1 print "Sensorabfrage beendet"