Raspberry Pi – DS1820 Temperatursensoren auslesen

RaspiDS1820FritzingIch habe hier schon in einigen Beiträgen gezeigt wie man mit dem Arduino
mittels der 1-wire Temperatursensoren DS1820 die Temperatur ermitteln und ausgeben kann.

Wer meint dass diese Aufgabe, also Temperatur ermitteln und Temperatur ausgeben, mit dem Arduino einfach ist, der hat das noch nie mit dem Raspberry Pi gemacht.

Ich hätte nie gedacht dass man die Temperatur eines oderer mehrerer Sensoren
am 1-Wire Bus des Raspberry Pi so einfach und ohne eine Zeile programmieren zu müssen, auslesen kann. Klar wenn man die Temperatur nun auf einer Website anzeigen oder diese per eMail verschicken will, dann muss schon die eine oder andere Zeile programmiert werden, aber darum soll es in diesem Beitrag ja nicht gehen.

  • Benötigte Teile
  • GPIO Pinbelegung des Raspberry Pi 2
  • 1-Wire Protokoll aktivieren
  • Raspberry Pi – DS1820 Temperatursensoren verbinden
  • Temperatur auf Website ausgeben (PHP)
  • Temperatur über Terminal (Python) ausgeben

 

Benötigte Teile

  • 1 x Raspberry Pi 2
  • 1 x Breadboard,
  • Jumperkabel (männlich -> weiblich)
  • 1 oder mehrere DS1820 Temperatursensoren
  • 1 x 4,7kOhm Widerstand

 

GPIO Pinbelegung des Raspberry Pi 2

PinBelegungRaspberryPiModelB+

 

1-Wire Protokoll aktivieren

Um auf den 1-Wire Bus  des Raspberry zugreifen zu können, an dem die DS1820 Sensoren angeschlossen werden, reicht es ein paar Kernel Module zu laden.

Aber Achtung: Hier gibt es einige grundlegende Veränderungen ab der Kernel Version 3.18.3 zu älteren Kernel-Versionen.

Prüfen Sie als erstes mal mit  lsmod ob die benötigten Kernel Module „w1_gpio“ und „w1_therm“ nicht schon geladen wurden.

Sollte dies nicht der Fall sein, prüfen Sie als nächstes welche Kernel Version Sie benutzen.
Geben Sie dazu den folgenden Befehl ins Terminal ein.

Wenn Sie jetzt eine Version größer oder gleich 3.18.3 angezeigt bekommen, machen Sie mit dem Menüpunkt „Kernel-Version >= 3.18.3“ weiter ansonsten überspringen Sie diesen Teil und gehen direkt zu dem Punkt „Kernel-Version < 3.18.3“

Kernel-Version >= 3.18.3

Öffnen Sie die Datei „/boot/config.txt“

fügen Sie ganz unten folgende Zeile ein.

Hier können Sie auch den GPIO-Pin für die 1-wire Unterstützung ändern.

Ende Kernel-Version >= 3.18.3

 

Kernel-Version < 3.18.3

Wenn Sie eine Kernel Version älter als 3.18.3 benutzen, können Sie die Kernel Module mit folgendem Befehl laden.

pullup=1 teilt dem Modul mit dass eine parasitäre Stromversorgung über einen Pull-up-Wiederstand vorhanden ist.

Um nicht nach jedem Neustart des Raspberry Pi die Module von Hand erneut laden zu müssen, schreiben wir diese in die Datei „/etc/modules“.
Das machen Sie entweder mit dem Befehl

oder ganz klassich indem Sie die Datei „/etc/modules“ mit einem Editor öffnen

und die folgenden zwei Werte von Hand an das Ende der Datei eintragen.

Speichern Sie die Datei nun indem Sie die Taste ESC und anschließend die Tasten : W Q und Enter drücken.

Ende Kernel-Version < 3.18.3

Starten Sie Ihren Raspberry Pi mit sudo reboot neu und prüfen Sie als nächstes erneut mit dem Befehl lsmod ob die Kernel Module „w1_gpio“ und „w1_therm“ richtig geladen wurden.

 

Raspberry Pi – DS1820 Temperatursensoren verbinden

Für jeden Sensor den Sie am 1-wire Bus anschließen, wird im Verzeichnis „/sys/bus/w1/devices/“ ein neues Unterverzeichnis erstellt.
Der Name des Unterverzeichnisses setzt sich aus dem Family-Code des Sensors und seiner eindeutigen Identifikationsnummer zusammen.

Übersicht der Family-Codes
DS1820 = 10
DS18S20 = 10
DS18B20 = 28
DS1822 = 22

Verbinden Sie also wie im folgenden Bild zu sehen einen oder mehrere Sensoren mit dem Raspberry Pi.
Bei dem Widerstand handelt es sich um einen 4,3kOhm Widerstand.

RaspiDS1820Fritzing
Springen Sie nun mit folgendem Befehl in das zuvor genannte Verzeichnis und lesen Sie dessen Inhalt aus.

