Raspberry Pi und 1-Wire: Unterschied zwischen den Versionen

Aus FHEMWiki
(Umstellungen von GPIO4 Modul auf RPI_1Wire)
 
(31 dazwischenliegende Versionen von 13 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
'''ACHTUNG, DIESE SEITE IST NOCH IN DER ENTWICKLUNG'''
Der [[:Kategorie:Raspberry Pi|Raspberry Pi]], abgekürzt RPi ist ein Einplatinencomputer der [http://www.raspberrypi.org/ Raspberry Pi Foundation], der unter Linux läuft und über eine Vielzahl von Anschlüssen verfügt.
Der [[:Kategorie:Raspberry Pi|Raspberry Pi]], abgekürzt RPi ist ein Einplatinencomputer der [http://www.raspberrypi.org/ Raspberry Pi Foundation], der unter Linux läuft und über eine Vielzahl von Anschlüssen verfügt.


Zeile 16: Zeile 15:


=== RPI2-Modul ===
=== RPI2-Modul ===
Anschluss über ein RPI2-Modul des Herstellers [http://www.sheepwalkelectronics.co.uk/RPI2.shtml 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).
Anschluss über ein RPI2-Modul des Herstellers [http://www.sheepwalkelectronics.co.uk/product_info.php?products_id=30 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
Zur Ansteuerung ist auf dem RPi zunächst das Starten zweier Kernelmodule nötig, dazu als root ausführen


  <nowiki>modprobe i2c-bcm2708
  <nowiki>modprobe i2c-bcm2708
modprobe i2c-dev</nowiki>
modprobe i2c-dev</nowiki>
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
Der automatische Start dieser beiden Module kann in der Datei /etc/modules eingetragen werden.  
 
Zudem muss beim aktuellen Raspbian noch die Datei /boot/config.txt angepasst werden:
<nowiki>dtparam=i2c_arm=on</nowiki>
 
Die oben genannten Schritte können auch über (sudo) raspi-config durchgeführt werden. Damit wird sichergestellt, dass die für die jeweilige Kernelversion notwendigen Schritte durchgeführt werden ('8 Advanced Options' -> 'A7 I2C').
 
Bei Vorhandensein des Paketes i2c-tools wird dann die korrekte Erkennung des Adapters mit dem Befehl


  <nowiki>i2cdetect -y 1</nowiki>
  <nowiki>i2cdetect -y 1</nowiki>
Zeile 28: Zeile 34:


=== GPIO4-Port ===
=== GPIO4-Port ===
Anschluss direkt am GPIO-Port des RPi
1-wire-Komponenten können direkt an den GPIO-Port des RPi angeschlossen und in FHEM konfiguriert werden.
 
==== Software-Installation ====
Die Software-Installation des GPIO im RPi erfolgt je nach Kernelversion unterschiedlich:
 
===== vor 2015 bzw. Kernelversion 3.18.3 =====
Zur Ansteuerung ist auf dem RPi zunächst das Starten zweier Kernelmodule nötig, dazu als root ausführen
 
<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/'' für jeden Sensor ein Unterverzeichnis mit seiner Kennung, 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:
 
<nowiki>
# /etc/modules
w1-gpio pullup=1
w1-therm </nowiki>
===== ab 2015 bzw. Kernelversion 3.18.3 =====
Da sich mit Kernelversion 3.18.3 die Handhabung der Module geändert hat (vgl. [[#1-wire am GPIO4-Port funktioniert nicht mehr nach Systemupdate]] - die Datei <code>/etc/modules</code> wird im Prinzip garnicht mehr benötigt; Details s. [[#Links]]). Somit ist hier eine andere (einfachere) Konfiguration nötig:
* Am besten erst einmal ein ordentliches System-Update durchführen:
<pre>
sudo apt-get update
sudo apt-get dist-upgrade -f
sudo rpi-update
sudo reboot
</pre>
* Kernelversion kontrollieren (muss jetzt mind. v3.18.3 sein):
<pre>
uname -r
</pre>
* Dann fügt man den folgende Zeile in <code>/boot/config.txt</code> ein:
<pre>
# activating 1-wire with pullup
dtoverlay=w1-gpio-pullup
</pre>Alternativ kann dies auch über das tool "raspi-config" unter "Interface options" aktiviert werden.
* Und startet das System neu
<pre>
sudo reboot
</pre>
 
Zusätzlich kann man gleich eine '''Debugging-Funktion''' aktivieren:
* Dazu fügt man den folgende Zeile in <code>/boot/config.txt</code> ein:
<pre>
# activating device tree debugging (use: sudo vcdbg log msg)
dtdebug=on
</pre>
* Abrufen kann man die Debug-Informationen dann mit:
<pre>
sudo vcdbg log msg
</pre>
 
==== Elektrische Installation ====
Eine gute Einführung zum Thema geben die Links von RaspiProjekt.de (s. [[#Links]]).
 
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)
*Außerdem 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 nötig, weil die GPIO-Ports des RPi nur 3,3 V vertragen und durch höhere Spannungen zerstört werden. Als Alternative kann man den 1-Wire Bus auch 5V (Pin 2) anschließen, dann '''muss''' aber zwingend das Signal der 1-Wire Datenleitung durch einen Spannungsteiler (z.B. 10 kOhm und 6.8 kOhm) auf 3,3 V begrenzt werden. Besser man verwendet einen aktiven Pegelwandler der sich mit einem einfachen MOS-FET realisieren lässt : [[1-Wire Pegelwandler]]
 
==== Konfiguration von 1-wire-Komponenten am GPIO ====
Für die Einbindung in FHEM steht das Modul RPI_1Wire zur Verfügung, welches seit 10/2021 das seit längerem nicht mehr unterstütze Modul "GPIO4" ersetzt.
 
Details zur Konfiguration dieses Moduls finden sich auf der seperaten [[RPI 1Wire|Wiki Seite]]. Das Modul ist grundsätzlich kompatibel zum alten Modul und kann somit einfach ersetzt werden. Hinweise zum Umstieg finden sich ebenfalls auf Wiki Seite von [[RPI_1Wire]].
 
==== Betrieb eines weiteren 1-Wire Bus ====
Grundsätzlich ist der 1-Wire Bus nicht auf GPIO4 beschränkt, sondern es können weitere 1-Wire Busse an anderen GPIOs betrieben werden. Dazu legt man analog ein dtoverlay in der /boot/config.txt an, z.B.:<pre>
dtoverlay=w1-gpio,gpiopin=18
</pre>Dies defininiert (nach reboot) einen 1-Wire Bus an der GPIO mit der BCM Nummer 18. Bitte beachten das für den Anschluß die selben Vorraussetzungen gelten wie für GPIO4 (Pullup Widerstand etc.).
 
Das Modul [[RPI_1Wire]] unterstützt auch diese Variante.


=== UART-Schnittstelle ===
=== UART-Schnittstelle ===
Der RPi verfügt auch über eine UART-Schnittstelle, an diese kann direkt ein Serielles 1-Wire Interface angeschlossen werden (IN VORBEREITUNG)
Der RPi verfügt auch über eine UART-Schnittstelle, an diese kann direkt ein Serielles 1-Wire Interface angeschlossen werden (IN VORBEREITUNG)
{{Hinweis|Die Vorbereitung der UART-Schnittstelle ist in [[Raspberry Pi]] beschrieben. An dieser Stelle sollten auch zukünftig nur Besonderheiten und Abweichungen stehen!}}


== Software ==
== Software ==
Die Ansteuerung des 1-Wire Bus auf dem RPi kann durch unterschiedliche Software-Systeme erfolgen. Verbreitet mit FHEM sind
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.
* '''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"&gt;OWFS erfordert. OWFS startet einen speziellen Server, der die Kommunikation mit der Hardware übernimmt und die Daten dann an '''OWServer''' weiterleitet. Zu OWServer passt ein generisches Frontendmodul OWDevice, siehe hierzu
* '''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 Installation bzw Kompilierung vom OWServer auf dem Rasperry ist unter [[OWServer & OWDevice#owfs Pakete installieren|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.
Nachfolgend ist die Kompatibilität dieser Softwaresysteme mit den einzelnen Hardware-Möglichkeiten aufgeführt.


{| class="wikitable"  
{| class="wikitable"  
!  Anschluss  
!  Anschluss  
!  Gerät  
!  Gerät  
Zeile 51: Zeile 130:
|  DS9490 Adapter  
|  DS9490 Adapter  
|  
|  
| <b>funktioniert nicht</b>, weil der enthaltene Chip DS2490 derzeit nur über <br /><i>libusb</i> ansteuerbar ist. Abhilfe ist in Arbeit.  
| <b>funktioniert</b> (DS9490R) auf dem Raspi mit OWServer ({{Link2Forum|Topic=59900}})
<b>funktioniert nicht</b> mit OWX, weil der enthaltene Chip DS2490 derzeit nur über <br /><i>libusb</i> ansteuerbar ist. Abhilfe ist in Arbeit.  
| &#160;??
| &#160;??
|-  
|-  
|  Direkt an USB  
|  Direkt an USB  
|  USB9097 Adapter
|  USB9097 Adapter
| rowspan="8" |  Alle von OWX unterstützten Devices, d.h. <br /><p>DS18x20, DS1822 Temperatursensor <br /> DS2406, DS2408, DS2413 Schalter <br /> DS2423 Zähler <br />DS2438 Multisensor <br /> DS2450 4 Kanal ADC <br />LCD-Controller von  [http://www.fuchs-shop.com/de/shop/6/1/13372316/ Louis Swart]<br />Alle anderen 1-Wire Devices: Nur ID
| rowspan="8" |  Alle von OWX unterstützten Devices, d.h. <br /><p>DS18x20, DS1822 Temperatursensor <br /> DS2406, DS2408, DS2413 Schalter <br /> DS2423 Zähler <br />DS2438 Multisensor <br /> DS2450 4 Kanal ADC <br />LCD-Controller von  [http://www.fuchs-shop.com/de/shop/6/1/13372316/ Louis Swart]<br />Alle anderen 1-Wire Devices: Nur ID
</p>
</p>
| <b>funktioniert</b> auf der FB7390, das Kernelmodul <i>ch341.ko</i> findet man [https://sites.google.com/site/fhemarduino/file-cabinet/ch341.ko?attredirects=0&amp;d=1 hier]
| <b>funktioniert</b> auf der FB7390, das Kernelmodul <i>ch341.ko</i> findet man [https://sites.google.com/site/fhemarduino/file-cabinet/ch341.ko?attredirects=0&amp;d=1 hier]
Zeile 88: Zeile 168:
|  Direct an USB
|  Direct an USB
|  Arduino mit USB-Anschluss (UNO, Mega, Nano...)
|  Arduino mit USB-Anschluss (UNO, Mega, Nano...)
| rowspan="2"| 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.
| rowspan="2" | 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.
| rowspan="2"| Ja, 3,3V oder 5V je nach Arduino-modell.
| rowspan="2" | Ja, 3,3V oder 5V je nach Arduino-modell.
|-
|-
|  Über Netzwerk
|  Über Netzwerk
Zeile 107: Zeile 187:
|}
|}


= Links =
== Problembehebung ==
* [http://neubert-volmar.de/Hausautomation/RaspberryPi/index.html Neubert &amp; Vollmar EDV-Dienstleistungen]
=== 1-wire am GPIO4-Port funktioniert nicht mehr nach Systemupdate ===
'''Problem'''
 
Es kann passieren, dass nach einem Systemupdate (apt-get update oder apt-get dist-upgrade) die 1-wire-Geräte am GPIO4-Port plötzlich nicht mehr funktionieren. Dies hat dann aller Wahrscheinlichkeit die Ursache, dass ein Kernel-Upgrade von "vor 3.18.3" auf "danach" gemacht wurde. Mit Kernelversion 3.18.3 ist die Handhabung der Kernelmodule umgestellt worden (vgl. auch [[#GPIO4-Port]]):
* vor v3.18.3: hier wurden Module in die /etc/modules eingetragen. Dieses Vorgehen ist fast überall beschrieben.
* ab v3.18.3: jetzt wurde das sog. Device-Tree-Verfahren eingeführt, das anders arbeitet - und erst einmal die alte Konfiguration blockiert (!). (Details s. unter [[#Links]])
Auch ein Aufruf von <code>sudo rpi-update</code> hilft allein nicht weiter (ist aber immer sinnvoll).
 
'''Lösung'''
 
Die "korrekte" Lösung wäre die Umstellung auf Device-Tree-Konfiguration:
* Dazu fügt man die folgende Zeile in <code>/boot/config.txt</code> ein:
<pre>
# activating 1-wire with pullup
dtoverlay=w1-gpio-pullup
</pre>
* Entfernt die Module <code>w1-gpio</code> und <code>w1-therm</code> aus das <code>/etc/modules</code> (oder kommentiert sie aus)
* Und startet das System neu
 
Zusätzlich kann man gleich eine '''Debugging-Funktion''' aktivieren:
* Dazu fügt man die folgende Zeile in <code>/boot/config.txt</code> ein:
<pre>
# activating device tree debugging (use: sudo vcdbg log msg)
dtdebug=on
</pre>
* Abrufen kann man die Debug-Informationen dann mit:
<pre>
sudo vcdbg log msg
</pre>
 
'''Alternativer Workaround'''
 
Alternativ zur "korrekten" Lösung kann man die Device-Tree-Funktionalität auch einfach deaktivieren - dann bleibt alles wie bisher.
 
* Dazu fügt man den folgende Zeile in <code>/boot/config.txt</code> ein:
<pre>
# disabling device tree functionality:
device_tree=
</pre>
* Und startet das System neu.
 
== Links ==
Zu GPIO:
* [http://neubert-volmar.de/Hausautomation/RaspberryPi/index.html Beispiel zur Nutzung von 1-wire am GPIO-Port & eines Eigenbau-Adapters]
* [https://raspiprojekt.de/anleitungen/hardware/147-gpio-grundlagen.html RaspiProjekt.de - GPIO-Grundlagen]
* [http://www.raspberrypi.org/documentation/usage/gpio/ RaspberryPi.org - GPIO-Grundlagen]
* [http://pi.gadgetoid.com/pinout/pin7_gpio4 Pin-Belegungen des Raspi]
* [https://www.raspiprojekt.de/anleitungen/schaltungen/9-1wire-mit-temperatursensor-ds18b20.html RaspiProjekt.de - Anbindung von Temperatursensoren]
 
Zu Device-Tree:
* [https://www.raspiprojekt.de/21-blog/153-neuer-kernel-neues-glueck.html RaspiProjekt.de - Neuer Kernel neues Glück]
* [http://www.raspberrypi.org/documentation/configuration/device-tree.md RaspberryPi.org - Device Trees, Overlays and Parameters]
* [https://raspiprojekt.de/anleitungen/hardware/154-geraetetreiber-und-device-tree.html RaspiProjekt.de - Gerätetreiber und Device Tree]
* [https://github.com/raspberrypi/linux/tree/rpi-3.18.y/arch/arm/boot/dts Liste aller verfügbaren Device-Tree Module]
 
[[Kategorie:Raspberry Pi]]
[[Kategorie:Raspberry Pi]]
[[Kategorie:1-Wire]]
[[Kategorie:1-Wire]]
[[Kategorie:Interface]]
[[Kategorie:Interfaces]]

Aktuelle Version vom 1. November 2021, 12:55 Uhr

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.

Zudem muss beim aktuellen Raspbian noch die Datei /boot/config.txt angepasst werden:

dtparam=i2c_arm=on

Die oben genannten Schritte können auch über (sudo) raspi-config durchgeführt werden. Damit wird sichergestellt, dass die für die jeweilige Kernelversion notwendigen Schritte durchgeführt werden ('8 Advanced Options' -> 'A7 I2C').

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

1-wire-Komponenten können direkt an den GPIO-Port des RPi angeschlossen und in FHEM konfiguriert werden.

Software-Installation

Die Software-Installation des GPIO im RPi erfolgt je nach Kernelversion unterschiedlich:

vor 2015 bzw. Kernelversion 3.18.3

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/ für jeden Sensor ein Unterverzeichnis mit seiner Kennung, 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:

 # /etc/modules
 w1-gpio pullup=1
 w1-therm 
ab 2015 bzw. Kernelversion 3.18.3

Da sich mit Kernelversion 3.18.3 die Handhabung der Module geändert hat (vgl. #1-wire am GPIO4-Port funktioniert nicht mehr nach Systemupdate - die Datei /etc/modules wird im Prinzip garnicht mehr benötigt; Details s. #Links). Somit ist hier eine andere (einfachere) Konfiguration nötig:

  • Am besten erst einmal ein ordentliches System-Update durchführen:
sudo apt-get update
sudo apt-get dist-upgrade -f
sudo rpi-update
sudo reboot
  • Kernelversion kontrollieren (muss jetzt mind. v3.18.3 sein):
uname -r
  • Dann fügt man den folgende Zeile in /boot/config.txt ein:
# activating 1-wire with pullup
dtoverlay=w1-gpio-pullup

Alternativ kann dies auch über das tool "raspi-config" unter "Interface options" aktiviert werden.

  • Und startet das System neu
sudo reboot

Zusätzlich kann man gleich eine Debugging-Funktion aktivieren:

  • Dazu fügt man den folgende Zeile in /boot/config.txt ein:
# activating device tree debugging (use: sudo vcdbg log msg)
dtdebug=on
  • Abrufen kann man die Debug-Informationen dann mit:
sudo vcdbg log msg

Elektrische Installation

Eine gute Einführung zum Thema geben die Links von RaspiProjekt.de (s. #Links).

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)
  • Außerdem 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 nötig, weil die GPIO-Ports des RPi nur 3,3 V vertragen und durch höhere Spannungen zerstört werden. Als Alternative kann man den 1-Wire Bus auch 5V (Pin 2) anschließen, dann muss aber zwingend das Signal der 1-Wire Datenleitung durch einen Spannungsteiler (z.B. 10 kOhm und 6.8 kOhm) auf 3,3 V begrenzt werden. Besser man verwendet einen aktiven Pegelwandler der sich mit einem einfachen MOS-FET realisieren lässt : 1-Wire Pegelwandler

Konfiguration von 1-wire-Komponenten am GPIO

Für die Einbindung in FHEM steht das Modul RPI_1Wire zur Verfügung, welches seit 10/2021 das seit längerem nicht mehr unterstütze Modul "GPIO4" ersetzt.

Details zur Konfiguration dieses Moduls finden sich auf der seperaten Wiki Seite. Das Modul ist grundsätzlich kompatibel zum alten Modul und kann somit einfach ersetzt werden. Hinweise zum Umstieg finden sich ebenfalls auf Wiki Seite von RPI_1Wire.

Betrieb eines weiteren 1-Wire Bus

Grundsätzlich ist der 1-Wire Bus nicht auf GPIO4 beschränkt, sondern es können weitere 1-Wire Busse an anderen GPIOs betrieben werden. Dazu legt man analog ein dtoverlay in der /boot/config.txt an, z.B.:

dtoverlay=w1-gpio,gpiopin=18

Dies defininiert (nach reboot) einen 1-Wire Bus an der GPIO mit der BCM Nummer 18. Bitte beachten das für den Anschluß die selben Vorraussetzungen gelten wie für GPIO4 (Pullup Widerstand etc.).

Das Modul RPI_1Wire unterstützt auch diese Variante.

UART-Schnittstelle

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

Info blue.png
Die Vorbereitung der UART-Schnittstelle ist in Raspberry Pi beschrieben. An dieser Stelle sollten auch zukünftig nur Besonderheiten und Abweichungen stehen!


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 OWFS erfordert. OWFS startet einen speziellen Server, der die Kommunikation mit der Hardware übernimmt und die Daten dann an OWServer weiterleitet. Die Installation bzw Kompilierung vom OWServer auf dem Rasperry ist unter 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 (DS9490R) auf dem Raspi mit OWServer (Thema)

funktioniert nicht mit OWX, 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
 ??

Problembehebung

1-wire am GPIO4-Port funktioniert nicht mehr nach Systemupdate

Problem

Es kann passieren, dass nach einem Systemupdate (apt-get update oder apt-get dist-upgrade) die 1-wire-Geräte am GPIO4-Port plötzlich nicht mehr funktionieren. Dies hat dann aller Wahrscheinlichkeit die Ursache, dass ein Kernel-Upgrade von "vor 3.18.3" auf "danach" gemacht wurde. Mit Kernelversion 3.18.3 ist die Handhabung der Kernelmodule umgestellt worden (vgl. auch #GPIO4-Port):

  • vor v3.18.3: hier wurden Module in die /etc/modules eingetragen. Dieses Vorgehen ist fast überall beschrieben.
  • ab v3.18.3: jetzt wurde das sog. Device-Tree-Verfahren eingeführt, das anders arbeitet - und erst einmal die alte Konfiguration blockiert (!). (Details s. unter #Links)

Auch ein Aufruf von sudo rpi-update hilft allein nicht weiter (ist aber immer sinnvoll).

Lösung

Die "korrekte" Lösung wäre die Umstellung auf Device-Tree-Konfiguration:

  • Dazu fügt man die folgende Zeile in /boot/config.txt ein:
# activating 1-wire with pullup
dtoverlay=w1-gpio-pullup
  • Entfernt die Module w1-gpio und w1-therm aus das /etc/modules (oder kommentiert sie aus)
  • Und startet das System neu

Zusätzlich kann man gleich eine Debugging-Funktion aktivieren:

  • Dazu fügt man die folgende Zeile in /boot/config.txt ein:
# activating device tree debugging (use: sudo vcdbg log msg)
dtdebug=on
  • Abrufen kann man die Debug-Informationen dann mit:
sudo vcdbg log msg

Alternativer Workaround

Alternativ zur "korrekten" Lösung kann man die Device-Tree-Funktionalität auch einfach deaktivieren - dann bleibt alles wie bisher.

  • Dazu fügt man den folgende Zeile in /boot/config.txt ein:
# disabling device tree functionality:
device_tree=
  • Und startet das System neu.

Links

Zu GPIO:

Zu Device-Tree: