Sehr oft wird der relativ günstige Sensor DHT22 (oder auch AM2302) eingesetzt, um am Raspberry Pi Temperaturen und die Luftfeuchtigkeit auszulesen. Wie dieser angeschlossen wird und welche Software dazu verwendet werden kann, möchte ich in diesem Beitrag beschreiben.
Material
Für unser Projekt benötigen wir folgendes:
heruntergefahren und von der Spannungsversorgung getrennt haben,
können wir den DHT22-Sensor nach folgenden Schema anschließen:
Erläuterung:
Pin eins des Sensors wird mit einem freien 3,3V-PIN des Raspberrys verbunden, Pin zwei mit einem
GPIO-PIN (in unserem Beispiel GPIO 17, was dem PIN 11 entspricht). Der dritte Pin bleibt
ungenutzt und den vierten verbinden wir mit einem freien Ground-PIN (beispielsweise PIN 9 des Raspberrys).
Zwischen den Pins eins und zwei des Sensors verlöten wir zudem den 10 kΩ Widerstand wie im Bild gezeigt.
Schritt 2: wiringPi
Wir benötigen für diesen Artikel die winringPi-Bibliothek. Die Installation und Verwendung wird in diesem Beitrag erläutert.
Achtung! Die wiringPi-Library nutzt eine andere Nummerierung der GPIO-Ports.
Daher wird in unserem Beispiel aus dem Raspberry-GPIO-Port 17 der wiringPi-Port 0.
Eine Übersicht der Pin-Belegungen der verschiedenen Raspberry-Versionen zeigt dieser Beitrag.
Schritt 3: lol_dht22
Nun installieren wir auf der Himbeere ein Script, welches den Sensor abfragt und die
übermittelten Werte ausgibt. Neben vielen anderen Verfügbaren nutzen wir in diesem
Projekt “lol_dht22“. Zur Installation bedarf es weniger Schritte:
git clone https://github.com/technion/lol_dht22
cd lol_dht22
./configure
make
Das Script kann nun mittels (0=wiringPi-Port)
./loldht 0
gestartet werden und gibt nach einer kurzen Zeit die Datenwerte des DHT22 aus:
Raspberry Pi wiringPi DHT22 reader
www.lolware.net
Data not good, skip
Humidity = 80.20 % Temperature = 17.90 *C
Sollte gelegentlich die Zeile “Data not good, skip” erscheinen, ist das nicht weiter tragisch
und kann ignoriert werden. Zu beachten ist lediglich, dass der Sensor nicht öfter als alle
2 Sekunden ausgelesen werden kann.
Schritt 4: openHAB
Eine Einbindung des Sensors in das Hausautomatisierungssystem openHAB
habe ich in diesem Beitrag beschrieben.
[themify_box style=”rounded announcement shadow” ]Update
Aufgrund dessen, dass es hin und wieder zu “Ausreißern” bei den Messergebnissen kommt,
habe ich ein kleines Script gebastelt, um solche fehlerhaften Messergebnisse auszusortieren.[/themify_box]
#!/bin/bash
#Scriptname: /scripts/dht22.sh
#Einstellungen
MINTEMP=0
MAXTEMP=50
MINHUM=0
MAXHUM=100
###########################################
if [ ! -d /tmp/dht22vars/ ]; then
mkdir /tmp/dht22vars/
fi
GPIO=$2
INPUT=$(/usr/bin/ssh root@192.168.1.$1 "/scripts/lol_dht22/loldht $GPIO |grep "Temperature"")
HUM=$(echo $INPUT|cut -d " " -f3)
TEMP=$(echo $INPUT|cut -d " " -f7)
if [ "$3" = "HUM" ]; then
if [ $(echo "if (${HUM} > ${MAXHUM}) 1 else 0" | bc) -eq 1 -o $(echo "if (${HUM} < ${MINHUM}) 1 else 0" | bc) -eq 1 ]; then
if [ -f /tmp/dht22vars/dht_$1_gpio$2_hum.txt ]; then
cat /tmp/dht22vars/dht_$1_gpio$2_hum.txt
fi
else
echo $HUM
echo $HUM > /tmp/dht22vars/dht_$1_gpio$2_hum.txt
fi
fi
if [ "$3" = "TEMP" ]; then
if [ $(echo "if (${TEMP} > ${MAXTEMP}) 1 else 0" | bc) -eq 1 -o $(echo "if (${TEMP} < ${MINTEMP}) 1 else 0" | bc) -eq 1 ]; then
if [ -f /tmp/dht22vars/dht_$1_gpio$2_temp.txt ]; then
cat /tmp/dht22vars/dht_$1_gpio$2_temp.txt
fi
else
echo $TEMP
echo $TEMP > /tmp/dht22vars/dht_$1_gpio$2_temp.txt
fi
fi
Dieses Script liefert nur dann die Messwerte aus, wenn sie “MIN” nicht unter- und “MAX” nicht überschreiten. Sonst wird der vorherige Wert ausgegeben, der in einer temporären Datei bei der letzten erfolgreichen Messung hinterlegt wurde.
Das Script ist darauf ausgelegt, Messwerte remote von anderen Himbeeren auszulesen. Dazu ist ein passwortloser SSH-Login notwendig, wie es in diesem Beitrag beschrieben wurde. Aufgerufen wird das Script beispielsweise wie folgt:
/scripts/dht22.sh 123 4 TEMP
Dabei steht die Zahl “123” für das letzte Oktett der IP-Adresse des Raspberry, die Ziffer “4” für den GPIO-Port, an dem der DHT22-Sensor am entfernten Raspberry angeschlossen ist und der Begriff “TEMP” dafür, dass man in diesem Beispiel die Temperatur abrufen möchte. Alternativ wäre hier “HUM” anzugeben.
Temperatursensor DHT22 am Raspberry Pi
Material
Für unser Projekt benötigen wir folgendes:
[themify_box style=”rounded” ]In diesem Artikel verwendetes Zubehör
Schritt 1: Sensor anschließen
Nachdem wir den Raspberry Pi ordnungsgemäß mit
heruntergefahren und von der Spannungsversorgung getrennt haben,
können wir den DHT22-Sensor nach folgenden Schema anschließen:
Erläuterung:
Pin eins des Sensors wird mit einem freien 3,3V-PIN des Raspberrys verbunden, Pin zwei mit einem
GPIO-PIN (in unserem Beispiel GPIO 17, was dem PIN 11 entspricht). Der dritte Pin bleibt
ungenutzt und den vierten verbinden wir mit einem freien Ground-PIN (beispielsweise PIN 9 des Raspberrys).
Zwischen den Pins eins und zwei des Sensors verlöten wir zudem den 10 kΩ Widerstand wie im Bild gezeigt.
Schritt 2: wiringPi
Wir benötigen für diesen Artikel die winringPi-Bibliothek. Die Installation und Verwendung wird in diesem Beitrag erläutert.
Achtung! Die wiringPi-Library nutzt eine andere Nummerierung der GPIO-Ports.
Daher wird in unserem Beispiel aus dem Raspberry-GPIO-Port 17 der wiringPi-Port 0.
Eine Übersicht der Pin-Belegungen der verschiedenen Raspberry-Versionen zeigt dieser Beitrag.
Schritt 3: lol_dht22
Nun installieren wir auf der Himbeere ein Script, welches den Sensor abfragt und die
übermittelten Werte ausgibt. Neben vielen anderen Verfügbaren nutzen wir in diesem
Projekt “lol_dht22“. Zur Installation bedarf es weniger Schritte:
Das Script kann nun mittels (0=wiringPi-Port)
gestartet werden und gibt nach einer kurzen Zeit die Datenwerte des DHT22 aus:
Sollte gelegentlich die Zeile “Data not good, skip” erscheinen, ist das nicht weiter tragisch
und kann ignoriert werden. Zu beachten ist lediglich, dass der Sensor nicht öfter als alle
2 Sekunden ausgelesen werden kann.
Schritt 4: openHAB
Eine Einbindung des Sensors in das Hausautomatisierungssystem openHAB
habe ich in diesem Beitrag beschrieben.
[themify_box style=”rounded announcement shadow” ]Update
Aufgrund dessen, dass es hin und wieder zu “Ausreißern” bei den Messergebnissen kommt,
habe ich ein kleines Script gebastelt, um solche fehlerhaften Messergebnisse auszusortieren.[/themify_box]
Dieses Script liefert nur dann die Messwerte aus, wenn sie “MIN” nicht unter- und “MAX” nicht überschreiten. Sonst wird der vorherige Wert ausgegeben, der in einer temporären Datei bei der letzten erfolgreichen Messung hinterlegt wurde.
Das Script ist darauf ausgelegt, Messwerte remote von anderen Himbeeren auszulesen. Dazu ist ein passwortloser SSH-Login notwendig, wie es in diesem Beitrag beschrieben wurde. Aufgerufen wird das Script beispielsweise wie folgt:
Dabei steht die Zahl “123” für das letzte Oktett der IP-Adresse des Raspberry, die Ziffer “4” für den GPIO-Port, an dem der DHT22-Sensor am entfernten Raspberry angeschlossen ist und der Begriff “TEMP” dafür, dass man in diesem Beispiel die Temperatur abrufen möchte. Alternativ wäre hier “HUM” anzugeben.
Verwandte Artikel: