Sie sind auf Seite 1von 12

12.12.

2016

RaspberryPi:1WireTemperatursensor18B20auslesenunterLinuxundCODESYSflorianmai.de

florianmai.de
IT-Kram,vermischtmit(Netz)Politik

Raspberry Pi: 1-Wire Temperatursensor 18B20 auslesen unter


Linux und CODESYS
Wer sich mal etwas mit dem kostengnstigen verdrahten moderner Huser oder Wohnungen auseinander gesetzt hat, wird
schon auf den 1-Wire oder OneWire Bus gestoen sein. Dieser Bus ermglicht es, mit einem geringen
Verdrahtungsaufwand zum Beispiel Sensoren an ein Gert anzuschlieen. Es werden mindestens zwei Adern bentigt,
besser drei oder vier, es knnen jedoch mehrere Sensoren parallel angeschlossen werden.
Ein sehr beliebter Sensor ist der Temperatursensor 18B20 bzw. DS18B20, er misst die Temperatur auf 0,5C genau und gibt
diese als tausendstel aus, 21,5C zeigt der Sensor also als 21500 an. Die Messung wird ber eine Prfsumme validiert.

1-Wire am Raspberry Pi aktivieren


Der Raspberry Pi bringt einen 1-Wire-Bus mit, der ber die GPIO-Pins luft. Der Bus mus jedoch zuerst eingeschaltet
werden, dies geschieht ber die Datei /boot/config.txt, hier muss eine Zeile mit folgendem Inhalt eingetragen werden:

dtoverlay=w1-gpio
https://florianmai.de/2016/02/05/raspberrypi1wiretemperatursensor18b20auslesenunterlinuxundcodesys/

1/12

12.12.2016

RaspberryPi:1WireTemperatursensor18B20auslesenunterLinuxundCODESYSflorianmai.de

Dies aktiviert im Device Tree die 1-Wire-Schnittstelle auf dem Standard-GPIO-Pin, also Pin 7. Nach dieser nderung muss
ein Neustart durchgefhrt werden, der Bus ist nun aktiv.

DS18B20 an den Raspberry Pi anschlieen


Der Sensor hat drei Beinchen. Schaut man auf die abgeflachte Seite mit der Beschriftung, ist das linke Beinchen die
Nummer 1 und damit GND (also 0V), das mittlere die Nummer 2 und damit DQ (die Datenleitung) und das rechte Beinchen
ist die Nummer 3 und stellt die Versorgungsleitung VCC (3,3V) dar.

BelegungderPinsdesDS18B20

https://florianmai.de/2016/02/05/raspberrypi1wiretemperatursensor18b20auslesenunterlinuxundcodesys/

2/12

12.12.2016

RaspberryPi:1WireTemperatursensor18B20auslesenunterLinuxundCODESYSflorianmai.de

In diesem Beispiel schlieen wir den DS18B20 mit drei Adern an die 3,3V Versorgungsspannung des Raspberry Pi an. Bei
greren Leitungslngen empfiehlt es sich, fr die Versorgungsspannung 5V zu nehmen und den Widerstand von DQ auf
eine separate Ader mit 3,3V zu ziehen. Zum Testen reicht dieser Aufbau aber allemal.

SowirdderSensorDS18B20andieGPIO-PinsdesRaspberryPiangeschlossen

Die Verkabelung kann entweder fliegend verltet werden, oder aber (etwas eleganter und einfacher) auf einem Breadboard
aufgesteckt werden. Ich tat letzteres, wenn auch wegen akuten Jumperwire-Mangels nicht besonders ordentlich:

https://florianmai.de/2016/02/05/raspberrypi1wiretemperatursensor18b20auslesenunterlinuxundcodesys/

3/12

12.12.2016

RaspberryPi:1WireTemperatursensor18B20auslesenunterLinuxundCODESYSflorianmai.de

