Good to Know Database

Raspbian Wheezy: Temperaturmessung mit DS18S20/DS18B20 1-Wire Sensoren am Raspberry Pi


Für die Temperaturmessung mit Hilfe der 1-Wire Sensoren DS18S20 und DS18B20 enthält das Raspbian Image für den Raspberry Pi bereits alle notwendigen Funktionen. Diese Anleitung soll Ihnen zeigen, wie Sie die 1-Wire Sensoren mit dem Raspberry Pi verbinden, Raspbian entsprechend konfigurieren und die Messwerte auslesen können.

Anschluss der 1-Wire Sensoren

Die 1-Wire Sensoren DS18S20 und DS18B20 benötigen nur einen Pin für die Kommunikation und können mit mehreren Sensoren auf einem Bus betrieben werden. Die Ansteuerung der einzelnen Sensoren erfolgt über die jeweilige 64-bit lange Seriennummer. Der DS18S20 und der DS18B20 können für Messungen im Temperaturbereich von -55°C bis +125°C eingesetzt werden. Im Messbereich von -10°C bis +85°C liegt die Messgenauigkeit bei ±0,5°C. Die benötigte Betriebsspannung (3,0V bis 5,5V) kann direkt an die Sensoren gelegt oder über die Datenleitung bezogen werden. Im zweiten Fall spricht man vom parasitären Modus. Im Gegensatz zum DS18S20, welcher eine feste Auflösung von 12 Bits hat, sind beim DS18B20 Auflösungen von 9 bis 12 Bits konfigurierbar. Weitere Informationen finden Sie im jeweiligen Datenblatt (DS18S20 Datenblatt, DS18B20 Datenblatt).

Der folgende Schaltplan zeigt wie Sie die DS18S20 und DS18B20 Temperatursensoren an Ihren Raspberry Pi anschließen können. Die Pinbelegung der GPIO Schnittstelle des Raspberry Pi's finden Sie auf der Seite Raspberry Pi: GPIO Pinbelegung des Raspberry Pi Model B.

Raspberry Pi: Temperaturmessung mit DS18S20 1-Wire Sensoren - Schaltplan

An dieser Stelle möchte ich auch auf den Artikel Selbstbau-Anleitung: Raspberry Pi 1-Wire Adapter hinweisen.

Kernelmodule laden

Nachdem Sie die DS18S20 oder DS18B20 Temperatursensoren mit Ihrem Raspberry Pi verbunden haben, können Sie diesen mit der Spannungsversorgung verbinden und Raspbian von der SD-Karte starten. Sobald Raspbian vollständig gestartet ist öffnen Sie eine Konsole und laden durch die folgenden Befehle die Kernelmodule wire, w1_gpio und w1_therm.

pi@raspberrypi ~ $ sudo modprobe wire
pi@raspberrypi ~ $ sudo modprobe w1_gpio
pi@raspberrypi ~ $ sudo modprobe w1_therm

Überprüfen Sie mit lsmod ob die Kernelmodule erfolgreich geladen wurden.

pi@raspberrypi ~ $ lsmod
Module                  Size  Used by
uvcvideo               59742  0
videodev               88790  1 uvcvideo
w1_therm                2705  0
w1_gpio                 1283  0
wire                   23530  2 w1_gpio,w1_therm
cn                      4649  1 wire
nfsd                  236425  13
ipv6                  271235  22
snd_bcm2835            12808  0
snd_pcm                74834  1 snd_bcm2835
snd_page_alloc          4951  1 snd_pcm
snd_seq                52536  0
snd_seq_device          6300  1 snd_seq
snd_timer              19698  2 snd_seq,snd_pcm
snd                    52489  5 snd_timer,snd_seq_device,snd_seq,snd_pcm,snd_bcm2835
evdev                   8682  2
joydev                  9102  0
hid_logitech_dj        10438  0

Erkennung der Sensoren prüfen

Nach dem Laden der Kernelmodule sollten die angeschlossenen Temperatursensoren bereits automatisch erkannt worden sein. Die Anzahl der erkannten Sensoren können Sie der Datei /sys/devices/w1_bus_master1/w1_master_slave_count entnehmen.

pi@raspberrypi ~ $ cat /sys/devices/w1_bus_master1/w1_master_slave_count
3

Die ID's der erkannten Sensoren sind in der Datei /sys/devices/w1_bus_master1/w1_master_slaves aufgelistet. Anhand des Family-Codes am Beginn des Verzeichnisnamens können Sie zwischen DS18S20 (Family-Code 10) und DS18B20 (Family-Code 28) Sensoren unterscheiden.

