Raspberry: Temperaturmessung mit D1820 über GPIO

Heute Abend bin ich Strohwitwer, also schnell zum Lötkolben gegriffen, einen Dallas-Sensor (DS1820) an ein paar Drähte aus einem alten Computer (RIP) angelötet und schon wurde der (Quick&Dirty-)Schnellversuch gestartet ……

Um nicht die Drähte direkt an die GPIO-Leiste des Raspberry anzulöten, habe ich aus einem alten Rechner ein paar Kabel heraus geschnitten, um den Versuchsaufbau steckbar zu machen.
Ein Dallas Sensor lag noch in meiner Schublade (aus „digitemp“-Zeiten) und der passende Widerstand war auch schnell gefunden.Der Widerstand mit einem Wert von 4,7kOhm wird zwischen Pin 2 (Data) und Pin 3 (+) des Dallas-Sensors gelötet.
An der GPIO-Leiste werden die 3,3V an Pin 1 abgegriffen, Pin 6 ist die Masse und über Pin 7 wird dann der Wert vom Dallas-Sensor ausgelesen.
Sensor1 an GPIO-Pin 6 (GND)
Sensor2 an GPIO-Pin 7 (Data)
Sensor3 an GPIO-Pin 1 (+3,3V)
Hier der Aufbau (wie gesagt Quick&Dirty):
Raspberry-03b

Weiter gehts auf der Konsole des RaspberryPI.
Zum Einsatz kommt ein Raspbian7.
Nun laden wir die Module w1-gpio und w1-therm mit dem Befehl modprobe

Damit sollte das System konfiguriert sein um am GPio4 (Pin7) die Temperatur einlesen zu können.
Ob die module geladen wurden kann man mit

anzeigen lassen.
Sollen diese Module auch nach einem Neustart wieder verfügbar sein, so kann man sie z.B.: in die „/etc/modules“ eintragen

Nach dem die Module geladen wurden, kann man in das Verzeichnis

wechseln.
Alle erkannten Geräte (Sensoren) kann man mit dem ls-Befehl auflisten (in diesem Fall sollte es ein Sensor sein).

Interessant ist hier der Eintrag 10-000801ca120b.
Dies ist der Sensor, bzw die eindeutige Nummer des Sensors.
Mit einem

wechselt man in das Verzeichnis des Sensors und bekommt dort eine Reihe von Dateien angezeigt

Durch den Aufruf von w1_slave mit dem cat-Befehl, wird die Temperatur ausgelesen und folgendes ausgegeben

Der letzte Wert in der zweiten Zeile ist die Temperatur, hier 17250, was 17,250°C entspricht.

Damit das Ganze jetzt etwas ansprechender wird, behelfen wir uns mit einem kleinen Skript.
Zu erst erzeugen wir eine Datei „temp.sh“ (ich wähle dafür das Verzeichnis /usr), machen diese für root ausführbar und öffnen die Datei mit einem Editor (hier vim).

Jetzt füllen wir das Skript mit Inhalt:

Erklärung:
der cat-Befehl führt das w1_slave aus.
der sed-Befehl übernimmt davon nur die 2te Zeile
der cut-Befehl übernimmt nur die Zeichen (Chars) 30-34 (die letzten 5 Zeichen)
Um den Wert korrekt auszugeben, teilen wir ihn durch 1000, was die letzten 3 Stellen hinter ein Komma bringen sollte. Doch leider macht und hier die Bash einen Strich durch die Rechnung – sie gibt nur Ganzzahlen aus.
Deshabl brauchen wir hier noch den Befehl bc – ein Calculator für die Konsole.
Beim Raspbian kann bc durch die Eingabe von

installiert werden.
Die Anweisung „scale=3“ gibt an, wieviel Stellen nach dem komma wir haben möchten. Man kann hier also auch „2“ für 2 Stellen, oder „1“ fpr eine Stelle nach dem Komma angeben.
Die echo-Ausgabe wird an „bc“ über- und danach ausgegeben.