Da ich wie auf dem Bild zu sehen zwei Sensoren angeschlossen habe, von denen einer ein DS18S20 und einer ein DS18B20 ist, werden bei mir nun folgende Einträge angezeigt.

Dabei stehen die beiden Verzeichnisse, deren Verzeichnisname mit 10- bzw. 28- beginnen für die 2 angeschlossenen Sensoren.

Wechseln Sie nun in eines der „Sensor-Verzeichnisse“ und lassen Sie sich den Inhalt des Verzeichnisses ausgeben

Sie sehen in dem Verzeichnis eine Datei mit dem Namen „w1_slave“
Lassen Sie sich den Inhalt dieser Datei mit folgenden Befehl ausgeben.

Die Ausgabe sollte nun in etwa so aussehen

Am Ende der ersten Zeile sehen Sie die Prüfsumme (CRC) und die Information, ob der Temperaturwert richtig gelesen (YES) werden konnte.
Der Wert hinter t= steht für die aktuell ermittelte Temperatur des Sensors in tausendstel Grad Celsius.
Auf die Genauigkeit von 3 Stellen nach dem Komma sollte man hier nicht so viel geben. Wenn man das Datenblatt des DS1820 Sensors zur Hand nimmt, wird man sehen dass die reale Genauigkeit bei +-0,5 Grad Celsius liegt.

Um nun also den richtigen Temperaturwert zu erhalten muss man einfach den angezeigten Wert durch 1000 dividieren.
Bei wurden also 27,625 Grad Celsius oder real 27,6 Grad Celsius ermitteln.

Wenn man statt dem Verzeichniss eines Sensors mal in das Verzeichnis „w1_busmaster“ wechselt und sich mit ls den Inhalt ausgeben lässt, wird man auf die Datei „w1_master_slaves“ stoßen.

Schauen Sie sich doch mal mit „cat w1_master_slaves“ den Inhalt an.
Sie werden die Namen der erkannten Sensoren sehen.

Diese Ausgabe ist super praktisch wenn man z.B. ein Script schreiben will, mit dem man sich die Temperaturen sämtlicher Sensoren ausgeben lässt. Stellen Sie sich vor, Sie müssen mal einen Sensor wechseln oder tauschen. Jetzt müssten Sie die Sensor-Identifikationsnummer in Ihren Scripten von Hand anpassen. Wenn Sie den Inhalt dieser Datei in Ihren Scripts einbeziehen können Sie sich diese Arbeit im Nachhinein ersparen.

 

Temperatur auf Website ausgeben (PHP)

Da ich auf meinem Raspberry Pi auch einen NGinx Webserver installiert habe, habe ich mir direkt auch ein kleines PHP-Script geschrieben mit dem ich über das Internet die Temperatur der verschiedenen Sensoren anzeigen lassen kann. Später werde ich das PHP-Script mal dahingehend erweitern dass die Sensor-Identifikationsnamen wie oben beschrieben aus der Datei „w1_busmaster/w1_master_slaves“ ausgelesen und genutzt werden.

RaspiDS1820PHPAusgabet

 

Temperatur über Terminal (Python) ausgeben

Ich melde mich an meinem Account (pi) an und lege zunächst das Verzeichnis „Scripts“ in meinem Home-Verzeichnis an. Dann springe ich in dieses Verzeichnis und lege die Datei „getOneWireTemperature.py“ an.

Fügen Sie nun folgenden Quelltext in die Datei „getOneWireTemperature.py“ ein und speichern Sie die Datei.

Machen Sie diese Datei nun mit folgendem Befehl ausführbar.

Sie können die Datei nun mit folgendem Befehl aufrufen um sich die Tempoeratur aller angeschlossenen Sensoren ausgeben zu lassen.

Die Ausgabe sieht dann so aus.

10-000802573877:   21.3 °C
28-000003beaee3:   21.4 °C

 

Ich hoffe ich konnte in diesem Beitrag verständlich machen wie man mit einfachen Mitteln die Temperature eines oder mehrerer DS1820 Sensoren mit dem Raspberry Pi auslesen kann.

Über Enrico S.

Programmierer, Webdesigner, Grafiker, Blogger, Screencaster, Arduino- und eMobility Enthusiast.

Ein Kommentar zu “Raspberry Pi – DS1820 Temperatursensoren auslesen

  1. HI.
    Super Tutorial! Danke dafür.
    Ich nutze das ganze, u mdie Temperatur in einem kleinen Netzwerkschrank zu überwachen.
    Ich hab leider keinerlei Programmiererfahrung, würde aber das ganze gerne erweitern. Vllt. kannst du mir dazu einen Tipp geben.

    Ich will, das der Pi bei einem bestimmten Temperaturwert, zB. 30 Grad, einen Shutdownbefehl an einen Windowsserver absetzt. Ist so etwas realisierbar?

Kommentar verfassen