Raspberry Pi 3: GPIO-Port Module und Bluetooth: Unterschied zwischen den Versionen
Mahowi (Diskussion | Beiträge) K (RaspBee hinzugefügt) |
(Anpassung von <source>-Tags nach <syntaxhighlight>) |
||
Zeile 18: | Zeile 18: | ||
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 26: | Zeile 26: | ||
=== 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 | ||
Zeile 35: | Zeile 35: | ||
=== 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> | ||
=== Schritt 5: === | === Schritt 5: === | ||
Zeile 60: | Zeile 60: | ||
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 72: | Zeile 72: | ||
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! | 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! | ||
< | <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 95: | Zeile 95: | ||
=== 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. | ||
< | <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 108: | Zeile 108: | ||
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> | ||
[[Kategorie:HOWTOS]] | [[Kategorie:HOWTOS]] | ||
[[Kategorie:Raspberry Pi]] | [[Kategorie:Raspberry Pi]] |
Version vom 26. Juli 2017, 20:01 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:
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!
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