Raspberry Pi Temperatursensor 1-wire

GPIO

Raspberry Pi Temperatursensor (1-Wire): Temperatur messen

In diesem Tutorial soll gezeigt werden, wie man mit einem Raspberry Pi Temperatursensor die Temperatur der Umgebung auslesen kann. In einem weiteren Tutorial werden wir mittels Sensor und Lüfter für das RaspberryPi Gehäuse eine Kühlung bauen.



Vorweg sei gesagt, dass der in diesem Tutorial verwendete Raspberry Pi Temperatursensor keine Luftfeuchtigkeit oder Luftdruck messen kann. Dies ist jedoch auch ohne weiteres am Pi möglich. Wie das funktioniert, habe ich in einem anderem Tutorial erklärt.

 

Zubehör

Beschreibung des 1-Wire Raspberry Pi Temperatursensor

Der Temperatursensor gibt einen 9 bis 12bit langen Wert zurück, welcher ausgelesen und umgewandelt werden kann. Das ist allerdings (bisher) nur an GPIO Pin 4 (Pin 7) möglich. Dafür kann man allerdings auch mehrere Sensoren in Reihe schalten (da es auf dem 1-Wire Protokoll basiert).

Aufbau

Dargestellt ist ein Aufbau mit einem Temperatursensor, als Widerstand habe ich einen 4,7k Ω genommen.

Raspberry Pi Temperatursensor 1-wire Aufbau

Raspberry Pi Temperatursensor Aufbau

Wenn alles entsprechend verkabelt ist, können wir das 1-Wire Protokoll damit aktivieren:

sudo modprobe w1-gpio
sudo modprobe w1-therm

Ob es geklappt hat, können wir herausfinden, indem wir folgendes eingeben:

lsmod

Die Module und müssten nun aufgelistet sein, falls nicht wird ein anderer GPIO Pin als 4 benutzt oder es trat ein Fehler beim aktivieren auf.

Damit nicht bei jedem Start die Module geladen werden, tragen wir sie in die Datei /etc/modules ein:

sudo nano /etc/modules

und fügen als letztes die folgenden zwei Zeilen ein:

w1_gpio
w1_therm

Für den nächsten Schritt benötigen wir als erstes die ID des Sensors. Falls du vorhast mehrere in Reihe anzuschließen, teste am besten jeden einzeln und notiere dir die ID, damit du sie später nicht verwechselst.

Wir wechseln das Verzeichnis und geben uns die Dateien aus

cd /sys/bus/w1/devices/
ls

Eine der Dateien heißt 10-000802b4ba0e (bei dir anders) und ist die ID, mit der wir den Sensor abfragen (bitte ID anpassen):

cat /sys/bus/w1/devices/10-000802b4ba0e/w1_slave

In der Ausgabe sehen wir als letzte Angabe die Temperatur (in „Milligrad“)

31 00 4b 46 ff ff 05 10 1c : crc=1c YES
31 00 4b 46 ff ff 05 10 1c t=24437

Durch 1000 geteilt macht das 24.437°C.

Um die Temperatur einfacher auszulesen, habe ich ein kleines Skript geschrieben. Wer später durch einfache eingabe von temperature die Ausgabe erhalten will, sollte es in /usr/bin/ anlegen:

sudo nano /usr/bin/temperature

Der Inhalt:

Nun noch entsprechende Rechte geben

sudo chmod +x /usr/bin/temperature

und wenn man nun in die Konsole

temperature

eingibt, so erscheint die aktuell gemessene Temperatur. Falls eine Fehlermeldung kommt, so musst du wohl bc nachinstallieren.

sudo apt-get install bc

Abschließend noch ein kleinner Tipp: Wer mit den Sensor außerhalb (z.B. aus dem Fenster hängend) messen will und durch die Fensterdichtung keine großen Kabel bekommt, dafür eignet sich ein Flachbandkabel (altes IDE oder Diskettenlaufwerkkabel). Gut eingepackt in einen Frischhaltebeutel ist das ganze dann auch wetterfest (Luft rauslassen und gut zukleben, dann beeinflusst es die Messung auch nur minimal).



, , , , ,


