Raspberry Pi 3: GPIO-Port Module und Bluetooth
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