Der Raspberry Pi (kurz RPi) lässt sich mit wenig Aufwand zum Auslesen von Werten aus 1-Wire-Sensoren, wie z.B. dem DS18B20 verwenden.
In diesem Tutorial werden die Sensoren über eine Erweiterungsplatine 1 Wire Pi Plus der Fa. AB Electronics UK mit dem Raspberry Pi verbunden.
Die Platine enthält einen DS2482-100 Chip, die Schnittstelle zwischen i2c-Bus und 1-Wire-Bus, einen Pegelkonverter von 5V auf 3,3V auf Basis eines FDC6301N und eine Schutzdiode DS9503 die gegen elektrostatische Entladungen auf den 1-Wire-Bus schützt. Als Stecker für die Sensoren dient eine Modularbuchse RJ12.
Die Schaltung findet man hier.
Als Basis wird ein Raspberry Pi mit installiertem Raspbian Stretch Lite verwendet.
Eine Anleitung für die Installation und Konfiguration von Raspbian gibt es bald hier.
I2C-Module Installieren
Wir testen als erstes nach ob die benötigten i2c-Module geladen wurden.
root@rpionewire:~# lsmod|grep i2c i2c_bcm2835 7167 1 i2c_dev 6913 2
Falls die Module nicht geladen wurden, aktivieren wir sie in der raspi-config unter 5 Interfacing Options und weiter P5 I2C oder tragen sie manuell in die /etc/modules ein:
root@rpionewire:~# echo i2c-dev >> /etc/modules
und starten sie mit:
root@rpionewire:~# modprobe i2c_dev root@rpionewire:~# modprobe i2c_bcm2835
Nun installieren wir das Paket i2c-tools um den Bus zu testen
root@rpionewire:~# apt-get install i2c-tools
und scannen den i2c-Bus nach Geräten:
root@rpionewire:~# i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- 18 -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
Nachdem ein Bus erkannt wird können wir mit der Installation der 1-Wire Software beginnen.
OWFS Installieren
Im aktuellen Debian Stretch liegt das Paket owfs in der Version 3.1p5-1 auf, dieses installieren wir mit:
root@rpionewire:~# apt-get install owfs
Die ausführbaren Programme sollten nun hier zu finden sein:
root@rpionewire:~# cd /usr/bin/ root@rpionewire:/usr/bin# ls -la ow* -rwxr-xr-x 1 root root 26152 Jän 8 2017 owexternal -rwxr-xr-x 1 root root 59 Jän 8 2017 owfs -rwxr-xr-x 1 root root 63176 Jän 8 2017 owftpd -rwxr-xr-x 1 root root 30208 Jän 8 2017 owhttpd -rwxr-xr-x 1 root root 26152 Jän 8 2017 owserver
Die Installation von den Diensten owserver und owhttpd ist beendet, wir können nun die Konfiguration durchführen.
OWFS Konfigurieren
Um festzustellen wie unser i2c-Device heißt schauen wir in das Verzeichnis /dev:
root@rpionewire:~# ls -la /dev |grep i2c* crw-rw---- 1 root i2c 89, 1 Mai 12 17:25 i2c-1
Wir editieren die owfs.conf
root@rpionewire:~# touch /etc/owfs.conf
und setzen die Einträge für den owserver und owhttpd.
# This is the main OWFS configuration file. ######################## SOURCES ######################## !server: server = localhost:4304 server: device = /dev/i2c-1 ####################### OWHTTPD ######################### http: port = 2121 #alias = /etc/owhttpalias ####################### OWSERVER ######################## server: port = 4304
Wir legen eine Datei owhttpalias im Verzeichnis /etc an
root@rpionewire:~# touch /etc/owhttpalias
in welche wir später Aliase für die Sensoren eintragen.
Einrichten der Start/Stop-Dienste
Die mit dem Paket gelieferten Start/Stop-Scripte basieren noch auf dem init-System und lassen den owserver und den owhttpd mit root-Rechten laufen.
Wir wollen die jedoch mit einem eigenen User laufen lassen und stellen auch die Start/Stop-Scripte auf Systemd um.
Dazu erstellen wir einen neuen User
root@rpionewire:~# adduser ow
verhindern, dass er sich am System anmelden kann
root@rpionewire:~# usermod -s /usr/sbin/nologin ow
und fügen ihn zum Schluß der Gruppe i2c zu:
root@rpionewire:~# addgroup ow i2c
Dann wechseln wir ins Verzeichnis der Start/Stop-Scripte
root@rpionewire:~# cd /lib/systemd/system/
und erstellen die Datei owserver.service
root@rpionewire:/lib/systemd/system/# touch owserver.service
welche wir in einem Editor wie folgt anpassen:
[Unit] Description=Backend server for 1-wire control Documentation=man:owserver(1) After=network.target [Service] Type=notify NotifyAccess=all ExecStart=/usr/bin/owserver -c /etc/owfs.conf --debug Restart=on-failure User=ow Group=ow [Install] WantedBy=multi-user.target
Als nächstes erstellen wir die Datei owhttpd.service wie folgt
root@rpionewire:/lib/systemd/system/# touch owhttpd.service
und passen sie im Editor wie folgt an:
[Unit] Description=Tiny webserver for 1-wire control Documentation=man:owhttpd(1) After=avahi-daemon.service owserver.service [Service] Type=notify NotifyAccess=all ExecStart=/usr/bin/owhttpd -c /etc/owfs.conf --pid-file /var/run/owfs/owhttpd.pid --debug User=ow Group=ow [Install] WantedBy=multi-user.target
Um die Änderungen für den systemd zu Übernehmen tippen wir:
root@rpioneroot@rpionewire:~# systemctl daemon-reload
Wir starten nun den owserver-Dienst
root@rpionewire:~# systemctl start owserver.service
und im Anschluß daran den owhttpd-Dienst.
root@rpionewire:~# systemctl start owhttpd.service
Nun sehen wir nach ob die Dienste laufen.
root@rpionewire:~# ps -u ow PID TTY TIME CMD 388 ? 00:00:01 owserver 1468 ? 00:00:00 owhttpd
Damit die Dienste automatisch starten tippen wir noch:
root@rpionewire:~# systemctl enable owserver.service root@rpionewire:~# systemctl enable owhttpd.service
Nach einem Neustart prüfen wir nochmals ob die Dienste laufen.
root@rpionewire:~# ps -u ow PID TTY TIME CMD 451 ? 00:00:01 owserver 1214 ? 00:00:00 owhttpd
Wenn beide laufen öffnen mit einen Browser unsere 1-wire Web-Seite (IP-Adresse:2121).
Wenn wir jetzt auf eine der Sensoren (z.B.: 28.CB2526000080) klicken bekommen wir die aktuellen Werte
Da wir nun die Adressen der Sensoren kennen, können wir diese mit Aliase versehen. Dazu öffnen wir die Datei /etc/owhttpalias und tragen wie folgt ein:
28.CB2526000080 = magenta 28.FF8442841604 = blue 28.FF86B2831603 = white 28.FF753D841604 = red
Nach einen Neustart von owserver und owhttpd werden im 1-Wire Web die Aliase angezeigt.
Die Installation ist somit abgeschlossen.