Raspberry Pi 3: GPIO-Port Module und Bluetooth

Aus FHEMWiki
Version vom 18. April 2016, 18:26 Uhr von Krikan (Diskussion | Beiträge) (Rohfassung)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

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.

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.

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.

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 enabled setzen

Schritt 2:

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.

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</code>

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</code>

In der ersten Zeile der Datei

sleep 10

einfügen.

Nun sollte nach einem Reboot alles funktionieren.

Schritt 8 (optional)

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

sudo apt-get install pi-bluetooth