Temperatursensor auslesen

An dieser Stelle wollen wir mal wieder etwas mit dem Raspberry Pi 2 und dessen GPIO's anfangen. Auf diesem Wege möchte ich euch zeigen, wie ihr den bereits erwähnten DHT22 Temperatursensor auslesen und dessen Output in eine Textdatei schreiben könnt.

 

Was ihr dazu benötigt, ist dieser Sensor DHT22. Dabei handelt es sich um einen Temperatur- und Feuchtigkeitssensor mit folgenden Daten:

 

- Betriebsspannung: 3,3 - 5 V DC

- Luftfeuchtigkeit Messbereich 0% ~100%RH
- Temperatur Messbereich -40 ~ +80C°
- Messung Wiederholrate max. 2Hz
- Temperatur Messfehler ±0,5C°
- Luftfeuchtigkeit Messfehler ±2%RH (Typisch) max ±5%RH
- 1-wire bus

 

Zudem ist der Sensor auch für den Außenbereich geeignet. So, dann fangen wir mal an. Um das Ganze nicht neu erfinden zu müssen, greifen wir ganz einfach auf bereits existierende Projekte zurück "wiringPi" und "lol_dht22". Wie der Sensor letztendlich an den Raspberry Pi 2 angeschlossen wird, werde ich euch später noch verraten. Kümmern wir uns zunächst um die Software.



sudo apt-get install git-core

sudo git clone git://git.drogon.net/wiringPi
cd wiringPi
sudo ./build
cd ..

Das wäre "wiringPi" und jetzt kommt "lol_dht22"


sudo git clone https://github.com/technion/lol_dht22
cd lol_dht22
sudo ./configure
sudo make

Mit diesen beiden Projekten sind wir nun in der Lage den Temperatursensor entsprechend auszulesen. Bevor wir allerdings damit ins Rennen gehen können, müssen wir den DHT22 noch an den Raspberry anschließen.

Raspberry Pi Temperatursensor DHT22 Smart Home

In beigefügter Skizze findet ihr die Pinbelegung des Sensors. Zu sehen ist eine Verbindung zwischen Pin 1 und Pin 2. Sollten die 10kOhm-Variante nicht funktionieren, probiert es einmal mit 4,7kOhm aus, damit sollte es auf jeden Fall klappen. Jetzt noch an den Raspberry Pi 2 und zwar an GPIO 4 anschließen und wir können Werte des DHT22 auslesen und zwar so:

 


cd lol_dht22
./loldht 7
Raspberry Pi wiringPi DHT22 reader
www.lolware.net
Data not good, skip
Humidity = 53.90 % Temperature = 29.30 *C

So sieht die Antwort des Sensors aus. In einem ausführbaren Skript sieht das Ganze dann so aus:


#!/bin/bash
cd ~
cd lol_dht22/

WERTE=$(sudo ./loldht 7 | grep "Temp")
Hum=$(echo $WERTE | awk '{ print $3}')
Temp=$(echo $WERTE | awk '{ print $7}')

datum=$(date +"%d-%m-%Y-%T")

cd ~
echo "$datum""#""$Hum""#""$Temp""#" >> bin/Temperaturen.txt
echo $datum
echo $Temp
echo $Hum

Ich habe das Skript auf den Namen "temp.sh" getauft, jedoch könnt ihr den Namen beliebig vergeben. Wollt ihr das Skript jetzt automatisch starten, dann ist noch eine Anpassung der "crontab" notwendig.

 

#!/bin/bash
crontab -e

* */2 * * * cd ~ && bash ./temp.sh

Damit wird das Skript "temp.sh" alle 2 Stunden ausgeführt und wie ihr weiter oben sehen könnt, in die "Temperaturen.txt" geschrieben.

 

Fertig!

Kommentar schreiben

Kommentare: 4
  • #1

    MartiMcFlight (Freitag, 16 Oktober 2015 15:24)

    Funktioniert das wirklich auch mit dem Raspberry Pi 2? Oder nur mit dem ersten Raspberry Pi?

    Bekomme es mit dem 2er nicht zum laufen, das Problem scheinen auch viele andere zu haben wenn man mal danach bei Google sucht.

    Der Fehler äußert sich wie folgt:

    ./loldht 7
    Raspberry Pi wiringPi DHT22 reader
    www.lolware.net
    Data not good, skip
    Data not good, skip
    Data not good, skip
    Data not good, skip
    Data not good, skip
    Data not good, skip
    Data not good, skip
    Data not good, skip
    Data not good, skip

    Der GPIO Anschluss 7 müsste korrekt sein.

  • #2

    piHome (Freitag, 16 Oktober 2015 18:26)

    Hallo MartiMcFlight,
    bei mir läuft das Ganze. Schau noch einmal ob du anstelle des 10kOhm einen 4,7kOhm Widerstand findest. Wichtig ist auch, GPIO4 ist Pin 7 auf der Stiftleiste des Raspberry Pi 2.

    https://ms-iot.github.io/content/images/PinMappings/RP2_Pinout.png

    Was hast du derzeit schon alles getan, was läuft sonst schon auf deinem Raspi?

    Gruß.

  • #3

    Zinkel (Sonntag, 10 Januar 2016 11:35)

    Hallo,

    kann man den Pin auch ändern? Würde gerne 2 DHTs auslesen, beim Pin 7 klappt es wunderbar, aber den zweiten bekomme ich nicht ausgelesen.

    danke

  • #4

    magig (Mittwoch, 22 Juni 2016 18:53)

    Du hast bei deinem crontab Eintrag einen kleinen Fehler gemacht. Im Moment würde er alle 2 Minuten bis zur 22. Minute einer Stunde messen. Den Eintrag kann man auch etwas einfacher gestalten:

    * */2 * * * cd ~ && bash ./temp.sh

    damit würde er den Befehl jetzt alle zwei Stunden ausführen. Hier ist es auch noch mal ausführlich beschrieben: https://wiki.ubuntuusers.de/Cron/