1-wire Temperatursensor DS18B20 am Raspberry Pi

Gepostet von am 19. März 2018, 22:06

Der DS18B20 von Maxim (vormals Dallas Semiconductor) ist ein Temperatursensor, der schon viele Jahre auf dem Markt ist. Dementsprechend ist er auch weit verbreitet und in vielen Projekten verbaut. Der Sensor kommuniziert über ein Bus-System, allerdings nicht mit dem weit verbreiteten I2C-Bus, sondern dem proprietären 1-wire-Bus von Dallas.

1-wire-Bus

Entgegen seinem Namen braucht der 1-wire-Bus mindestens 2 Leitungen: Masse und das Datensignal. Das Datensignal wird über einen Pullup-Widerstand an die Versorgungsspannung von zum Beispiel 3,3 V oder 5 V gehängt. Im Ruhezustand hat es einen high-Pegel. Im Sensor befindet sich ein kleiner Kondensator, der dann über das Datensignal aufgeladen werden kann. Findet dann eine Kommunikation über das Datensignal statt, versorgt dieser kleine Kondensator den Sensor weiter mit Energie.

Eine logische 1 wird durch ein Low-Signal mit 15 us Länge signalisiert, eine logische 0 hat 60 us. Da diese Zeiten relativ langsam sind, benötigt man zum Auslesen des Sensors keine spezielle Schnittstelle, sondern man kann das einfach über die normalen GPIOs machen.

1-wire-Bus am Raspberry Pi

Am Raspberry Pi wird das genauso gemacht.

Man muss dafür nicht mal ein Programm schreiben, da es für den 1-wire-Bus einen Kernel-Treiber gibt. Beim Raspberry Pi kann man den aktivieren, indem man das entsprechende Device-Tree-Overlay startet. Dazu schreibt man folgendes in die /boot/config.txt

dtoverlay=w1-gpio,gpiopin=4

Dadurch wird der 1-wire-Bus am GPIO4 aktiviert.

Wenn man dann nach einem Neustart den Befehl “lsmod” ausführt, sollte das Modul “w1-gpio” aufgeführt werden.

Anschluss

Der Anschluss des DS18B20 ist sehr einfach, da er nur 3 Pins hat. GND wird mit Masse verbunden. VCC kann mit der Versorgungsspannung (3,3 V) oder auch mit Masse verbunden werden, wodurch sich der Sensor dann im parasitären Versorgungsmodus befindet. Und der Datenpin DQ wird mit dem oben schon festgelegten GPIO4 verbunden. Weiterhin braucht es noch einen Pullup-Widerstand zwischen DQ und der Versorgungsspannung.

Auslesen der Werte

Sämtliche Ausgaben und ermittelten Werte des Treibers findet man im Verzeichnis /sys/bus/w1. Die angeschlossenen Sensoren werden beim Start des Systems automatisch erkannt. Eine Liste der gefunden Sensoren mit ihren device-ids findet man unter /sys/bus/w1/devices/w1_bus_master1/w1_master_slaves

Die Werte der einzelnen Sensoren kann man in der Datei /sys/bus/w1/devices/device-id/w1_slave finden. Die Datei enthält 2 Zeilen: In der ersten Zeile wird die Check-Summe überprüft; in der zweiten Zeile steht der Temperaturwert.

Auf meinem Raspberry Pi mit 2 angeschlossenen Sensoren erhielt ich folgende Ausgabe:

DS18B20


Kategorien ,

Stichworte Raspberry Pi,1-wire,DS18B20,Sensor


Kommentare

Kommentarfunktion für diesen Artikel geschlossen.