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

Aus FHEMWiki
Zeile 70: Zeile 70:


=== 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">

Version vom 6. September 2017, 21:16 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.

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.

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:

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