Raspberry Pi und 1-Wire: Unterschied zwischen den Versionen

Aus FHEMWiki
Keine Bearbeitungszusammenfassung
Zeile 28: Zeile 28:


=== GPIO4-Port ===
=== GPIO4-Port ===
Die einfachste Möglichkeit zur Nutzung von 1-Wire-Sensoren ist der Anschluss direkt am GPIO-Port des RPi.
Anschluss direkt am GPIO-Port des RPi.


Dazu wird im ersten Schritt der One-Wire-Sensor mit dem GPIO04 vom Pi verbunden.
Dazu wird im ersten Schritt der 1-Wire Bus (bzw. zum Test nur ein einzelner Sensor) mit dem GPIO-Port des RPi verbunden, und zwar
Das erfolgt am Beispiel eines DS18B20-Temperatursensors (läuft mit 3,3V) wie folgt:<BR>
*1-Wire GND an GND vom Pi (Pin 6)
-Sensor-GND an GND vom Pi (Pin6)<BR>
*1-Wire Datenleitung an GPIO04 (Pin 7)
-Sensor-Datenleitung (DQ) an GPIO04 (Pin7)<BR>
*1-Wire VDD an +3,3V vom Pi (Pin 1)
-Sensor-VDD an +3,3V vom Pi (Pin1)<BR>
*Ausserdem ist noch ein Pullup-Widerstand von z.B. 4,7kOhm zwischen Pin1 und Pin7 zu schalten.
Ausserdem ist noch ein sog. Pullup-Widerstand von z.B. 4,7kOhm zwischen Pin1 und Pin7 zu schalten.<BR>


Um den Sensor unter Raspbian zu aktivieren, sind die entsprechenden Module zu laden:<BR>
Obwohl die nominale Spannung für 1-Wire Devices 5V beträgt, ist hier die verringerte Spannung ntig,
"sudo modprobe w1-gpio pullup=1"<BR>
 
"sudo modprobe w1-therm"<BR>
Zur Ansteuerung ist auf dem RPi zunächst das Starten zweier Kernelmodule nötig, dazu als root ausführen
Waren die Schritte erfolgreich, gibt es jetzt im Verzeichnis "/sys/bus/w1/devices/" ein Unterverzeichnis mit der Kennung des Sensors, z.B. "28-000004e147d6". Die dort stehende Datei "w1_slave" enthält das Ergebnis der Datenübertragung vom Sensor. Um die Module dauerhaft zu laden, sind sie noch in die Datei "/etc/modules" einzutragen (z.B. über "sudo nano /etc/modules").
 
<nowiki>modprobe w1-gpio pullup=1</nowiki>
<nowiki>modprobe w1-therm</nowiki>
 
Waren die Schritte erfolgreich, gibt es jetzt im Verzeichnis ''/sys/bus/w1/devices/'' ein Unterverzeichnis mit der Kennung des Sensors, z.B. "28-000004e147d6". Die dort stehende Datei "w1_slave" enthält das Ergebnis der Datenübertragung vom Sensor. Um die Module dauerhaft zu laden, sind sie noch in die Datei "/etc/modules" einzutragen (z.B. über "sudo nano /etc/modules").


Um den One-Wire-Bus und den Sensor auch noch in FHEM einzubinden, nutzen wir das Modul 58_GPIO4.pm: Dieses wird mit dem folgenden Befehl kopiert:<BR>
Um den One-Wire-Bus und den Sensor auch noch in FHEM einzubinden, nutzen wir das Modul 58_GPIO4.pm: Dieses wird mit dem folgenden Befehl kopiert:<BR>

Version vom 23. Januar 2014, 09:53 Uhr

ACHTUNG, DIESE SEITE IST NOCH IN DER ENTWICKLUNG Der Raspberry Pi, abgekürzt RPi ist ein Einplatinencomputer der Raspberry Pi Foundation, der unter Linux läuft und über eine Vielzahl von Anschlüssen verfügt.

FHEM läuft auf allen Modell des Raspberry Pi. Während hier die Installation von FHEM beschrieben wird, soll sich diese Seite nur mit dem Anschluss von 1-Wire Devices an den RPi befassen.

Hardware

Bereits von der Hardware her bietet der RPi verschiedene Möglichkeiten zum Anschluss von 1-Wire-Devices

USB-Port

Über einen der USB-Ports des RPi mit entsprechendem Adapter. Hierbei sollte, wenn es sich nicht nur um wenige 1-Wire-Devices handelt, ein USB-Hub mit eigener Stromversorgung zwischengeschaltet werden. Mit USB-Extendern lässt sich dies bequem auch bis zu 20m entfernt vom RPi bewerkstelligen.

Alle bekannten USB/1-Wire Adapter arbeiten mit dem RPi. Allerdings ist es möglicherweise (nur, wenn Fehler auftreten !) nötig, dafür ein Kernel-Update durchzuführen, da in manchen älteren Versionen des Linux-Kernels für den RPi Fehler im USB-Stack enthalten sind.

COC-Modul

Anschluss über ein COC-Modul des Herstellers busware.de. Siehe hierzu im Detail COC und 1-wire].

RPI2-Modul

Anschluss über ein RPI2-Modul des Herstellers Sheepwalk Electronics. Dieses Modul wird direkt auf den internen I2C-Bus des RPi aufgesteckt. Im Kaufzustand bietet es für den 1-Wire-Bus sowohl eine RJ45-Buchse, als auch einen Schraubklemmenanschluss. Diese sind leider beide so hoch, dass das Modul nicht mehr in das RPi-Gehäuse passt. Hier kann aber leicht abgeholfen werden (to be continued).

Zur Ansteuerung ist auf dem RPi zunächst das Starten zweier Kernelmodule nötig, dazu als root ausführen

modprobe i2c-bcm2708
modprobe i2c-dev

Der automatische Start dieser beiden Module kann in der Datei /etc/modules eingetragen werden. Bei Vorhandensein des Paketes i2c-tools wird dann die korrekte Erkennung des Adapters mit dem Befehl

i2cdetect -y 1

überprüft, der 1-Wire-Busmaster DS2482-100 sollte als I2C-Device mit der ID 0x18 gefunden werden.

GPIO4-Port

Anschluss direkt am GPIO-Port des RPi.

Dazu wird im ersten Schritt der 1-Wire Bus (bzw. zum Test nur ein einzelner Sensor) mit dem GPIO-Port des RPi verbunden, und zwar

  • 1-Wire GND an GND vom Pi (Pin 6)
  • 1-Wire Datenleitung an GPIO04 (Pin 7)
  • 1-Wire VDD an +3,3V vom Pi (Pin 1)
  • Ausserdem ist noch ein Pullup-Widerstand von z.B. 4,7kOhm zwischen Pin1 und Pin7 zu schalten.

Obwohl die nominale Spannung für 1-Wire Devices 5V beträgt, ist hier die verringerte Spannung ntig,

Zur Ansteuerung ist auf dem RPi zunächst das Starten zweier Kernelmodule nötig, dazu als root ausführen

modprobe w1-gpio pullup=1 modprobe w1-therm

Waren die Schritte erfolgreich, gibt es jetzt im Verzeichnis /sys/bus/w1/devices/ ein Unterverzeichnis mit der Kennung des Sensors, z.B. "28-000004e147d6". Die dort stehende Datei "w1_slave" enthält das Ergebnis der Datenübertragung vom Sensor. Um die Module dauerhaft zu laden, sind sie noch in die Datei "/etc/modules" einzutragen (z.B. über "sudo nano /etc/modules").

Um den One-Wire-Bus und den Sensor auch noch in FHEM einzubinden, nutzen wir das Modul 58_GPIO4.pm: Dieses wird mit dem folgenden Befehl kopiert:
"sudo cp /opt/fhem/contrib/58_GPIO4.pm /opt/fhem/FHEM/"

Nach Ergänzen der Datei "fhem.cfg" um die folgende Zeile
"define RPi GPIO4 BUSMASTER"
und abschliessendem "shutdown restart" in FHEM wird der Sensor automatisch in FHEM erkannt und eingebunden.

Siehe auch den entsprechenden FHEM-Forum-Beitrag von luckygray: [1]

UART-Schnittstelle

Der RPi verfügt auch über eine UART-Schnittstelle, an diese kann direkt ein Serielles 1-Wire Interface angeschlossen werden (IN VORBEREITUNG)

Software

Die Ansteuerung des 1-Wire Bus auf dem RPi kann durch unterschiedliche Software-Systeme erfolgen. Verbreitet mit FHEM sind

  • OWX sowie die zugehörigen Frontendmodule OWAD, OWCOUNT, OWID, OWLCD, OWMULTI, OWSWITCH und OWTHERM. Das OWX-Modul operiert direkt auf der jeweiligen Hardware (USB bzw. Seriell) oder liest die Daten über Netzwerk (COC/CUNO/Arduino) und reicht sie an spezialisierte Frontendmodule weiter.
  • OWServer, ein Modul, welches die vorhergehende Installation des Softwarepaketes [http://www.owfs.org">OWFS erfordert. OWFS startet einen speziellen Server, der die Kommunikation mit der Hardware übernimmt und die Daten dann an OWServer weiterleitet. Die Installtion bzw Kompilierung vom OWServer auf dem Rasperry ist OWServer_&_OWDevice#owfs_Pakete_installieren beschrieben. Zu OWServer passt ein generisches Frontendmodul OWDevice, siehe OWServer_&_OWDevice.

Nachfolgend ist die Kompatibilität dieser Softwaresysteme mit den einzelnen Hardware-Möglichkeiten aufgeführt.

Anschluss Gerät Unterstützte 1-Wire Devices Besonderheit Stromversorgung 1-Wire Bus
Direkt an USB DS9490 Adapter funktioniert nicht, weil der enthaltene Chip DS2490 derzeit nur über
libusb ansteuerbar ist. Abhilfe ist in Arbeit.
 ??
Direkt an USB USB9097 Adapter Alle von OWX unterstützten Devices, d.h.

DS18x20, DS1822 Temperatursensor
DS2406, DS2408, DS2413 Schalter
DS2423 Zähler
DS2438 Multisensor
DS2450 4 Kanal ADC
LCD-Controller von Louis Swart
Alle anderen 1-Wire Devices: Nur ID

funktioniert auf der FB7390, das Kernelmodul ch341.ko findet man hier Ja, 5V
Direkt an USB Eigenbau,
mit FT232RL und DS2480 Bus-Master
funktioniert, Fertiggeräte eventuell bei EBay erhältlich,
siehe auch Interfaces für 1-Wire
Ja, 5V
Direkt an USB LinkUSBi Adapter funktioniert, verwendet das FTDI Kernelmodul.
Achtung: Es kann zu Timing-Problemem kommen.
Erhältlich z.B. hier
Ja, 5V an Pin2 (limited to 50mA)
Über USB-zu-Seriell-Konverter
9- oder 25-polig
mit Winchiphead CH341-Chip
Konverter + DS9097U-(009/S09, E25) funktioniert auf der FB7390, das Kernelmodul ch341.ko findet man hier Nur bei den 25-poligen Modellen als Standard,
bei den 9-poligen Modellen
externe Versorgung oder Modifikation des DS9097 nötig
Über USB-zu-Seriell-Konverter
9- oder 25-polig
mit Prolific PL2303-Chip
Konverter + DS9097U-(009/S09, E25) funktioniert auf der FB7390, das Kernelmodul pl2303.ko findet man hier Nur bei den 25-poligen Modellen als Standard,
bei den 9-poligen Modellen
externe Versorgung oder Modifikation des DS9097 nötig
Über USB-zu-Seriell-Konverter
9- oder 25-polig
mit FTDI RL232-Chip
Konverter + DS9097U-(009/S09, E25) funktioniert auf der FB7390, das Kernelmodul ftdi_sio.ko ist auf der
FritzBox vorhanden
Nur bei den 25-poligen Modellen als Standard,
bei den 9-poligen Modellen
externe Versorgung oder Modifikation des DS9097 nötig
Direct an USB Arduino mit USB-Anschluss (UNO, Mega, Nano...) 1-Wire Bus direkt am Arduino (reine Softwarelösung) oder (stabiler im Betrieb) in Verbindung mit DS2482-Busmaster (am I2C des Arduinos). Mit DS2482-100 ist 1 1-Wire-Bus (optional mit Strong-pullup über externen MosFET), mit DS2482-800 sind 8 busse (nur mit internem Strong-pullup) an 1 Arduino gleichzeitig möglich. Ja, 3,3V oder 5V je nach Arduino-modell.
Über Netzwerk Arduino mit Ethernetshield, Arduino mit ENC28J60-shield, Arduino Ethernet
Über Netzwerk und CUNO CUNO Mit OWX: Alle von OWX unterstützten Devices
Ohne OWX: Nur DS18x20, DS1822 Temperatursensor
funktioniert mit gewissen Einschränkungen, siehe CUNO und 1-wire Ja, aber nur 3,3 V.
Kann allerdings zu 5V modifiziert werden
Über Netzwerk und
Ethersex-Gerät
AVR-Net-IO oder ähnliches DS18x20, DS1822 Temperatursensor
DS2502 EEPROM
DS2450 4 Kanal ADC
funktioniert, siehe FHEM und 1-Wireund AVR-NET-IO
 ??

Links