pi@raspberrypi ~ $ cat /sys/devices/w1_bus_master1/w1_master_slaves
10-000801e1799b
10-000801e17146
10-000801e17bc6

Des Weiteren sollte im Verzeichnis /sys/devices/w1_bus_master1/ für jeden erkannten Sensor ein Unterverzeichnis existieren.

pi@raspberrypi ~ $ ls -lad /sys/devices/w1_bus_master1/10-*
drwxr-xr-x 3 root root 0 Dez 30 14:49 /sys/devices/w1_bus_master1/10-000801e17146
drwxr-xr-x 3 root root 0 Dez 30 14:49 /sys/devices/w1_bus_master1/10-000801e1799b
drwxr-xr-x 3 root root 0 Dez 30 14:49 /sys/devices/w1_bus_master1/10-000801e17bc6

Messwerte auslesen

Wenn Ihre Temperatursensoren erfolgreich erkannt wurden, können Sie die Messwerte auslesen. Den aktuellen Messwert eines Sensors finden Sie in der Datei w1_slave im entsprechenden Unterverzeichnis von /sys/devices/w1_bus_master1/.

pi@raspberrypi ~ $ cat /sys/devices/w1_bus_master1/10-000801e1799b/w1_slave
2d 00 4b 46 ff ff 02 10 19 : crc=19 YES
2d 00 4b 46 ff ff 02 10 19 t=22625

Wie Sie an der Ausgabe sehen, befinden sich neben dem Messwert noch andere Daten in der Datei. Um nur den Temperaturmesswert zu erhalten können Sie die Ausgabe filtern.

pi@raspberrypi ~ $ grep 't=' /sys/bus/w1/devices/w1_bus_master1/10-000801e1799b/w1_slave | awk -F 't=' '{print $2}'
22437

Wie Sie jetzt sicher feststellen werden, wird der Temperaturwert als tausendstel Grad Celsius angezeigt. In diesem Fall wird also eine Temperatur von 22,437°C gemessen.

Um den Wert in Grad Celsius anzeigen zu können, muss dieser durch den Quotienten 1000 dividiert werden. Dazu wird der Basic Calculator bc benötigt, welchen Sie wie folgt installieren können.

pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ sudo apt-get install bc

Nach der Installation kann durch den folgenden Befehl der Messwert ausgelesen, umgerechnet und angezeigt werden.

pi@raspberrypi ~ $ echo "scale=3; $(grep 't=' /sys/bus/w1/devices/w1_bus_master1/10-000801e1799b/w1_slave | awk -F 't=' '{print $2}') / 1000" | bc -l
22.250

Sollten Sie noch die Einheit wünschen verwenden Sie einfach den folgenden Befehl.

pi@raspberrypi ~ $ echo $(echo "scale=3; $(grep 't=' /sys/bus/w1/devices/w1_bus_master1/10-000801e1799b/w1_slave | awk -F 't=' '{print $2}') / 1000" | bc -l) °C
22.125 °C

Um alle verfügbaren Sensoren auszulesen, können Sie den folgenden Einzeiler verwenden. Dabei wird die Datei /sys/devices/w1_bus_master1/w1_master_slaves eingelesen und anschließend jeder Sensor einzeln ausgewertet.

pi@raspberrypi ~ $ for i in $(cat /sys/devices/w1_bus_master1/w1_master_slaves); do echo ${i}: $(echo "scale=3; $(grep 't=' /sys/bus/w1/devices/w1_bus_master1/${i}/w1_slave | awk -F 't=' '{print $2}') / 1000" | bc -l) °C; done
10-000801e1799b: 21.625 °C
10-000801e17146: 21.375 °C
10-000801e17bc6: 21.687 °C

Automatisches Laden der Kernelmodule

Damit beim nächsten Neustart des Systems die benötigten Kernelmodule automatisch geladen werden, müssen Sie diese in die Konfigurationsdatei /etc/modules eintragen. Öffnen Sie diese deshalb mit einem Editor.

pi@raspberrypi ~ sudo vim /etc/modules

Fügen Sie hier am Ende der Datei die folgenden Zeilen ein und speichern die Konfigurationsdatei ab.

wire
w1_gpio
w1_therm

Weiterführende Tutorials

Raspbian Wheezy: DS18S20/DS18B20 1-Wire Sensoren mit Python auslesen


Dieser Eintrag wurde am 30.12.2012 erstellt und zuletzt am 25.09.2016 bearbeitet.

Direkter Link zu dieser Seite: http://www.gtkdb.de/index_36_2035.html

[ Zur Startseite ]   [ Zur Kategorie ]


Valid XHTML 1.0 Transitional Valid CSS Valid Atom 1.0

© 2004-2016 by Georg Kainzbauer