Raspberry Pi 3: GPIO-Port Module und Bluetooth: Unterschied zwischen den Versionen

Aus FHEMWiki
K (Link korrigiert)
 
(6 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
__NOTOC__
__NOTOC__
{{Hinweis|Die Vorbereitung der UART-Schnittstelle ist auch in [[Raspberry Pi]] beschrieben. Hier sollten zukünftig nur Besonderheiten und Abweichungen stehen!}}
Der Raspberry Pi 3 nutzt für den GPIO-Port standardmäßig den UART1 (ttyS0), während die vorherigen Raspberry Pi-Modelle noch den UART0 dafür verwendeten. Der UART0 (ttyAMA0) wird beim Pi 3 durch das neu eingeführte Bluetooth-Modul softwaremäßig belegt. Der UART1 des Pi 3 mit Anhängigkeiten von CPU-Frequenz, CPU-Last, Temperatur und anderem ist für den Betrieb von Aufsteckmodulen jedoch häufig nicht stabil genug. Der Pi 3 muss daher zur Verwendung von einigen Aufsteckmodulen für den GPIO-Port, die über GPIO 14/15 kommunizieren so umkonfiguriert werden, dass der GPIO-Port wie bei den Vorgängermodellen wieder den UART0 einsetzt.  
Der Raspberry Pi 3 nutzt für den GPIO-Port standardmäßig den UART1 (ttyS0), während die vorherigen Raspberry Pi-Modelle noch den UART0 dafür verwendeten. Der UART0 (ttyAMA0) wird beim Pi 3 durch das neu eingeführte Bluetooth-Modul softwaremäßig belegt. Der UART1 des Pi 3 mit Anhängigkeiten von CPU-Frequenz, CPU-Last, Temperatur und anderem ist für den Betrieb von Aufsteckmodulen jedoch häufig nicht stabil genug. Der Pi 3 muss daher zur Verwendung von einigen Aufsteckmodulen für den GPIO-Port, die über GPIO 14/15 kommunizieren so umkonfiguriert werden, dass der GPIO-Port wie bei den Vorgängermodellen wieder den UART0 einsetzt.  


Zeile 5: Zeile 6:
* EnOceanPi ([[:Kategorie:EnOcean Components|EnOcean]]-Gateway)
* EnOceanPi ([[:Kategorie:EnOcean Components|EnOcean]]-Gateway)
* Razberry ([[:Kategorie:Z-Wave Components|ZWave]]-Gateway)
* Razberry ([[:Kategorie:Z-Wave Components|ZWave]]-Gateway)
* RaspBee ([[:Kategorie:ZigBee Components|ZigBee]]-Gateway)
* RaspBee ([[:Kategorie:ZigBee|ZigBee]]-Gateway)


Immer wieder angeführte und einfach umzusetzende Lösung ist Bluetooth zu deaktivieren und dann den UART0 (ttyAMA0) auf den GPIO-Port umzumappen (siehe beispielsweise {{Link2Forum|Topic=52161|Message=439757}}). Damit kann man aber das im Pi 3 eingebaute Bluetooth-Modul nicht mehr nutzen. Ein Vorteil des Pi 3 zu den Vorgängermodellen geht somit verloren.
Immer wieder angeführte und einfach umzusetzende Lösung ist Bluetooth zu deaktivieren und dann den UART0 (ttyAMA0) auf den GPIO-Port umzumappen (siehe beispielsweise {{Link2Forum|Topic=52161|Message=439757}}). Damit kann man aber das im Pi 3 eingebaute Bluetooth-Modul nicht mehr nutzen. Ein Vorteil des Pi 3 zu den Vorgängermodellen geht somit verloren.
Zeile 32: Zeile 33:
  dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
  dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
und editieren. Der Eintrag <code>console=serial0,115200</code> sollte wie schon beim RPi2 entfernt werden, wenn es gesetzt ist, damit die UART-Schnittstelle von Zusatzmodulen wie EnOceanPi verwendet werden kann. Der genaue Inhalt der Zeile kann sich je nach System unterscheiden.
und editieren. Der Eintrag <code>console=serial0,115200</code> sollte wie schon beim RPi2 entfernt werden, wenn es gesetzt ist, damit die UART-Schnittstelle von Zusatzmodulen wie EnOceanPi verwendet werden kann. Der genaue Inhalt der Zeile kann sich je nach System unterscheiden.
Hinweis: Ändert man nachträglich noch einmal etwas über "raspi-config", so kann es vorkommen, dass <code>console=serial0,115200</code> wieder in der Zeile ergänzt wird.


=== Schritt 3: ===
=== Schritt 3: ===
Zeile 47: Zeile 50:
sudo reboot
sudo reboot
</syntaxhighlight>
</syntaxhighlight>
Ein rpi-update soll nur gemacht werden, wenn es unbedingt erforderlich ist. (Quelle: [https://www.elektronik-kompendium.de/sites/raspberry-pi/2006061.htm])


=== Schritt 5: ===
=== Schritt 5: ===
Zeile 70: Zeile 74:


=== Schritt 6: ===
=== Schritt 6: ===
Der Bluetooth UART-Service muss auf ttyS0 gelegt werden. Dies sollte nach Mai 2016 nicht mehr notwendig sein! Inhalt der Datei hciuart.service genau vergleichen!
Dieser Schritt ist nach Mai 2016 nicht mehr notwendig.
 
Der Bluetooth UART-Service muss auf ttyS0 gelegt werden.  


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
Zeile 94: Zeile 100:


=== Schritt 7: ===
=== Schritt 7: ===
Dieser Schritt ist fragwürdig und ab September 2017 durch Anpassungen in der fhem.pl nicht mehr notwendig.
Auf Grund eines Timing-Problems in der Boot-Phase zwischen Bluetooth und dem FHEM Start muss der FHEM-Service 10 Sekunden verzögert werden.
Auf Grund eines Timing-Problems in der Boot-Phase zwischen Bluetooth und dem FHEM Start muss der FHEM-Service 10 Sekunden verzögert werden.
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
Zeile 112: Zeile 121:
</syntaxhighlight>
</syntaxhighlight>


=== Schritt 9: (optional) ===
Sollte es immer noch nicht möglich sein, auf die Schnittstelle /dev/ttyAMA0 zuzugreifen,
so sollte man die rechte überprüfen:
<syntaxhighlight lang="bash">
ls -lha /dev/ttyAMA0
</syntaxhighlight>
Hierbei muss sichergestellt sein, dass der User "fhem" zur angezeigten Gruppe (z.B. dialout) gehört.
Ist dies nicht der Fall, dann den User "fhem" hinzufügen
<syntaxhighlight lang="bash">
usermod -a -G dialout fhem
</syntaxhighlight>
Quelle: [https://forum.fhem.de/index.php/topic,50651.msg576004.html#msg576004]
=== Schritt 10: (optional) ===
Den Dienst serial-getty deaktivieren
<syntaxhighlight lang="bash">
systemctl disable serial-getty@ttyAMA0.service
</syntaxhighlight>
Quelle: [https://forum.fhem.de/index.php/topic,50651.msg576004.html#msg576004]
[[Kategorie:HOWTOS]]
[[Kategorie:HOWTOS]]
[[Kategorie:Raspberry Pi]]
[[Kategorie:Raspberry Pi]]
[[Kategorie:Bluetooth]]

Aktuelle Version vom 7. Mai 2019, 11:15 Uhr


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


Der Raspberry Pi 3 nutzt für den GPIO-Port standardmäßig den UART1 (ttyS0), während die vorherigen Raspberry Pi-Modelle noch den UART0 dafür verwendeten. Der UART0 (ttyAMA0) wird beim Pi 3 durch das neu eingeführte Bluetooth-Modul softwaremäßig belegt. Der UART1 des Pi 3 mit Anhängigkeiten von CPU-Frequenz, CPU-Last, Temperatur und anderem ist für den Betrieb von Aufsteckmodulen jedoch häufig nicht stabil genug. Der Pi 3 muss daher zur Verwendung von einigen Aufsteckmodulen für den GPIO-Port, die über GPIO 14/15 kommunizieren so umkonfiguriert werden, dass der GPIO-Port wie bei den Vorgängermodellen wieder den UART0 einsetzt.

Unter anderem folgende Aufsteckmodule setzen für einen stabilen Betrieb die Nutzung des UART0 für den GPIO-Port voraus:

Immer wieder angeführte und einfach umzusetzende Lösung ist Bluetooth zu deaktivieren und dann den UART0 (ttyAMA0) auf den GPIO-Port umzumappen (siehe beispielsweise Beitrag). Damit kann man aber das im Pi 3 eingebaute Bluetooth-Modul nicht mehr nutzen. Ein Vorteil des Pi 3 zu den Vorgängermodellen geht somit verloren.

robert.heinze hat aufbauend auf seinen Erkenntnissen in diesem Thema nachfolgendes HowTo zur Verfügung gestellt, nach dessen Abarbeitung eine parallele Verwendung von Aufsteckmodulen für den GPIO-Port und Bluetooth in FHEM mit dem Pi 3 möglich ist.

HowTo

Standardmäßig belegt der Raspberry 3 den Software-UART-ttyAMA0 mit Bluetooth. Da wir diese Schnittstelle aber für serielle Module wie z.B. hier den EnOceanPi verwenden, legen wir den integrierten Bluetooth-Empfänger des Raspberry Pi 3 auf ttyS0 (UART1 - „mini UART“) um den Hardware-UART auf die TX/RX-Pins zu legen (UART0 - „full UART“). Hierfür sind einige Maßnahmen vorzunehmen, die nachfolgend schrittweise beschrieben werden.

Schritt 1:

Im ersten Schritt gilt es den Raspberry Pi 3 zu konfigurieren:

sudo raspi-config
A7 Serial auf enabled setzen

Schritt 2:

Zur Bearbeitung von Textdateien wird hier und bei allen folgenden Schritten der Editor nano genutzt. Selbstverständlich kann auch auf einen anderen Editor zurückgegriffen werden.

sudo nano /boot/cmdline.txt

Diese Zeile suchen:

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

und editieren. Der Eintrag console=serial0,115200 sollte wie schon beim RPi2 entfernt werden, wenn es gesetzt ist, damit die UART-Schnittstelle von Zusatzmodulen wie EnOceanPi verwendet werden kann. Der genaue Inhalt der Zeile kann sich je nach System unterscheiden.

Hinweis: Ändert man nachträglich noch einmal etwas über "raspi-config", so kann es vorkommen, dass console=serial0,115200 wieder in der Zeile ergänzt wird.

Schritt 3:

Raspberry auf aktuellen Stand bringen:

sudo apt-get update
sudo apt-get upgrade

Schritt 4:

Firmware aktualisieren:

sudo apt-get install rpi-update
sudo rpi-update 
sudo reboot

Ein rpi-update soll nur gemacht werden, wenn es unbedingt erforderlich ist. (Quelle: [1])

Schritt 5:

In der Config-Datei /boot/config.txt wird das dementsprechende Overlay geladen, um Bluetooth auf mini UART zu legen:

dtoverlay=pi3-miniuart-bt 

Die Taktfrequenz muss beim Starten auf eine konstante Frequenz eingestellt werden:

enable_uart=1

UART1 wird auf die Maximalfrequenz oder Minimalfrequenz gelegt, da der mini UART die Baudrate abhängig von der System Clock variiert: force_turbo=1 oder core_freq=250, wir entscheiden uns für force_turbo=1 sofern ein dementsprechendes Netzteil (2,5A) verwendet wird.

sudo nano /boot/config.txt

Am Ende der Datei einfach die folgenden Zeilen hinzufügen:

dtoverlay=pi3-miniuart-bt
enable_uart=1
force_turbo=1

Schritt 6:

Dieser Schritt ist nach Mai 2016 nicht mehr notwendig.

Der Bluetooth UART-Service muss auf ttyS0 gelegt werden.

sudo nano /lib/systemd/system/hciuart.service

In der Datei 2x ttyAMA0 gegen ttyS0 (oder alternativ /dev/serial1) tauschen, was in folgendem Code resultiert:

[Unit]
Description=Configure Bluetooth Modems connected by UART
ConditionPathIsDirectory=/proc/device-tree/soc/gpio@7e200000/bt_pins
Before=bluetooth.service
After=dev-ttyS0.device

[Service]
Type=forking
ExecStart=/usr/bin/hciattach /dev/ttyS0 bcm43xx 921600 noflow -

[Install]
WantedBy=multi-user.target

Schritt 7:

Dieser Schritt ist fragwürdig und ab September 2017 durch Anpassungen in der fhem.pl nicht mehr notwendig.


Auf Grund eines Timing-Problems in der Boot-Phase zwischen Bluetooth und dem FHEM Start muss der FHEM-Service 10 Sekunden verzögert werden.

sudo nano /etc/init.d/fhem

In der ersten Zeile der Datei

sleep 10

einfügen.

Nun sollten nach einem Reboot das GPIO-Port-Aufsteckmodul (ttyAMA0) und Raspi 3-Bluetooth (ttyS0) parallel funktionieren.

Schritt 8 (optional)

Wenn Bluetooth noch nicht installiert wurde, muss es noch installiert werden.

sudo apt-get install pi-bluetooth

Schritt 9: (optional)

Sollte es immer noch nicht möglich sein, auf die Schnittstelle /dev/ttyAMA0 zuzugreifen, so sollte man die rechte überprüfen:

ls -lha /dev/ttyAMA0

Hierbei muss sichergestellt sein, dass der User "fhem" zur angezeigten Gruppe (z.B. dialout) gehört. Ist dies nicht der Fall, dann den User "fhem" hinzufügen

usermod -a -G dialout fhem

Quelle: [2]

Schritt 10: (optional)

Den Dienst serial-getty deaktivieren

systemctl disable serial-getty@ttyAMA0.service

Quelle: [3]