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):
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
1 2 |
$sudo modprobe w1-gpio $sudo modprobe w1-therm |
Damit sollte das System konfiguriert sein um am GPio4 (Pin7) die Temperatur einlesen zu können.
Ob die module geladen wurden kann man mit
1 |
$sudo lsmod |
anzeigen lassen.
Sollen diese Module auch nach einem Neustart wieder verfügbar sein, so kann man sie z.B.: in die „/etc/modules“ eintragen
1 |
$sudo nano /etc/modules |
Nach dem die Module geladen wurden, kann man in das Verzeichnis
1 |
$cd /sys/bus/w1/devices |
wechseln.
Alle erkannten Geräte (Sensoren) kann man mit dem ls-Befehl auflisten (in diesem Fall sollte es ein Sensor sein).
1 2 3 |
$ls 10-000801ca120b w1_bus_master1 $ |
Interessant ist hier der Eintrag 10-000801ca120b.
Dies ist der Sensor, bzw die eindeutige Nummer des Sensors.
Mit einem
1 |
$cd 10-000801ca120b |
wechselt man in das Verzeichnis des Sensors und bekommt dort eine Reihe von Dateien angezeigt
1 2 3 4 5 6 7 8 9 10 |
$ls -l insgesamt 0 lrwxrwxrwx 1 root root 0 Nov 5 19:53 driver -> ../../../bus/w1/drivers/w1_slave_driver -r--r--r-- 1 root root 4096 Nov 5 19:53 id -r--r--r-- 1 root root 4096 Nov 5 19:53 name drwxr-xr-x 2 root root 0 Nov 5 19:53 power lrwxrwxrwx 1 root root 0 Nov 5 19:53 subsystem -> ../../../bus/w1 -rw-r--r-- 1 root root 4096 Nov 5 19:53 uevent -r--r--r-- 1 root root 4096 Nov 5 19:53 w1_slave $ |
Durch den Aufruf von w1_slave mit dem cat-Befehl, wird die Temperatur ausgelesen und folgendes ausgegeben
1 2 3 4 |
$cat w1_slave 23 00 4b 46 ff ff 08 10 47 : crc=47 YES 23 00 4b 46 ff ff 08 10 47 t=17250 $ |
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).
1 2 3 |
$sudo touch /usr/temp.sh $sudo chmod 0700 /usr/temp.sh $sudo vim /usr/temp.sh |
Jetzt füllen wir das Skript mit Inhalt:
1 2 3 4 |
#!/bin/bash temp=`cat /sys/bus/w1/devices/10-000801ca120b/w1_slave | sed -ne '2p' |cut -c 30-34` echo "scale=3; $temp / 1000" | bc exit 0 |
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
1 |
$sudo aptitude install bc |
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.
1 2 3 |
$sudo /usr/test.sh 17.250 $ |