17 Kommentare

  1. Martin sagt:

    Danke für diesen Informativen Beitrag,
    die Formatierung temp=`echo "scale=2; "\`echo ${tempread: -5 }\`" / 1000" | bc` hatt aber einen Fehler:
    Ist die Temperatur kleiner 10 °C gibt es keine ausgabe mehr!
    Lg

    • Felix sagt:

      Vielen Dank für den Hinweis, du hast natürlich recht. Das lag daran, dass ich immer die letzten 5 Zahlen genommen haben.
      Ich habe es nun mal geändert, indem nur noch die Zahlen nach dem letzten Gleichheitszeichen genommen werden. Damit sind auch kleinere Werte möglich.
      temp=`echo "scale=2; "\`echo ${tempread:##*=}\`" / 1000" | bc`

      LG Felix

  2. Roland sagt:

    Hallo,
    ich komme schon bei „cd /sys/bus/w1/devices/ und ls“ nicht weiter. Der Pfad ist leer, also keine ID vorhanden.
    Ich hoffe du kannst mir helfen.

    Mfg
    Roland

  3. Sven sagt:

    Hallo,

    erstmal vielen Dank für das tolle Tutorial.
    Bei mir klappt es jetzt.
    Allerdings musste ich die eine Zeile so schreiben:
    temp=`echo "scale=2; "\`echo ${tempread##*=}\`" / 1000" | bc`
    Also ohne den Doppelpunkt in den geschweiften Klammern.

    Viele Grüße
    Sven

  4. Tim sagt:

    Hallo,

    wieso muss eigentlich die Stromversorgung (5.0V) mittels eines 4.7k Widerstand an den Data-Wire des DS18B20 angeschlossen sein. Also erstens wieso die Spannung dahin und wieso die 4.7k Ohm. Ich verstehe, dass der Raspberry am GPIO keine 5V verträgt aber wie lautet die Formel, mit der man errechnet, dass mittels eines 4.7k Widerstand die Spannung von 5.0V auf die des GPIO (3.3V) angepasst wird.

    – Bin ein Laie ^^

    • Felix sagt:

      Der GPIO darf maximal 3.3V bekommen, aber das Problem ist, wenn gar keine Spannung anliegt wird ein zufälliger Wert (High oder Low) ausgegeben. Um das zu verhindern schalten wir über einen sehr großen Widerstand eine Spannung (an VCC oder GND, je nachdem ob Pull-Up/Down), um diesen Effekt zu verhindern.

  5. Peter sagt:

    Hallo zusammen,

    ist bei diesem Setup eine Leitungslänge zwischen dem PI und dem Temperatur Sensor von circa 15-20 Meter möglich?

    Danke vorab!
    Peter

    • Felix sagt:

      Du müsstest mal schauen wie hoch der Spannungsabfall bei 15-20m ist. Kommt aber auch auf das Trägermaterial (Kupfergehalt etc.) an.
      Falls du es testest, würde mich das Ergebnis auch interessieren.
      LG Felix

  6. Björn sagt:

    Hallo,
    bei mir wird keine Datei angezeigt, wenn ih im Verzeichnis w1/devices bin. Also ich gebe ls ein und nichts passiert.
    Bin totaler Anfänger.

    LG Björn

  7. Ben sagt:

    Hallo,
    habe das gleich Problem wie Felix, Jan und Björn. Die Module sind geladen, auch nach einem Neustart, aber der devices Ordner ist leer.
    Jemand eine Idee

  8. Ben sagt:

    So geht’s erst mal weiter:
    Die /boot/config.txt wie hier im Link beschrieben editieren:
    http://www.golem.de/news/mitmachprojekt-temperatur-messen-und-senden-mit-dem-raspberry-pi-1604-120188-3.html

    • Stefan sagt:

      Danke, das war der Hinweis, den auch ich benötigt habe. Bei mir war das Verzeichnis ebenso leer, aber nach dem Anpassen der boot/config.txt und Neustart funktioniert nun alles wunderbar!

  9. Ben sagt:

    Die Lite auf der ersten Revision des B Modells

  10. Ben sagt:

    P.S: Schöne Seite übrigens!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Blog abonnieren

Abonniere Tutorials-RaspberryPi, um kein Tutorial mehr zu verpassen!