Raspberry Pi 3: GPIO-Port Module und Bluetooth: Unterschied zwischen den Versionen
K (→Schritt 2:) |
Krikan (Diskussion | Beiträge) K (Link korrigiert) |
||
(9 dazwischenliegende Versionen von 6 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|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 17: | Zeile 19: | ||
Im ersten Schritt gilt es den Raspberry Pi 3 zu konfigurieren: | Im ersten Schritt gilt es den Raspberry Pi 3 zu konfigurieren: | ||
< | <syntaxhighlight lang="bash"> | ||
sudo raspi-config | sudo raspi-config | ||
</ | </syntaxhighlight> | ||
A7 Serial auf enabled setzen | A7 Serial auf enabled setzen | ||
Zeile 25: | Zeile 27: | ||
=== Schritt 2: === | === 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. | 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. | ||
< | <syntaxhighlight lang="bash"> | ||
sudo nano /boot/cmdline.txt | sudo nano /boot/cmdline.txt | ||
</ | </syntaxhighlight> | ||
Diese Zeile suchen: | Diese Zeile suchen: | ||
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: === | ||
Raspberry auf aktuellen Stand bringen: | Raspberry auf aktuellen Stand bringen: | ||
< | <syntaxhighlight lang="bash"> | ||
sudo apt-get update | sudo apt-get update | ||
sudo apt-get upgrade | sudo apt-get upgrade | ||
</ | </syntaxhighlight> | ||
=== Schritt 4: === | === Schritt 4: === | ||
Firmware aktualisieren: | Firmware aktualisieren: | ||
< | <syntaxhighlight lang="bash"> | ||
sudo apt-get install rpi-update | sudo apt-get install rpi-update | ||
sudo rpi-update | sudo rpi-update | ||
sudo reboot | sudo reboot | ||
</ | </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 59: | Zeile 64: | ||
force_turbo=1 oder core_freq=250, wir entscheiden uns für force_turbo=1 sofern ein dementsprechendes Netzteil (2,5A) verwendet wird. | force_turbo=1 oder core_freq=250, wir entscheiden uns für force_turbo=1 sofern ein dementsprechendes Netzteil (2,5A) verwendet wird. | ||
< | <syntaxhighlight lang="bash"> | ||
sudo nano /boot/config.txt | sudo nano /boot/config.txt | ||
</ | </syntaxhighlight> | ||
Am Ende der Datei einfach die folgenden Zeilen hinzufügen: | Am Ende der Datei einfach die folgenden Zeilen hinzufügen: | ||
Zeile 69: | Zeile 74: | ||
=== Schritt 6: === | === Schritt 6: === | ||
Dieser Schritt ist nach Mai 2016 nicht mehr notwendig. | |||
< | Der Bluetooth UART-Service muss auf ttyS0 gelegt werden. | ||
<syntaxhighlight lang="bash"> | |||
sudo nano /lib/systemd/system/hciuart.service | sudo nano /lib/systemd/system/hciuart.service | ||
</ | </syntaxhighlight> | ||
In der Datei 2x ttyAMA0 gegen ttyS0 (oder alternativ /dev/serial1) tauschen, was in folgendem Code resultiert: | In der Datei 2x ttyAMA0 gegen ttyS0 (oder alternativ /dev/serial1) tauschen, was in folgendem Code resultiert: | ||
Zeile 93: | 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"> | ||
sudo nano /etc/init.d/fhem | sudo nano /etc/init.d/fhem | ||
</ | </syntaxhighlight> | ||
In der ersten Zeile der Datei | In der ersten Zeile der Datei | ||
Zeile 107: | Zeile 117: | ||
Wenn Bluetooth noch nicht installiert wurde, muss es noch installiert werden. | Wenn Bluetooth noch nicht installiert wurde, muss es noch installiert werden. | ||
< | <syntaxhighlight lang="bash"> | ||
sudo apt-get install pi-bluetooth | sudo apt-get install pi-bluetooth | ||
</ | </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
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]