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

Aus FHEMWiki
(Rohfassung)
 
K (Rohfassung überarbeitet)
Zeile 1: Zeile 1:
__NOTOC__
__NOTOC__
Abweichend von den vorherigen Raspberry Pi Modellen B, B+ und 2 nutzt der GPIO-Port des Pi 3 standardmäßig den Software UART1 statt den Hardware UART0, der von Bluetooth verwendet wird. Der Software UART1 ist für den Betrieb der Aufsteckmodule jedoch nicht stabil genug. Darum muss der GPIO-Port für diese Aufsteckmodule auf den Hardware UART0 umgestellt werden. Im einfachsten Fall deaktiviert man Bluetooth auf dem Pi 3 und kann dann den Hardware UART für den GPIO-Port nutzen. Das Vorgehen ist hier https://forum.fhem.de/index.php/topic,52161.msg439757.html#msg439757 beschrieben.
Der Raspberry Pi 3 nutzt für den GPIO-Port standardmäßig den Software UART1, während die vorherigen Raspberry Pi-Modelle noch den Hardware UART0 dafür verwendeten. Der Hardware UART0 wird beim Pi 3 durch das neu eingeführte Bluetooth-Modul belegt. Der Software UART1 des Pi 3 mit Anhängigkeiten von CPU-Frequenz, CPU-Last, Temperatur und anderem ist für den Betrieb von Aufsteckmodulen jedoch 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 Hardware UART0 einsetzt.  


Nachfolgend wird ein Weg für die parallele Verwendung von Aufsteckmodulen für den GPIO-Port, die über GPIO 14/15 kommunizieren (bspw. EnOceanPi oder Razberry), und Bluetooth in FHEM mit dem Raspberry Pi 3 beschrieben.
Unter anderem folgende Aufsteckmodule setzen für einen stabilen Betrieb die Nutzung des Hardware UART0 für den GPIO-Port voraus:
* EnOceanPi (EnOcean-Gateway)
* Razberry (ZWave-Gateway)


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 beschreiben werden.  
Immer wieder angeführte und einfach umzusetzende Lösung ist Bluetooth zu deaktivieren und dann den Hardware UART0 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.


== Schritt 1: ==
{{Link2FU|14179|robert.heinze}} hat aufbauend auf seinen Erkenntnissen in diesem {{Link2Forum|Topic=51112}} 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 <strike>Software</strike>Hardware-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:
Im ersten Schritt gilt es den Raspberry Pi 3 zu konfigurieren:


Zeile 14: Zeile 22:


  A5 Device tree muss enabled sein, um Overlay’s verwenden zu können (default)
  A5 Device tree muss enabled sein, um Overlay’s verwenden zu können (default)
  A8 Serial ebenfalls enabled setzen
  A8 Serial ebenfalls <strike>enabled</strike>disabled setzen


== 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.
<source lang="bash">
<source lang="bash">
sudo nano /boot/cmdline.txt
sudo nano /boot/cmdline.txt
Zeile 24: Zeile 33:
<code>console=serial0,115200</code> sollte wie schon beim RPi2 entfernt werden, wenn es gesetzt ist, damit die UART-Schnittstelle vom EnOceanPi verwendet werden kann.
<code>console=serial0,115200</code> sollte wie schon beim RPi2 entfernt werden, wenn es gesetzt ist, damit die UART-Schnittstelle vom EnOceanPi verwendet werden kann.


== Schritt 3: ==
=== Schritt 3: ===
Raspberry auf aktuellen Stand bringen:
Raspberry auf aktuellen Stand bringen:
<source lang="bash">
<source lang="bash">
Zeile 31: Zeile 40:
</source>
</source>


== Schritt 4: ==
=== Schritt 4: ===
Firmware aktualisieren:
Firmware aktualisieren:
<source lang="bash">
<source lang="bash">
Zeile 39: Zeile 48:
</source>
</source>


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


Zeile 50: Zeile 59:
UART1 wird auf die Maximalfrequenz oder Minimalfrequenz gelegt, da der mini UART die Baudrate abhängig von der System Clock variiert:
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.
force_turbo=1 oder core_freq=250, wir entscheiden uns für force_turbo=1 sofern ein dementsprechendes Netzteil (2,5A) verwendet wird.
 
<strike>/boot/cmdline.txt</strike> nachfolgend ersetzt durch /boot/config.txt
<source lang="bash">
<source lang="bash">
sudo nano /boot/config.txt
sudo nano /boot/config.txt
Zeile 60: Zeile 70:
  force_turbo=1
  force_turbo=1


== Schritt 6: ==
=== Schritt 6: ===
Der Bluetooth UART-Service muss auf ttyS0 gelegt werden.
Der Bluetooth UART-Service muss auf ttyS0 gelegt werden.


<source lang="bash">
<source lang="bash">
sudo nano /lib/systemd/system/hciuart.service</code>
sudo nano /lib/systemd/system/hciuart.service
</source>
</source>


Zeile 84: Zeile 94:
</pre>
</pre>
   
   
== Schritt 7: ==
=== Schritt 7: ===
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.
<source lang="bash">
<source lang="bash">
sudo nano /etc/init.d/fhem</code>
sudo nano /etc/init.d/fhem
</source>
</source>


Zeile 94: Zeile 104:
einfügen.
einfügen.


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


== Schritt 8 (optional) ==  
=== Schritt 8 (optional) ===
Wenn Bluetooth noch nicht installiert wurde, muss es noch installiert werden.  
Wenn Bluetooth noch nicht installiert wurde, muss es noch installiert werden.  



Version vom 18. April 2016, 22:07 Uhr

Der Raspberry Pi 3 nutzt für den GPIO-Port standardmäßig den Software UART1, während die vorherigen Raspberry Pi-Modelle noch den Hardware UART0 dafür verwendeten. Der Hardware UART0 wird beim Pi 3 durch das neu eingeführte Bluetooth-Modul belegt. Der Software UART1 des Pi 3 mit Anhängigkeiten von CPU-Frequenz, CPU-Last, Temperatur und anderem ist für den Betrieb von Aufsteckmodulen jedoch 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 Hardware UART0 einsetzt.

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

  • EnOceanPi (EnOcean-Gateway)
  • Razberry (ZWave-Gateway)

Immer wieder angeführte und einfach umzusetzende Lösung ist Bluetooth zu deaktivieren und dann den Hardware UART0 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 SoftwareHardware-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
A5 Device tree muss enabled sein, um Overlay’s verwenden zu können (default)
A8 Serial ebenfalls enableddisabled 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
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

console=serial0,115200 sollte wie schon beim RPi2 entfernt werden, wenn es gesetzt ist, damit die UART-Schnittstelle vom EnOceanPi verwendet werden kann.

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

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.

/boot/cmdline.txt nachfolgend ersetzt durch /boot/config.txt

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:

Der Bluetooth UART-Service muss auf ttyS0 gelegt werden.

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

In der Datei 2x ttyAMA0 gegen ttyS0 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:

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