Raspi und 1-Wire
Im RaspberryPi sind schon die Module enthalten, um auf GPIO-Port 4 (P1 Anschluss 7) eine 1-Wire Verbindung zu betreiben. Allerdings sollten die Leitungen nur kurz sein, da der Pi nur wenig Strom liefern kann unddie Eingänge in kleinster Weise "abgesichert" sind. Besser ist hier eine aktive Anbindung über USB oder I2C. Auch wenn 1-Wire "eigentlich" nur eine Leitung (+Masse) braucht, sollten speziell bei längeren Leitungen die Sensoren getrennt mit Strom und Masse versorgt werden und die Signalleitung nur mit einem 4k7-Ohm Widerstand auch "high" gehalten werden.
Achtung: Der Raspberry verträgt auf den Datenleitungen nur 3,3V. Daher nie mit 5V arbeiten.
Beachte dazu auch MSXFAQ.DE:1-Wire Bus und EAC 1Wire/S0-Stick
Anschlussarten
Drei Anschlussarten am RasPi sind denkbar. Der RasPI ist links angeschlossen und das blaue "DS1820B" ist ein einfacher 1-Wire Themperaturfühler.
Bild | Beschreibung |
---|---|
|
Kurze LeitungÜber einen einfachen 4k7 Ohm Wiederstand wird die Datenleitung über die +3,3V Leitung auf "High" gehalten. Sowohl der RasPi als auch ein angeschlossener Sensor kann die Datenleistung problemlos auf Masse ziehen. Durch die geringen Pegel der Versorgungsspannung eignet sich diese Verdrahtung eher für kurze Strecken. |
|
Längere LeitungenWenn wir die Versorgungsspannung für die Sensoren nicht aus dem 3,3V Zweig sondern aus dem 5V-Anschluss des RasPi beziehen, sind die Sensoren besser bedient. Aufgrund der 3,3V Abhängigkeit des RasPi-GPIO-Pins darf die Datenleitung aber nicht aus 5V gespeist werden. Auch wenn dieser Aufbau etwas robuster ist, sollten Sie die Leitungslänge im Blick behalten. |
|
Parasitärer ModulsDer Name 1-Wire kommt ja gerade davon, nur eine Leitung zu ziehen und die Masse irgendwo her zu holen. In dem Betrieb muss die Datenleisung aber auch die Speisung der Sensoren übernehmen, die dann über einen internen Kondensator sich am Leben erhalten, während die Datenleistung bei der Übertragung auf Masse gezogen wird. Mit 3,3V als Versorgung der Datenleitung tun sich viele Sensoren schwer. Der Betrieb scheint sehr unsicher zu sein. Bei mir wurde nicht mal ein DS1820B direkt am Pin erkannt. |
Sinnvoll nutzbar sind aber nur die linke für sehr kurze Leitungen, z.B.: um einen Temperatursensor nahe am Pi anzuschließen (Eigenüberwachung oder Meßobjekt nahe bei. Etwas besser geht mit einer 5V Speisespannung, wobei die 3,3V für die Datenleitung klar getrennt sein muss.
Achtung: Der Raspberry verträgt auf den Datenleitungen nur 3,3V. Daher nie mit 5V arbeiten.
Die dritte Version mit der parasitären Stromversorgung ist mit dem Pi nicht stabil einsetzbar. Da die Datenleitung hier auch Strom liefern muss aber nicht mehr als 5V verträgt, ist dies nicht stabil. Wenn Sie wirklich neben der Masse nur einen Draht ziehen sollen, dann müssen sie aufwändige elektrische umsetzer bauen oder besser einen USB oder seriellen Adapter für 1-Wire anschließen.
Exemplarischer Sensor
Ich habe auf meiner eigenen GPIO-Platine einfach einen DS1820B direkt angeschlossen. So kann ich die Funktion zeigen und zugleich ein bisschen die Umgebungsthemperatur überwachen:
Links sehen Sie den DS1820 und den 4k7-Ohm-Widerstand. Rechts die Rückseite, mit dem Anschluss an Pin 1 (+3,3V), Pin 7 (GPIO4). Die Leitung zur Masse rechts raus ist nur teilweise sichtbar. Auf die drei Pfostenstecker kann ich den 1-Wire Bus verlängern. Nicht schön aber für erste Versuche ausreichend.
Einbindung im Kernel
Der RasPi liefert das passende Modul schon mit, um den GPIO-Pin 4 als 1-Wire Pin zu verwenden. Die 1-Wire-Unterstützung muss im Kernel als Modul nachgeladen werden werden.
modprobe w1-gpio modprobe w1-therm
Damit diese Aktivierung "permanent" ist, müssen diese Aufrufe in die Startup-Datei addiert werden. Maßgeblich ist dabei die Datei ""/etc/modules", in der einfach die Module eingetragen werden:
sudo nano "/etc/modules Addieren "w1-gpio" (ohne Anführungszeichen) Addieren "w1-therm" (ohne Anführungszeichen)
Der Zugriff auf die Sensoren erfolgt über das Dateisystem. Jeder Sensor wird mit seiner ID als Verzeichnis eingebunden.
ls /sys/bus/w1/devices cat /sys/bus/w1/devices/10-123232/w1_slave crc = 5e YES t=20435
Das Ergebnis des Sensors mit der Nummer 10-123232 steht in der Datei "w1_slave" und enthält Angaben zur Prüfsummer und den Ergebniswert. Hier ist es eine Temperatur, die bei dem Sensor durch 1000 geteilt werden muss. (20,435 Grad). Wie die Werte zu interpretieren sind, ist im Datenblatt zum Sensor zu sehen.
Der Kernel-Treiber kann über eine Konfigurationsdatei "/etc/modprobe.d/1-wire.conf" gesteuert werden.
sudo nano /etc/modprobe.d/1-wire.conf options wire max_slave_count=20
Webserver
Über einfach Datei-IOs jeder beliebigen Programmiersprache können Sie auf die Ergebnisse darauf zugreifen. Ein denkbar einfacher Weg ist einfach die Einbindung dieses Teilbaums als virtuelles Verzeichnis im Webserver (z. B. NGENX Raspberry - WebServer)
Also schnell mal die Datei /etc/nginx/sites-available/default editiert
sudo nano /etc/nginx/sites-available/default
Und eine neue Location addiert
location /1wire { alias /sys/bus/w1/devices/; autoindex on; }
Dann noch ein Restart des Webservers
sudo /etc/init.d/nginx restart
Und schon kann man den Sensor per HTTP einfach abfragen und das Verzeichnis durchlaufen.
So kann nahezu jedes Programm per HTTP die Dateien herunter laden und den Inhalt auswerten. Dann bleibt es nur noch an PRTG und anderen Tools hängen, die Daten entsprechende zu parsen. Alternativ können Sie natürlich auch den Webserver mit einer PHP-Logik ausstatten und die Daten auch mehrerer Sensoren schön auszuwerten.
Anscheinend liest der RasPi Kernel die Werte beim Zugriff erst ein, was natürlich etwas länger dauert. Es könnte also sinnvoller sein, z.B. per Script die Werte zu kopieren und nur nach Ablauf einer Zeitspanne neuzuladen.
Weitere Links
- :1-Wire Bus
- EAC 1Wire/S0-Stick
-
1wire-mit-temperatursensor-ds18b20
http://www.raspiprojekt.de/anleitungen/schaltungen/9-1wire-mit-temperatursensor-ds18b20.html - Loading I2C, SPI and 1-Wire drivers on the
Raspberry Pi under Raspbian "wheezy"
http://nwazet.com/code/loading-i2c-spi-and-1-wire-drivers-on-the-raspberry-pi-under-raspbian-wheezy - Temperaturmessung mit One-Wire
http://raspberrycenter.de/forum/temperaturmessung-one-wire
http://waze.kabelinternetdns.de/
http://waze.kabelinternetdns.de/index.php/raspberry-pi/1-wire-bus/1-wire-bus-live - Installation von w1-gpio und w1-therm
http://waze.kabelinternetdns.de/index.php/raspberry-pi/1-wire-bus/1-wire-bus-aktivieren - Auslesen per PHP
http://waze.kabelinternetdns.de/index.php/raspberry-pi/1-wire-bus/1-wire-bus-auslesen - Measuring temperature with the Raspberry Pi
http://blog.a-netz.de/2013/02/measuring-temperature-with-the-raspberry-pi/ -
Raspberry Pi und 1-Wire
http://www.fhemwiki.de/wiki/Raspberry_Pi_und_1-Wire -
Adafruit's Raspberry Pi
Lesson 11. DS18B20 Temperature Sensing http://learn.adafruit.com/adafruits-raspberry-pi-lesson-11-ds18b20-temperature-sensing/overview -
FHEM Raspberry Pi und 1-Wire
http://www.fhemwiki.de/wiki/Raspberry_Pi_und_1-Wire