Luftfeuchtigkeit und Temperatur mit dem Raspberry Pi messen

Ein kleine Anleitung zum einfachen und kostengünstigen Messen von Luftfeuchtigkeit und Temperatur mit dem Raspberry Pi.

Was wird benötigt:

1. Verkabelung

Die Pin-Belegung des DHT22/AM2302 ist dem Product Manual zu entnehmen. Das heißt, wenn man von vorne auf den Sensor schaut, dann sind die Pins von Links nach Rechts von 1 bis 4 durchnummeriert.
Pin 1 wird an die 3,3V Versorgungsspannung angeschlossen. Pin 2 ist der Datenpin und muss zum Einen an einen freien GPIO Pin am Raspberry Pi angeschlossen werden, zum Anderen muss der Pin über einen Widerstand mit 4,7k bis 10k Ohm auch an die 3,3V Leitung angeschlossen werden. Dies sogt dafür, dass der Pegel auf „High“ gehalten wird, wenn der Sensor ihn nicht gegen Masse zieht um ein „Low“-Signal zu signalisieren. Am Raspberry Pi kann zum Beispiel GPIO 4 (wiringPi Pin 7) benutzt werden. Pin 3 bleibt frei und Pin 4 wird an die Masse, also GND angeschlossen. Das ganze sieht dann in etwas so aus:

Anschluss des DHT22 an den Raspberry Pi

Anschluss des DHT22 an den Raspberry Pi

2. Software Installation

Zuerst brauchen wir, wenn noch nicht installiert, die WiringPi-Libraray welche zur einfachen Ansteuerung der GPIO-Pins benutzt wird. Diese ist schnell installiert. Zuerst muss git installiert werden:

sudo apt-get install git-core

Dann kann WiringPi installiert werden:

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

Nun kann die Software zum Auslesen des DHT22/AM2302 installiert werden. Ich bin dabei bei der Suche nach einer guten Software auf eine Version von technion gestoßen, die bei mir sehr gut läuft.

Nachtrag vom 14. April 2014: Die Anleitung ist nun auf die neuere Version angepasst. Hier muss der Pin nicht mehr im Quellcode angepasst werden.

Die Installation ist denkbar einfach:

git clone https://github.com/technion/lol_dht22
cd lol_dht22

Danach kann die Software wie folgt gebaut werden:

./configure
make

Sollte alles geklappt haben, dann kann man die Temperatur folgendermaßen auslesen:

sudo ./loldht 7
Raspberry Pi wiringPi DHT22 reader
www.lolware.net
Data not good, skip
Humidity = 57.60 % Temperature = 20.40 *C

Wobei die „7“ hinter dem Befehl den wiringPi Pin angibt. Falls man den Sensor an einen anderen Pin als GPIO 4 (wiringPi Pin 7) angeschlossen hat, muss man die Zahl hier entsprechend anpassen. Die wiringPi Pin-Zuordnung ist auf der Wiring Pi Pin Seite zu finden.

Wie in der Ausgabe zu sehen ist, kann es vorkommen, dass ab und zu „Data not good, skip“ erscheint. Dies passiert immer dann, wenn die Daten nicht richtig empfangen worden konnten, weil es einen Fehler beim Auslesen gab. Der Sensor kann auch höchstens alle 2 Sekunden abgefragt werden.

Der nächste Schritt ist natürlich die Daten zu loggen und auszuwerten. Das kommt hoffentlich bald.

 