https://florianmai.de/2016/02/05/raspberrypi1wiretemperatursensor18b20auslesenunterlinuxundcodesys/

4/12

12.12.2016

RaspberryPi:1WireTemperatursensor18B20auslesenunterLinuxundCODESYSflorianmai.de

DerDS18B20aufdemBreadboard,verbundenmitdemRsspberryPi

Sensordaten abfragen im Linux-Terminal


Jeder Sensor hat eine einmalige Kennung, unter dieser Kennung wird auchein Gerteordner unter /sys/bus/w1/devices
angelegt. In meinem Falle hat der Sensor die Kennung28-021600bb4dff, daher ist der Gerteordner/sys/bus/w1/devices/28021600bb4dff. In diesem Ordner befindet sich die Gertedatei w1_slave. Lsst man sich diese Datei beispielsweise mit cat
ausgeben, wird der Sensor abgefragt und die Checksumme, sowie die Temperatur ausgegeben:

DieAusgabederGertedateidesDS18B20

Stimmen beide Checksummen berein, ist das Ergebnis plausibel und hinter der crc steht YES. Im Fehlerfall wrde dort
NO stehen. In der zweiten Zeile wird die Temperatur angezeigt, teilt man diesen Wert durch 1000 kommt man auf die
Temperatur in C, bei mir also 20,125C.
Das ist eigentlich schon alles. Diese Datei kann man natrlich ber Scripte oder Programme auslesen und weiter
verwenden.
Sensordaten abfragen unter CODESYS

https://florianmai.de/2016/02/05/raspberrypi1wiretemperatursensor18b20auslesenunterlinuxundcodesys/

5/12

12.12.2016

RaspberryPi:1WireTemperatursensor18B20auslesenunterLinuxundCODESYSflorianmai.de

Sensordaten abfragen unter CODESYS


Seit lngerem gibt es ja von 3S die CODESYS Laufzeit fr den Raspberry Pi, eine meiner Meinung nach fr Privatanwender
und Bastler schne Lsung in die Automatisierung einzusteigen, ohne hohe Ausgaben fr echte SPS-Hardware zu haben.
ber CODESYS auf dem Raspberry Pi habe ich schon zwei Artikel verfasst. Im ersten Artikel wirdunter anderem erklrt,
wie die Laufzeit auf dem Gert installiert wird und wie eine Verbindung zum Raspberry Pi hergestellt wird, im zweiten
geht es eher um die Python-Bibliothek Pymodbus, die die Modbus-Kommunikation zum Beispiel zwischen einem Raspberry
Pi und einem Controller mit CODESYS ermglicht.
Wir bentigen also einen Raspberry Pi mit installierter CODESYS Laufzeit, sowie dem angeschlossenen und
funktionierenden Sensor wie oben beschrieben.
Im CODESYS legen wir ein neues Projekt an und whlen als Zielsystem den Raspberry Pi.

CODESYSProjektanlegenfrDS18B20aufRaspberryPi
https://florianmai.de/2016/02/05/raspberrypi1wiretemperatursensor18b20auslesenunterlinuxundcodesys/

6/12

12.12.2016

RaspberryPi:1WireTemperatursensor18B20auslesenunterLinuxundCODESYSflorianmai.de

Nachdem das Programm angelegt ist,baut sich automatisch die Struktur auf und man sieht auch schon den Punkt fr 1Wire (bzw. Onewire).
Zunchst muss eine Verbindung zum Raspberry Pi hergestellt werden, dafr werden per Doppelklick auf den Raspberry die
Gerteeinstellungen geffnet und die IP des Gertes eingetragen (und die Zugangsdaten, falls nicht zuvor schon einmal
geschehen). Wenn die Verbindung grn angezeigt wird, ist alles in Ordnung.

CODESYSverbindenmitdemRaspberryPiimDeviceManager

Nun kann mit der Konfiguration des 1-Wire Sensors begonnen werden. Per Rechtsklick auf den Eintrag Onewire ffnet
sich das Kontextmen, hier wird ber den Menpunkt Gert anhngen das Gert Onewire_master angehngt.