77 Antworten

  1. Gibt es eine Möglichket, die messwerte mit auf die Website der Funksteckdosen zu packen?

  2. Hallo, danke für das Tutorial.
    Ich habe vor mir eine Temperatur-Überwachung für jeden Raum zu machen.
    Gibt es was die länge der leitungen für einen sensor angeht ein limit?

    • Hi Sascha,

      Hört sich cool an. Ein Limit gibt es sicherlich. Die Frage ist nur wo es liegt :). Es gibt hier zwei Dinge zu beachten:

      1. Um so länger das Kabel ist, um so größer ist der Widerstand des Kabels. Hier kann man aber dagegen wirken in dem man ein Kabel mit größerem Querschnitt wählt.

      2. Um so länger das Kabel ist, desto größer ist die Signallaufzeit. Das wird wohl früher zu einem Problem, da das auslesen auch sehr Zeitkritisch ist.

      Am Besten ist es wohl, es einfach mal auszuprobieren. Falls du den Versuch gewagt hat, sag doch mal Bescheid, das würde mich auch interessieren.

      Viele Grüße
      Oliver

  3. Danke, werde ich machen 😉
    eine frage noch, ist es möglich mit diesem loldht mehr als nur einen Sensor abzufragen?
    wenn ja wie müsste das dann in der software gemacht werden?
    und kann ich am RPI jeden GPIO port dafür verwenden (2,3,4,7,8,9,10,11,14,15,17,18,22,23,24,25,27), oder nur die „normalen“ (4,22,23,24,25,27) ?

    • Hallo Sascha,

      Dazu musst du den Code ein bisschen umschreiben. Wenn Du kein c kannst, dann wird es schwierig. Das einfachste wäre, einfach die Pin-Nummer nicht fest einzucodieren, sondern diese per Kommandozeilen-Parameter „übergebbar“ zu machen. So das man für den Wert des Sensors am Port 7 beispielsweise einfach:

      1
      sudo ./loldht 7

      schreiben kann. Falls Du dabei Hilfe brauchst, sag mir bescheid, dann bau ich Dir schnell die Version.

      Du kannst alle Pins nehmen (außer 0V, 5V, 3,3V versteht sich). Also alle wo hier eine Nummer bei „wiringPi Pin“ steht.

      Viele Grüße
      Oliver

  4. Hallo, das mit dem Parameter übergeben klingt klasse. hab jedoch keine ahnung wie man dies macht, wäre sehr dankbar wenn du mir dabei helfen könntest.
    testen kann ich das ganze leider erst in ~3wochen, da ich aus china 8 sensoren bestellt habe und die solange zum liefern benötigen.

    • Hallo Sascha,

      die Version um mehrere Pins abzufragen ist fertig:
      https://github.com/sweetpi/rpi_dht22

      Installiert wird Sie wie oben beschrieben, nur das url für git clone die folgende ist:

      1
      https://github.com/sweetpi/rpi_dht22.git

      Die Pins lassen sich dann so abfragen:

      1
      2
      3
      4
      sudo ./rpi_dht22 7 8 9
      Pin = 7, Humidity = 55.4 %, Temperature = 20.6 °C
      Pin = 8, Humidity = 40.1 %, Temperature = 19.4 °C
      Pin = 9, Humidity = 50.4 %, Temperature = 22.1 °C

      Viele Grüße
      Oliver

      • Hallo Oliver,

        habe es nach deiner Anleitung auch nicht geschafft, bei mir gings nur mit:

        sudo ./rpi_dht 7 8 9

        also ohne die 22

        MFG Stefan

      • Hallo Oliver,
        ich befasse mich erst kurze Zeit mit dem Raspberry Pi.
        Ich habe den dht22 gem. der Anleitung installiert.
        Das hat auch auf Anhieb funktioniert.
        Was mir aber noch fehlt sind folgende Punkte.
        – Den Raspberry fest einbinden dh. das ich nicht bei jedem Start neu laden muss.
        – Wie muss ich mehrere dht22 verkabeln
        – Wo kann ich die Wiederholrate einstellen z.B. 1 Minute

        Viele Grüße Peter
        19.04.2015

      • Hallo Oliver,
        ich versuche gerade die Erweiterung von Dir zu installieren.Wenn ich
        https://github.com/sweetpi/rpi_dht22.git eingebe bekomme ich folgende Fehlermeldung:
        Username for ‚https://github.com‘:
        Was muss ich da eintragen?

        Gruß Peter
        Ohne Erweiterung funktioniert das Programm Einwandfrei.

  5. ich danke recht herzlich, sobald meine sensoren da sind und ich diese installiert habe, schreibe ich hier wieder, werde dann auch berichten, ob der sensor mit einer ~10m langen leitung noch funktioniert :)

  6. Hallo Oliver,
    zuallererst: Bin ein ziemlicher Neuling in Sachen Raspberry und Linux.

    Ich versuche gerade nach Deiner Anleitung den DHT22 zum Laufen zu bewegen.
    Allerdings bekomme ich nach dem Make immer nur
    „*** Keine Targets angegeben und keine »make«-Steuerdatei gefunden. “
    Was mache ich falsch?

    Gruß
    Stefan

    • Hallo Stefan,

      ich glaube in meiner Anleitung fehlt der Aufruf von

      1
      ./configure

      vor „make“. Ich habe die Anleitung angepasst. Versuche es mal so.

      Viele Grüße
      Oliver

  7. Hallo, funktioniert die Software auch um einen dht11 auszulesen?

    • Hi, soweit ich weiß, ja. Kann aber keine Garantie dafür geben, da ich selbst keinen dht11 besitze. Ich denke da hilft einfach mal ausprobieren 😉

  8. Coole Anleitung, vielen Dank!
    Kann ich die Daten auch mittels http get request an einen anderen Server übergeben?

    Wie ich es dort speichere ist für mich kein Problem, ich nutze derzeit arduinos und würde gern auf die Himbeere umsteigen, weil die Hardware günstiger ist, und auch leicht mit Wlan benutzt werden kann.
    Ich nutze dies bereits auf http://www.sensobox.de

    Ps. Wegen der Kabellänge, ich hab vieles getestet, auch klingeldraht mit über 10 m Länge waren dabei kein Problem. Allerdings habe ich meine Sensoren so programmiert, dass alle 30 Sekunden ein Messwert je Sensor kommt.

  9. Hallo Oliver,

    Danke für die Anleitung! Ich habe folgendes Problem: Die Version für einen Datenpin läuft bei mir, allerdings habe ich bei der Version für mehrere funktioniert nicht. Der Befehl „sudo ./rpi_dht22 7 8 9“ wird nicht gefunden. Wäre lieb, wenn du mir helfen könntest.

    LG Heiner

  10. Hallo Oliver,

    gibt es eine Möglichkeit die Werte des Sensors auch ohne dieses programm ./loldht auszulesen also z.B. via Python? Bräuchte dort die werte zum weiterverarbeiten.

    Sorry fals ich jetzt was falsches gefragt habe, arbeite mich gerade in die ganze Materie ein.

  11. […] sweet pi – sweet home – Luftfeuchtigkeit und Temperatur mit dem Raspberry Pi messen […]

  12. „Einen Widerstand zwischen 4,7k und 10k Ohm“
    Ernsthaft, was für Werte kommen bei 4,7 bzw 10k Ohm am Raspberry an?
    Das sind doch vollkommen unterschiedliche Werte, wie kann dann der Sensor die richtigen Werte übergeben?
    Gruß Eike

    • Hi Eike,

      der DHT22 ist ein digitaler Sensor: Das heißt der Raspberry Pi misst keinen Spannungswert sondern frägt den Pin in einem bestimmten Muster ab und stellt fest ob er HIGH oder LOW ist (Einfach gesagt: Ob eine Spannung anliegt oder nicht.). Der Sensor verbindet den PIN jedoch für LOW gegen 0V und für HIGH ist der Ausgang hochohmig.

      Der Widerstand ist dazu da den Pin mit +3.3V zu verbinden, so das beim hochohmigen Zustand des Ausgangspins 3.3V am Raspberry Pi anliegen (Pull-up Widerstand). Dazu brauch man eben einen Widerstand der kleiner ist, als der Sensor im hochohmigen Zustand. Zu klein darf der Widerstand aber auch nicht sein, sonst fließt zu viel Strom, wenn der Sensor den Pin auf 0V liegt. (Bei keinem Widerstand hätten man ja dann einen Kurzschluss.)

      Viele Grüße
      Oliver

      • Wow – das ging ja mal schnell, vielen Dank für die Antwort!!
        Gruß Eike

      • Hi,

        ich hab‘ im Datenblatt nachgesehen, da steht nirgends etwas vom zu erwartenden Widerstand des Sensors.

        Wo kommt die Information her, damit du dir ausrechnen kannst wie hoch der Pull-Up sein muss?

  13. Moin,

    danke erstmal für die super Anleitung !
    Ich habe jedoch ein kleines Problem.
    Ich möchte neben dem Abfragen der Sensordaten auch den Livestream meiner Webcam, die per USB am Raspberry hängt, realisieren. Aber sobald ich den Service für die Webcam (motion) starte, lassen sich keine Daten mehr abfragen: „Data not good, skip“. Sobald ich motion mit „sudo service motion stop“ wieder beende, lassen sich die Daten wieder auslesen… wie kann das sein ? Hast du vielleicht eine Idee ?

  14. Ich habe gerade selbst einen gefunden, wo die konstante CPU-Auslastung des motion daemons von 30-50 % dafür sorgt, dass die Daten vom DHT22 nicht rechtzeitig Abgefragt werden, sodass der Fehler erscheint. Wie kann ich die Zeit, die das Programm zum Abfragen benötigt, ändern ? Im „dht22.c“ habe ich die Variable „MAXTIMINGS“ gefunden… ist diese dafür verantwortlich ?

  15. Danke für den Hinweis.
    Leider zeigt er mit immer noch nur „Data not good, skip“ an.
    Wie kann ich die Zeit, die das Programm zum Abfragen benötigt, ändern ?

    • Die Timings sind hauptächlich, die delay, delayMicroseconds und der Wert der counter Variable.

      Die MAXTIMINGS darfst du soweit ich das sehe nicht verändern. Der Name ist ein bisschen irreführend. MAXTIMINGS scheint die Anzahl der Pin-Änderungen zu sein, die Abgefragt werden.

      Ansonsten kannst es noch mit einem Aufruf der wiringPi-Funktion:

      1
      piHiPri (int priority)

      mit hächster Priorität versuchen.

  16. Danke für die Hinweise. :)
    Ich habe etliche Werte für delayMicroseconds und delay-Werte nach oben verändert, gefolgt von „./configure && make“. Leider ohne Erfolg …
    piHiPri habe ich irgendwie nicht zum Laufen gekriegt… er hat mir beim „./configure“ immer einen Syntax Fehler ausgeworfen. Wo muss ich den Code denn einbauen ?

  17. Servus,

    Habe diese Anleitung benutzt um den dht22 an meinen Pi anzuschließen und logge (bzw. loggte) die Daten jede Minute. Anfangs war immer mal ein Data not good dabei, mittlerweile kommt nichts mehr außer Data not good an. Ich habe ein 2m langes Kabel dazwischen, was anfangs aber gut funktioniert hat. ich hab den dht, Kabel und Widerstand zusammengelötet. Ich hab schonmal gelesen, dass der DHT22 sehr empfindlich darauf reagiert. Evtl. hat’s ihn so also zerschossen. Deshalb:
    ACHTUNG beim Löten.
    Hat sonst jemand schonmal das gleiche versucht und auch minütlich geloggt ohne das Teil zu löten? Gab’s da auch irgendwelche Probleme?
    Werd mir das Teil wohl noch mal bestellen und es dann ohne löten versuchen.

    • Hi Marius,

      Danke für den Hinweis. Ich habe den dht22 nur gesteckt, daher leider keine weiteren Erfahrungen dazu.

      Viele Grüße
      Oliver

    • Ich habe meinen DHT22 gelötet, sogar ohne wiederstand….und er läuft perfekt.

    • Könntest du mir ggf das entsprechende Skript zur Verfügung stellen?
      Ich habe genau das selbe vor, meine bisherigen versuche sind aber leider mit nichts als errors belohnt worde ;(

  18. Hallo!

    Erstmal danke für die tolle Anleitung. Weiter oben hat schon mal jemand danach gefragt, wie man den Sensor über ein Python-Skript abfragen kann. Ich habe das auch vor.
    Der Link auf das Adafruit Tutorial hilft mir da nur bedingt weiter, da das fertige Skript dort die Daten noch mit GoogleDocs verknüpft. Ich möchte eigentlich nur den Befehl ./loldht irgendwie in Python ausführen. Einen Versuch habe ich bereits mit subprocess.check_output([‚./loldht‘]) gestartet. Das funktioniert aber nicht, da ich dann in der Python shell eine Fehlermeldung bekomme. Weiß jemand wie ich die Temperaturabfrage einfach mit einem Python-Skript durchführen kann?

  19. Hallo
    Danke für die Anleitungen.Oben ist beschrieben wie ich die PIN ändere (nano dht22.c) aber da drin ist kein (#define DHTPIN 7).Die habe ich geändert von 7 auf 4 ( PIN 23 ) ( static int DHTPIN = 4; ) Ich habe noch zusätzlich 1-wire Temperatur Sensoren angeschlossen die auch funktionieren aber ich bekomme die dht22 nicht auf einen anderen PIN.Immer wen ich die ( sudo ./loldht ) starte sagt er mir using 7 (GPIO 4) .
    Danke nochmals für die mühe

    • Hi Erkan,

      ja der soruce wurde mittlerweile geändert. Deine Änderung war korrekt und er müsste bei Dir den Pin 4 anstelle von 7 benutzen. Die Meldung ist schlichtweg falsch, die sagt einfach immer 7 wenn kein Pin per Komandozeilenparameter übergeben wird.

      Du kannst in der neuen Version auch einfach

      1
      sudo ./loldht 4

      für PIN 4 benutzten. Hier noch als Refrenz ein Link zu den Änderungen Die Änderungen

      Viele Grüße
      Oliver

  20. Hallo,

    bei mir werden völlig flasche Werte angezeigt. Hat das schon mal jemand gehabt?
    Die Temperatur und die Luftfeuchtigkeit werden viel zu hoch ausgegeben:

    sudo ./loldht 4
    Raspberry Pi wiringPi DHT22 reader
    http://www.lolware.net
    Humidity = 1331.20 % Temperature = 537.60 *C

    Gruß Thomas

    • Hi Thomas,

      Du hast wahrscheinlich einen dht11 sensor. Schau dir mal den quick fix an (ist eigentlich für pilight, sollte aber auch mit loldht funktionieren).

      Viele Grüße
      Oliver

      • Habe auch einen DHT11 benutzt und es mit der neuen Version (rpi_dht mit freier Pin -Wahl) hinbekommen.
        „Quick Fix“ hat geholfen, allerdings kamen Werte raus die um den Faktor 10 zu klein waren zB Feuchte = 3,8 und Temp = 2,3.
        Habe dann noch in dht22.c jeweils das “ /= 10″ auskommentiert.
        Jetzt klappt es sehr gut, braucht halt oft mehrere Anläufe bis die Daten da sind aber das scheint ja leider normal zu sein.

        Danke dir für die gute Erklärung, dies sind meine ersten Schritte mit dem Raspi.

  21. Hallo,
    wie viele sensoren könnte man damit abfragen?

    gruß ben

    • Hi ben,

      so viele, wie du anschließen kannst. Ich zitiere mich mal selbst:

      die Version um mehrere Pins abzufragen ist fertig:
      https://github.com/sweetpi/rpi_dht22

      Installiert wird Sie wie oben beschrieben, nur das url für git clone die folgende ist:

      1
      https://github.com/sweetpi/rpi_dht22.git

      Die Pins lassen sich dann so abfragen:

      1
      2
      3
      4
      sudo ./rpi_dht22 7 8 9
      Pin = 7, Humidity = 55.4 %, Temperature = 20.6 °C
      Pin = 8, Humidity = 40.1 %, Temperature = 19.4 °C
      Pin = 9, Humidity = 50.4 %, Temperature = 22.1 °C

      Viele Grüße
      Oliver

      • Hallo Oliver,
        ich bin noch ziemlicher anfänger und kann bisher nur grundlagen der c programmierung
        und mit dem pi soll das mein erstes projekt werden. Ganz dumm gefragt, wieviele kann ich denn anschließen? 😉
        ich würde mir gern eine steuerung für mein garagentor bauen die die lüftungsfunktion je nach luftfeuchtigkeit/Temp innen und außen ansteuert.

        gruß Ben

        • Hi Ben,

          der P1 Header hat 17 GPIO Pins, die kannst du alle benutzten. Das heißt, wenn du nur DHT22 Sensoren anschließen wolltest, dann gehen 17 Stück. Dann gibt es noch die Anderen (unbestückten) Pin Header, die du im Notfall auch noch benutzten könntest (siehe wiki). Wenn du in weißt, wie man in c eine Funktion aufruft, dann sollte zumindest die Einbindung des Sensors kein Problem für Dich sein.

          Hört sich jedenfalls nach einem netten Projekt an.

          Viele Grüße
          Oliver

          • Hallo Oliver,

            danke für die schnelle Antwort! 17 sollten auf jedenfall reichen, ein paar brauch ich ja noch für die Ansteuerung des Tors und die Positionsabfrage.
            Aber da muss ich mich wohl noch ne ganze weile mit beschäfigen bis ich das hin bekomme.

            Gruß Ben

  22. Hallo Oliver

    Danke, für die Anleitung, hat alles bestens geklappt.
    Jetzt habe ich den Raspi im Keller verbaut. Die Kabellänge zu den Sensoren sind ca. 10m und 15m. Leider bekomme ich jetzt keine Werte mehr.
    Ich habe was gelesen, dass man die I2C Bus Frequenz verringern sollte.
    Wie kann ich das machen?
    Danke für deine Hilfe.

    Gruss Patrick

    • Hi Patrick,

      die Frequenz kannst du soweit ich weiß bei dem Sensor nicht verändern. Das einzige was mir einfällt ist: Kürzere Kabel 😀 oder Kabel mit größeren Durchmesser verwenden, damit der Widerstand kleiner ist. Du kannst natürlich auch mit den delayes im C-Code experimentieren, aber das ist schwierig, sorry.

      Viele Grüße
      Oliver

  23. Moin, sehr Gute Anleitung. Da werde ich mich demnächst ran setzen.

    Ich hab in meinem Haus überall Cat7 Kabel liegen und ich würde gern in verschiedenen Räumen messen. Kann man dies über die Cat7 Leitungen machen oder ist der Leitungswiderstand zu Hoch für die Sensoren?

    MfG
    Kaj

    • Hallo Kaj,

      unwissend ob du’s schon gebaut hast:

      Ich habe meinen DHT22 mal über eine 100m KNX-Leitung (2x2x0,8) gepollt und das Verhalten hat sich nicht geändert (gegenüber lokaler Installation mit Klingeldraht, 1m).

      Es kann von Vorteil sein, den Widerstand am DHT und nicht am PI einzubauen.

      Heute kam CAT6 (ca. 20m) ins Spiel. Keine Probleme.

      MfG

      MartinK

  24. Moin,

    ich hätte mal eine Frage,

    ist es möglich mehrere DHT22 über 433 MHz Funk- Sende und Empfänger Modul einzubinden und wie wäre hier die vergehensweise.?
    Ich habe mir mal 2 DHT22 und die Funkteile bestellt. Ich möchte eigentlich den Kabelsalat irgendwie vermeiden.

    MfG
    Marco

  25. Mein neuer Raspberry Pi 2 ist heute gekommen. An dem alten Rasberry funktionierte der DHT22 schon sehr lange einwandfrei. Ich habe am alten Rasberry einfach das Raspian geupdated und konnte dann die SD Karte in den neuen Pi stecken. Pilight läuft auch ganz normal (zumindest das Webfrontend). Was leider nicht funktioniert ist der DHT22. Ich erhalte keine Daten. Angezeigt wird immer die Meldung „Data not good, skip“. Angeschlossen habe ich ihn am gleichen GPIO 7. Muss ich irgendwas updaten oder neuinstallieren?

    • Genau das Problem habe ich auch, Lösung bisher noch keine gefunden :-(

      • genau das Problem habe ich auch. Bei mir funktioniert nur der Pin 7 am Raspberry Pi2 Model B V1.1. Alle anderen pins bringen nur „Data not good, skip“. Kennt jemand schon eine Lösung.

        • Habe jetzt die Lösung. Es wird nach den WiringPi Pin gezählt und NICHT nach den PINs auf dem Board. Dh. sudo ./rpi_dht 0 7 bedeutet PIN 11 und PIN 7 auf dem Bord.

  26. Hallo,

    ich wollte folgendes machen:
    3 Raspi b+ in unterschiedlichen Räumen mit Wlan + Dht22 versehen, sollen
    ihre Daten an Nr.4 Senden, welcher dann alle Daten Grafisch darstellt.
    Hat vielleicht jemand eine Idee wie man das hinkriegt (ich denke mal mit nem Script)..

    • Hallo SD,

      für den Fall dass deine Frage noch nicht geklärt sein sollte, habe ich einen Denkansatz für dich (ich bin wohl auf dem gleichen Trip wie du …):

      * Auf der 4 könntest du „openHAB“ installieren inkl. „http-Binding“ und Persistence-Binding (z.B. MySQL)
      * Auf 1-3 PHP mit APACHE

      Zu 1-3:
      Im „document_root“ ein php-script hinlegen welches „rpi_dht $PINNUMMER“ startet und die Ausgabe parst (um H und T einzeln zu haben — je nachdem, was gefragt wurde)

      Evtl. stößt du auf ein Rechteproblem (www-data darf an den GPIO-PINs nicht wackeln). Dann wäre es eine Möglichkeit, die Datei „/etc/sudoers“ noch zu überarbeiten.

      Zu 4:
      openHAB ist eine Hausautomatisierungs-Maschinerie — OpenSource. Mit einem HTTP-Binding kannst du Daten per HTTP holen (und senden). Mit derm Persistence-Bindung kannst du z.B. in eine MySQL-Datenbank schreiben.

      Der schwierigste Teil für mich war der Aufruf in den geschweiften Klammern beim http-binding. Daher sende ich dir mal meines ohne Gewähr auf Korrektheit…:

      { http=“<[http://192.168.x.y/openHAB/get_dht22.php?pin=2:60000:REGEX((.*)(.?)(.*))]" }

      Damit pollst du alle 60 Sekunden (Angabe in Millisekunden). Du siehst, ich habe mir ein Verzeichnis "openHAB" gemacht und darin das Script gelegt (get_dht22.php) welchem ich mitgebe "pin=2", bitte.

      … Ja. Nun kann es zu Fragen kommen …

      Warum openHAB?

      Ich wollte mir den Kram erst selber zuercht bauen. Dann fand ich "fhem" und später "openHAB". openHAB ist recht geschwätzig — es gibt viele Module ("bindings") mit denen das Teil mit der Welt kommuniziert.

      Einen regelrechten Schub gab es als ich das Persistence-MySQL-Bindung erkannt habe. Es ist bei mir so konfiguriert, dass jede Wertänderung von jedem Sensor/Eingang gespeichert wird. So geht mir nichts durch die Lappen (und Speicherplatz kostet heutzutage in diesen (meinen) Dimenstionen nicht die Welt).

      Eine Visualisierung ist auch om openHAB mit drin. Quasi out-of-the-box.

      Warum MySQL?

      Mit dem Ding komme ich so einigermaßen zurecht Ist schnell genug und kann mehrere Zugriffe gleichzeitig. Von "extern" (außerhalb des openHAB) komme ich an alle Daten ran und es werden keine Informationen verworfen (wie es meiner Meinung nach beim RRD-Bindding passiert — Achtung: Ich kann mich irren!)

      SQL auf einer SD-Karte?

      Nein. Nummer 4 muss kein PI sein (bei mir ist es eine VM mit viel Platz und magnetischen Festplatten),

      Ansonsten gibt es Industrie-SDCards (Achtung: teurer) die sehr viel mehr Schreibvorgänge verkraften als die "Otto-Normalo-SD-Karten".

      Du schreibst ja auch nicht, dass 4 ein PI sei :-)

      Mit Kanonen auf Spatzen?

      Ja. Das ist mein Stil. Ich nutze gerne fertige, robuste Werkzeuge. Diese sind oft "groß" und damit in der Regel für meine Aufgaben überdimensioniert. Da meine Systeme schnell genug sind, kann ich mir das leisten (Protz …).

      Auf anderen Seiten wird geschreien, dass der Apache auf einem PI nicht sein muss, man könnte doch auch "xxx" nehmen. Da ich "xxx" nicht kenne, nehme ich Apache. Da weiß ich wie ich PHP (und Weiteres) zum Laufen bekomme.

      Vielleicht bin ich auch einfach nur faul und will mich nicht umgewöhnen…

      Ich wünsche viel Erfolg!

      MartinK

      • Hallo MartinK,
        eine klasse Idee (Oliver und MartinK)!
        ich hab vor meine zwei Gewächshäuser zu automatisieren, dort werd ich dein System anwenden. Das gleiche mit Temperatur und jeweils einen Bodenfeuchte sensor und fertig sind die Inputs !

  27. Hallo,
    danke für dieses Tutorial.
    Ich habe alle Schritte ausgeführt, allerdings schreibt mir mein Terminal nichts anderes als „Data not good“ jede Sekunde auf den Bildschirm… habe auch noch mal die Schaltung überprüft und kann keinen fehler finden. Hat hier jemand einen Tip oder eine Idee was ich machen könnte? Danke!!

  28. Also habe es heute nach der Anleitung gemacht. Hat alles wunderbar funktioniert.
    Habe auf meinem Breadboard 3 DHT22 montiert und verkabelt, wie beschrieben Software installiert und es funktioniert:
    pi@raspberrypi ~/rpi_dht22 $ sudo ./rpi_dht 0 2 3
    Pin = 0, Humidity = 75.6 %, Temperature = 24.9 °C
    Pin = 2, Humidity = 44.9 %, Temperature = 23.8 °C
    Pin = 3, Humidity = 45.1 %, Temperature = 23.2 °C

    aber wie bereits einer geschrieben hat, muss man ./rpi_dht und nicht ./rpi_dht22 eingeben.
    Herzlichen Dank dafür

  29. Als nächstes steht noch an, dass diese Daten in eine Datenbank geschrieben werden.
    Ich möchte diese drei Sensoren in Abhängigkeit setzen und entsprechend DC Motoren (Lüftermotoren) damit drehen lassen. Die DC Motoren haben drei Anschlüsse: Masse, dreh links und dreh rechts. Die Motoren sollen per PWM in der Drehzahl regelbar sein. Die DC Motoren haben Pmax von 3,4W bei 12V. Ich möchte erst 2, später dann 6 Motoren betreiben.
    Kann mir hier jemand eine fertige Erweiterungsplatione empfehlen, sonst müsste ich mir selber alles zusammenbauen und berechnen?
    Welche Software kann man empfehlen? Welche Datenbank?
    Wenn alles läuft, soll der IST Zustand an einem Monitor sichtbar gemacht werden (eventuell per APP) und von dort auch auf die Modis umgeschaltet werden, also Querlüften, Stoßlüften, Wechselbetrieb usw.
    Wäre super, wenn mir hier jemand helfen könnte.

    Danke und lieben Gruß
    Thilo

  30. Vielen Dank für die hervorragende Anleitung!
    Als Rpi-Anfänger hatte ich mit einer anderen Anleitung aus einem bekannten Buch keinen Erfolg, aber mit dieser Anleitung hat es auf Anhieb geklappt.

    Du schreibst:“Der nächste Schritt ist natürlich die Daten zu loggen und auszuwerten. Das kommt hoffentlich bald.“
    Das würde mich dringend interessieren. Wann ist es soweit?

    Viele Grüße
    Wilfried

  31. Danke für die Anleitung! Ich habe entsprechend 2 DHT22 Sensoren am Raspberry (GPIO 4 und 17), die ich per Python alle 60 Sekunden auslese. +/- gleichzeitig. Leider habe ich eine sehr hohe Fehlerrate beim Messen (ca 70% Fehler). Kennt jemand dieses Phänomen?

  32. Hallo,

    ich habe jetzt 2 Sensoren getestet und beide liefern viel zu hohe Werte (800 Grad, Luftfeuchtigkeit liegt auch in dem Bereich) beide Sensoren liefern die selben Werte. Was mache ich falsch? Tipps?

    Besten Dank

  33. Hallo

    Danke für das Programm zum Abfragen mehrere Pins. Funktioniert bestens, allerdings hier auch nur unter Weglassen der 22.
    Gibt es eine Möglichkeit, die Fehlanzeigen zwischen den richtigen Daten zu eliminieren ?

    Besten Dank

  34. Hallo,

    leider klappt bei mir das ./configure in lol_dht22 nicht. Bei rpi_dht22 übrigens auch nicht.

    Hier die Ausgabe dazu:
    pi@##### ~/rpi_dht22 $ sudo ./configure
    checking for a BSD-compatible install… /usr/bin/install -c
    checking whether build environment is sane… yes
    checking for a thread-safe mkdir -p… /bin/mkdir -p
    checking for gawk… no
    checking for mawk… mawk
    checking whether make sets $(MAKE)… yes
    checking whether make supports nested variables… yes
    checking for gcc… gcc
    checking whether the C compiler works… yes
    checking for C compiler default output file name… a.out
    checking for suffix of executables…
    checking whether we are cross compiling… no
    checking for suffix of object files… o
    checking whether we are using the GNU C compiler… yes
    checking whether gcc accepts -g… yes
    checking for gcc option to accept ISO C89… none needed
    checking for style of include used by make… GNU
    checking dependency style of gcc… gcc3
    checking whether make sets $(MAKE)… (cached) yes
    checking how to run the C preprocessor… gcc -E
    checking for grep that handles long lines and -e… /bin/grep
    checking for egrep… /bin/grep -E
    checking for ANSI C header files… yes
    checking for sys/types.h… yes
    checking for sys/stat.h… yes
    checking for stdlib.h… yes
    checking for string.h… yes
    checking for memory.h… yes
    checking for strings.h… yes
    checking for inttypes.h… yes
    checking for stdint.h… yes
    checking for unistd.h… yes
    checking wiringPi usability… no
    checking wiringPi presence… no
    checking for wiringPi… no
    checking /usr/local/include/wiringPi.h usability… yes
    checking /usr/local/include/wiringPi.h presence… yes
    checking for /usr/local/include/wiringPi.h… yes
    checking for wiringPiSetup in -lwiringPi… no
    configure: error: Fail to find wiringPi library

    Irgendwie findet er wohl nicht alle sourcen von wiringPi, aber warum? Ich habe es schon mehrfach neu installiert, ohne erfolg…

    Danke und Gruß

    Jochen

  35. Hallo,
    ich hab im Keller einen DHT22 an einem Raspberry am laufen, aber irgendwie finde ich die Werte für die Luftfeuchtigkeit nicht ganz plausibel…
    Ich erhalte über den Sensor ca. 70% Luftfeuchtigkeit, über ein analoges Hygrometer aber nur 59%.
    Hygrometer liegt auf einem Tisch ca. 2 Meter entfernt, Rapsberry mit DHT22 ziemlich nah an der Wand in einem Regal.
    Was kann ich von dieser Differenz halten? Wie ist eure Meinung?

  36. Hi, bei mir funktioniert alles wie beschrieben.
    Ich möchte aber eigentlich nicht einen cronjob mit sudo Rechten laufen lassen (sudo ./loldht 7).
    Hat jemand eine Idee wie ich ohne sudo an die dht22 Sensordaten komme?
    Das Grundproblem ist das Pin 7 einmal als output und dann als input genutzt wird.
    Für den Wechsel zwischen input/output braucht man bei der GPIO library sudo Rechte.

  37. Hallo,
    ich habe meinen DHT22 auch über ein CAt5-Kabel angeschlossen. Die Kabellänge beträgt lediglich 3m. Ich hatte nach Umstieg auf den Raspi 3 immer wieder starke Ausreißer bei der Luftfeuchtigkeit. Die Werte lagen oftmals bei 3000% und das mehrmals in der Stunde. Nach lesen der Kommentare hier, habe ich einfach die Datenleitung mal verdoppelt und siehe da, das Problem war gelöst.
    Also auch bei kurzen Entfernungen kann der Aderquerschnitt schon ein Problem darstellen.

Schreibe einen Kommentar

Home Hardware Luftfeuchtigkeit und Temperatur mit dem Raspberry Pi messen
© sweet pi - sweet home
Top