https://florianmai.de/2016/02/05/raspberrypi1wiretemperatursensor18b20auslesenunterlinuxundcodesys/

7/12

12.12.2016

RaspberryPi:1WireTemperatursensor18B20auslesenunterLinuxundCODESYSflorianmai.de

DasGertOnewire_masteranhngen

Auf die selbe Art wird nun noch der Sensor DS18B20 angehngt: Rechtsklick auf Onewire_master, Gert anhngen,
DS18B20 auswhlen.
Nun sind alle Gerte vorhanden, die bentigt werden. Der Sensor muss nun noch Parametriert werden, die Gertekennung
muss eingetragen werden. Hierzu ffnet man das Device per Doppelklick und trgt im Reiter 1-wire bus Parameter in der
Spalte Wert die Kennung ein, die eben schon in der Konsole angezeigt wurde, bei mir also28-021600bb4dff. Das ganze als
String, also in Hochkommata .

https://florianmai.de/2016/02/05/raspberrypi1wiretemperatursensor18b20auslesenunterlinuxundcodesys/

8/12

12.12.2016

RaspberryPi:1WireTemperatursensor18B20auslesenunterLinuxundCODESYSflorianmai.de

DerSensorDS18B20wirdparametriert,dieGertekennungwirdeingetragen.

Das war eigentlich schon alles, der Sensor sollte nun im Programm benutzbar sein. Den Temperaturwert kann man recht
einfach nutzen, indem man den String rTemp des Sensors ausliest und beispielsweise auf eine Variable schreibt. Der Wert
rTemp ist ein REAL, die Variable muss also auch den Typ REAL haben.

https://florianmai.de/2016/02/05/raspberrypi1wiretemperatursensor18b20auslesenunterlinuxundcodesys/

9/12

12.12.2016

RaspberryPi:1WireTemperatursensor18B20auslesenunterLinuxundCODESYSflorianmai.de

DerTemperaturwertwirdberrTempausgelesen.

Im laufenden Programm sieht das ganze dann so aus:

https://florianmai.de/2016/02/05/raspberrypi1wiretemperatursensor18b20auslesenunterlinuxundcodesys/

10/12

12.12.2016

RaspberryPi:1WireTemperatursensor18B20auslesenunterLinuxundCODESYSflorianmai.de

DieLivedatendesDS18B20werdenimlaufendenProgrammangezeigt.

Eigentlich recht simpel. Da mehrere Sensoren parallel angeschlossen werden knnen, kann man so einfach die Temperatur
in einem ganzen Haus messen und dank der HTML5-WebVisu von CODESYS 3.5 auch optisch ansprechend im Netzwerk
abrufbar machen. Eine Heizungssteuerung wre natrlich auch ein guter Anwendungszweck.

5.Februar2016 FlorianMai Steuerungen 1-Wire,1w,CODESYS,DS18B20,OneWire,RaspberryPi,Temperatursensor


https://florianmai.de/2016/02/05/raspberrypi1wiretemperatursensor18b20auslesenunterlinuxundcodesys/

11/12

12.12.2016

RaspberryPi:1WireTemperatursensor18B20auslesenunterLinuxundCODESYSflorianmai.de

2 Gedanken zu Raspberry Pi: 1-Wire Temperatursensor 18B20 auslesen unter Linux und
CODESYS

Pingback: Temperatursensor DS18B20 unter Linux per Pythonscript abfragen florianmai.de

Jakub
21.September2016um14:28

Hi
How codesys code should like when reading more than 1 DS18B20?
Is it possible to sent this reading via modbus to anotfer codesys PLC? How can i do this?

Stolz prsentiert von WordPress

https://florianmai.de/2016/02/05/raspberrypi1wiretemperatursensor18b20auslesenunterlinuxundcodesys/

12/12