Lesezeit ca. 9 Min.
arrow_back

Kommunikationsfreudig


Logo von Raspberry Pi Geek
Raspberry Pi Geek - epaper ⋅ Ausgabe 8/2022 vom 02.06.2022

Bluetooth-Kommunikation

Artikelbild für den Artikel "Kommunikationsfreudig" aus der Ausgabe 8/2022 von Raspberry Pi Geek. Dieses epaper sofort kaufen oder online lesen mit der Zeitschriften-Flatrate United Kiosk NEWS.

Bildquelle: Raspberry Pi Geek, Ausgabe 8/2022

README

Es gibt viele Möglichkeiten, um einen Raspberry Pi via Smartphone zu überwachen und zu steuern. Da der RasPi sowohl WLAN als auch Bluetooth mitbringt, setzen die meisten Programme auf Ersteres, und Bluetooth führt ein Schattendasein. Mit dem Pi Pico kommt aber ein weiterer Mitspieler in die Runde, der die Karten neu mischt.

Bluetooth dürften die meisten Nutzer zumindest vom Smartphone kennen. Für den Raspberry Pi gab es schon in Ausgabe 04/​2016 einen Einführungsartikel zu diesem Thema . Sie finden ihn auch in den Downloads zu diesem Artikel als PDF-Datei. Deshalb beschränken wir uns im Folgenden bei den Grundlagen auf das Nötigste. Im Zentrum stehen verschiedene Szenarien, in denen der Raspberry Pi, Pi Pico und Smartphones per Bluetooth miteinander kommunizieren. Der Pico steht dabei quasi repräsentativ für fast beliebige Mikrocontroller, solange diese die serielle ...

Weiterlesen
epaper-Einzelheft 9,99€
NEWS Jetzt gratis testen
Bereits gekauft?Anmelden & Lesen
Leseprobe: Abdruck mit freundlicher Genehmigung von Raspberry Pi Geek. Alle Rechte vorbehalten.
Lesen Sie jetzt diesen Artikel und viele weitere spannende Reportagen, Interviews, Hintergrundberichte, Kommentare und mehr aus über 1050 Magazinen und Zeitungen. Mit der Zeitschriften-Flatrate NEWS von United Kiosk können Sie nicht nur in den aktuellen Ausgaben, sondern auch in Sonderheften und im umfassenden Archiv der Titel stöbern und nach Ihren Themen und Interessensgebieten suchen. Neben der großen Auswahl und dem einfachen Zugriff auf das aktuelle Wissen der Welt profitieren Sie unter anderem von diesen fünf Vorteilen:

  • Schwerpunkt auf deutschsprachige Magazine
  • Papier sparen & Umwelt schonen
  • Nur bei uns: Leselisten (wie Playlists)
  • Zertifizierte Sicherheit
  • Freundlicher Service
Erfahren Sie hier mehr über United Kiosk NEWS.

Mehr aus dieser Ausgabe

Titelbild der Ausgabe 8/2022 von Poka Yoke. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
Poka Yoke
Titelbild der Ausgabe 8/2022 von Netzwerker. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
Netzwerker
Titelbild der Ausgabe 8/2022 von Info-Zentrale. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
Info-Zentrale
Titelbild der Ausgabe 8/2022 von Multi-Sensor. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
Multi-Sensor
Mehr Lesetipps
Blättern im Magazin
Trautes Heim
Vorheriger Artikel
Trautes Heim
Keep cool
Nächster Artikel
Keep cool
Mehr Lesetipps

Bluetooth dürften die meisten Nutzer zumindest vom Smartphone kennen. Für den Raspberry Pi gab es schon in Ausgabe 04/​2016 einen Einführungsartikel zu diesem Thema . Sie finden ihn auch in den Downloads zu diesem Artikel als PDF-Datei. Deshalb beschränken wir uns im Folgenden bei den Grundlagen auf das Nötigste. Im Zentrum stehen verschiedene Szenarien, in denen der Raspberry Pi, Pi Pico und Smartphones per Bluetooth miteinander kommunizieren. Der Pico steht dabei quasi repräsentativ für fast beliebige Mikrocontroller, solange diese die serielle Kommunikation beherrschen.

Grundlagen

Als Grundvoraussetzung für die Kommunikation per Bluetooth zwischen zwei Partnern gilt zum einen das Koppeln (Pairing) und zum anderen das Vertrauen (Trust) zwischen den Beteiligten. Beides stellen Sie einmalig her, die Geräte merken sich das Vertrauensverhältnis üblicherweise. Nach dem Koppeln kann jeder der beiden Partner eine Verbindung aufbauen. Den Initiator nennt man Master oder Host, das zweite Gerät Slave oder Device. Allerdings eignet sich jedes Gerät für beide Rollen.

Der auf dem Raspberry Pi verwendete Standard-Nutzer pi sollte als Mitglied den Gruppen bluetooth und dialout angehören, was Sie mit dem Befehl id überprüfen. Tut er das nicht, ändern Sie das mithilfe des Kommandos aus Listing 1 und melden sich dann ab und neu an.

Das Vorgehen für Pairing und Trust sehen Sie in Abbildung 1 . Das Gegenüber muss dafür sichtbar sein. In Smartphones finden Sie die entsprechenden Einstellungen im Bluetooth-Bereich der Einstellungen. Für den RasPi nutzen Sie dazu das Kommando bluetoothctl. Es startet eine eigene kleine Shell mit einem beschränkten Satz an Kommandos. Über help rufen Sie eine Übersicht auf. Mit [Tab] vervollständigen Sie Kommandos und Bluetooth-MAC-Adressen, was sehr viel Tipparbeit spart.

Systemvoraussetzung

Zusätzlich zum individuellen Koppeln muss der Raspberry Pi ein paar Systemvoraussetzungen mitbringen. Die Kommunikation zwischen Smartphone, Pi Pico und RasPi erfolgt über das serielle Protokoll SPP, das auf RFCOMM über L2CAP aufsetzt. Dieser Protokoll-Stack dient als Teil des klassischen Bluetooth. Andere Profile wie FTP oder OBEX-Push setzen ebenfalls auf RFCOMM auf. Letzteres verwenden zum Beispiel Smartphones oder Tablets für den direkten Austausch von Dateien.

Damit RFCOMM auf dem Raspberry Pi bereitsteht, müssen Sie den Bluetooth-Daemon mit der Kompatibilitätsoption ‐C starten. Dazu kopieren Sie die Service-Definition aus /lib/systemd/system/ bluetooth.service nach /etc/systemd/ system. Dort ersetzen Sie die Anweisung ExecStart durch den Inhalt der beiden Zeilen aus Listing 2. Die zweite Zeile fügt dabei das SP-Profil in den Service-Katalog der verfügbaren Protokolle ein. Danach starten Sie den Daemon mit den Befehlen aus Listing 3 neu.

Blaue Tastatur

Als erstes Anwendungsbeispiel dient der Mediaplayer am Fernseher im Wohnzimmer. Wenn er zickt, gilt es, den Server-Prozess neu zu starten. Unabhängig davon fällt auch gelegentlich die Kontrolle wichtiger Parameter an. Statt mit dem Notebook und SSH lässt sich das auch mit dem Smartphone oder Tablet erledigen. Auf Android-Geräten läuft dafür die App Serial Bluetooth Terminal , eine ähnliche App gibt es auch für iOS.

Über das Menü der App erreichen Sie die gekoppelten Geräte, ein Klick darauf startet den Verbindungsaufbau. Damit das klappt, muss der Raspberry Pi aber auf eine Verbindung warten. Das stoßen Sie mit dem Kommando sudo rfcomm listen hci0 & an. Das kaufmännische und (&) am Ende schickt den Befehl in den Hintergrund und macht die Konsole wieder eingabebereit.

Abbildung 2 zeigt das Prinzip der Kommunikation nach dem Verbindungsaufbau. Das Tablet (rechts) sendet Befehle (in Blau), der Raspberry Pi liest sie von /dev/rfcomm0 mit cat (links). Umgekehrt funktioniert es analog: Der RasPi schreibt per Echo auf /dev/rfcomm0, die Ausgabe erscheint auf dem Tablet (grün). Steht die Verbindung, spielt es keine Rolle, wer sie aufgebaut hat: Die Daten fließen immer bidirektional. Wegen eines Fehlers in der App erscheinen die Befehle des Tablets noch einmal als Antwort vom RasPi.

HC-05 konfigurieren

Der HC-05 kommt üblicherweise immer mit demselben voreingestellten Benutzernamen und Passwort, außerdem liegt die für den Datenmodus vorkonfigurierte Transferrate bei mageren 9600 Baud. Mit ein paar AT-Kommandos ändern Sie das, am einfachsten mit einem USB-auf- UART-Adapter, der 3,3 Volt unterstützt. Alternativ nutzen Sie den Raspberry Pi. Dessen serielle Schnittstelle belegt allerdings die Systemkonsole, sodass Sie sie erst freischaufeln müssen. Dazu entfernen Sie in der Datei /boot/cmdline.txt den String console=serial0,115200 und fügen die Zeile enable_uart=1 in die /boot/config.txt ein.

Nach einem Neustart verbinden Sie GPIO14 (TX) mit RX auf dem HC-05 sowie GPIO15 (RX) mit TX und GND. Bevor Sie die Spannung (3,3 oder 5 Volt) anlegen, drücken und halten Sie den kleinen Button auf dem Breakout. Die LED sollte jetzt langsam blinken. Das genaue Muster hängt von der Version ab, beim Autor ist es ein Doppelblinken im Sekundenabstand. Während die Transferrate im Datenmodus 9600 Baud beträgt, arbeitet der HC-05 im Kommandomodus mit 38 400 Baud. Sie verbinden sich deshalb mit dem Terminalprogramm Ihrer Wahl mit dem Gerät, etwa mit dem Befehl aus der ersten Zeile von Listing 6. Danach führen Sie die im Listing folgenden Befehle aus. Achten Sie dabei auf Großschreibung.

Der erste Befehl sollte OK zurückliefern (Zeile 5) – tut er das nicht, dann stimmt etwas mit der Verbindung nicht. Die weiteren Befehle fragen jeweils den aktuellen Wert ab (AT+XXX?) und setzen ihn neu. Wichtig sind vor allem die Befehle in Zeile 12 (Pin) und Zeile 15 (Transferrate). Auch wenn Bluetooth keine hohe Reichweite besitzt, bis in die Nachbarwohnung schafft es das Signal dennoch oft, deshalb empfiehlt es sich, den Standard-PIN zu ändern. Die Transferrate wählte der Autor in Zeile 15 so, dass sie dem Standard des Pi Pico entspricht. Wenn Sie einen anderen Mikrocontroller verwenden, passen Sie den Wert entsprechend an.

Die in Abbildung 2 2 auf dem RasPi ausgeführten Schritte sollen automatisch ablaufen. Dazu richten Sie einen Systemd-Service mit der Definition aus Listing 4 ein. Das Argument watch in Zeile 7 funktioniert analog zu listen. Nach dem Aufbau der Verbindung startet Rfcomm das Skript /usr/local/sbin/bt‐control.sh. Nach einem Verbindungsabbruch sorgt watch dafür, dass Rfcomm wieder in den listen-Modus wechselt.

Das dazugehörige Kontrollprogramm sehen Sie in Listing 5. Im Beispiel handelt es sich um ein einfaches Shell-Skript, jede andere Programmiersprache wäre genauso möglich. Das Skript liest kontinuierlich von der RFCOMM-Schnittstelle (Zeile 18) und verarbeitet die vordefinierten Kommandos in der Funktion process_request() ab Zeile 3.

Die Android-App gestaltet die Steuerung sehr einfach, denn sie erlaubt es, Befehle direkt auf Buttons zu legen 3 3 . Die Anzahl der Zeilen legen Sie in den Einstellungen fest. Mit einem langen Druck auf einen Button kommen Sie in den Editiermodus und ändern Titel, Befehl und Format. Ausblenden lassen sich einzelne Buttons allerdings nicht, auch die Schriftgröße kann man nicht ändern.

Auf Basis derselben RFCOMM-Technologie gibt es noch eine ganze Reihe von Apps im Playstore. Besonders interessant ist zum Beispiel die App Bluetooth Control Panel . Das Besondere an ihr: Sie erstellt die Oberfläche dynamisch aufgrund von Daten, die der Raspberry Pi oder ein Mikrocontroller an sie sendet.

Daten kontaktlos

Im ersten Anwendungsfall war das Smartphone der Host und der Raspberry Pi das Device. Nun übernimmt der Mini-Rechner die Rolle des Hosts. Ein typischer Anwendungsfall besteht im Datenlogging über Bluetooth. Dazu schreibt wie üblich der Mikrocontroller seine Ausgabe auf die serielle Schnittstelle, aber statt eines Kabels hängt dort ein HC-05 4 . Dieser Baustein implementiert UART über Bluetooth. Der große Vorteil dabei: Sie müssen das Programm auf dem Mikrocontroller nicht ändern, wenn der sowieso schon seine Daten auf die serielle Schnittstelle schreibt.

Das Breakout gibt es in den unterschiedlichsten Versionen. Welches Exemplar man genau bekommt, spielt letztlich kaum eine Rolle. Typischerweise bringt die Platine einen Taster, eine LED und einen Spannungswandler mit. Letzterer gestaltet die Stromversorgung flexibel. Der Signalpegel auf den RX/TX-Leitungen beträgt aber immer 3,3 Volt. Wer also einen Arduino anschließt, muss die Spannung auf der RX-Leitung (Arduino: TX) per Spannungsteiler herabsetzen. Tutorials zur Verkabelung finden sich reichlich im Internet.

Der HC-05 kennt die Modi Kommando und Daten. Der erste Modus dient in erster Linie der Konfiguration, bei neuen Geräten sollten Sie dazu unbedingt die im Kasten „HC-05 konfigurieren“ beschriebenen Schritte ausführen. Außerdem müssen Sie den Raspberry Pi und das Breakout einmalig wie bereits beschrieben koppeln; dabei merken Sie sich die MAC-Adresse des HC-05.

Dateien zum Artikel herunterladen unter

www.raspi-geek.de/dl/47207

Der Autor

Bernhard Bablok arbeitet bei der Allianz Technology SE als SAP-HR-Entwickler. Wenn er nicht Musik hört oder draußen unterwegs ist, beschäftigt er sich mit Themen rund um Linux, Programmierung und Kleincomputer. Sie erreichen ihn unter mail@bablokb.de.

So vorbereitet, gerät der Einsatz zum Kinderspiel. Sie verbinden den HC-05 mit dem Mikrocontroller, und der gibt seine Daten wie üblich per print respektive printf aus. Den Raspberry Pi verbinden Sie nun über den Befehl aus der ersten Zeile von Listing 7 mit dem HC-05 – der Wert aa:bb:cc:dd repräsentiert dabei die MAC-Adresse des Breakouts. Anschließend steht das Device /dev/rfcomm0 bereit. Eingehende Daten lenken Sie dann per cat in eine Datei um (letzte Zeile). Falls der Mikrocontroller zudem Eingaben verarbeitet, lassen sich auch Befehle via /dev/rfcomm0 versenden, etwa, indem Sie ein Terminalprogramm mit der Device-Datei als Argument aufrufen.

Statt über den Raspberry Pi können Sie sich auch über die Android-App mit dem HC-05 verbinden. Das erweist sich für einen schnellen Test als hilfreich, denn Sie sehen sofort, ob der Pi Pico erfolgreich Daten sendet. Ebenso ist es möglich, dass der RasPi oder die App Daten per HC-05 an den Mikrocontroller sendet und diesen damit steuert (LED und Motoren an/​aus und so weiter). Der Mikrocontroller muss dann aber auf die serielle Schnittstelle nicht nur schreiben, sondern auch von dort lesen.

Pico als Host

Das vorige Szenario zeigte, wie der Raspberry Pi die Daten beim Pi Pico abholt. Das funktioniert gut, solange der Mikrocontroller schon läuft und der Aufbau der Verbindung vom Raspberry Pi zum Pico deshalb klappt. Läuft der Mikrocontroller jedoch nicht, müsste der RasPi in einer Schleife ständig aufs Neue den Verbindungsaufbau herzustellen versuchen.

Unabhängig davon gibt es ein weiteres Problem: Sendet der Pi Pico nur hin und wieder Daten, etwa weil er Sensoren nur in größeren Zeitabständen ausliest, dann bekommt der RasPi die Daten nur bei einer ständig aktiven Verbindung zuverlässig übermittelt. In diesem Fall empfiehlt es sich, den RasPi und den Pico die Rollen tauschen zu lassen, sodass der Mikrocontroller die Verbindung aktiv erstellt. Auf dem RasPi läuft dann ein Service, der Verbindungsanfragen akzeptiert, anschließend die Daten entgegennimmt und sie dann wegschreibt.

Für dieses Szenario muss der HC-05 als Host agieren und die Verbindung aufbauen. Genau das stellt sich manchmal als große Hürde heraus. Das liegt daran, dass das Breakout in verschiedenen Versionen zur Verfügung steht. Viele Postings im Netz beschreiben das Vorgehen dabei mit einer Firmware von 2010. Auf allen Geräten des Autors befindet sich aber eine Firmware von 2017, die im Detail anders tickt. Das hier beschriebene Vorgehen muss also nicht unbedingt zum Erfolg führen. Die Firmware-Version fragen Sie im Kommandomodus mit dem Befehl AT+VERSION? ab.

Ebenfalls im Kommandomodus wechseln Sie die Rolle des HC-05. Die dazu notwendigen Befehle zeigt Listing 8. Das erste Kommando weist den Chip an, sich mit einer festen Adresse zu verbinden, das zweite setzt den Host-Modus und das dritte (BIND) die Zieladresse. Dabei handelt es sich um die Bluetooth-MAC-Adresse des RasPi, die Sie mit echo list | bluetoothctl abfragen. Statt durch Doppelpunkte getrennt benötigt das BIND-Kommando diese Information aber in einer etwas anderen Form. So wird aus 4D:65:4D:CA:66:12 beispielsweise der Wert 4D65,4D,CA6612.

Vor einem Neustart sorgen Sie für die Verbindungsbereitschaft des Raspberry Pi. Das funktioniert genauso wie im ersten Anwendungsfall beschrieben. Da Mikrocontroller üblicherweise Daten senden und keine Kommandos, benötigen Sie auf der RasPi-Seite kein Anwendungsprogramm mit Logik, sondern im einfachsten Fall nur eine Umleitung in eine Datei (Listing 9).

Startet jetzt der Pico mit angeschlossenem HC-05, sollten alle Daten auf dem Raspberry Pi landen. Steht der nicht bereit, bricht der HC-05 den Verbindungsaufbau ab. Selbst wenn der RasPi später online ist, kommt keine Verbindung mehr zustande, denn der HC-05 versucht von sich aus keinen Neuaufbau. Für ein robustes Verfahren muss also der Pi Pico den HC-05 per Transistor vor jedem Verbindungsversuch an- und danach wieder ausschalten. Wenn der Mikrocontroller Daten in festen Abständen aus einem Sensor ausliest und versendet, spart dieses Vorgehen zusätzlich noch Strom.

Soll der Raspberry Pi die Daten von mehreren Picos sammeln, erfordert das etwas mehr Aufwand. Als Blaupause könnte der RFCOMM-Server dienen. Beachten Sie, dass der RasPi immer nur eine Verbindung gleichzeitig unterhält. Theoretisch wären zwar seitens Bluetooth und des Mini-Rechners mehr Verbindungen möglich, aber sowohl der HC-05 als auch die Android-Apps kontaktieren das Device immer auf dem für SPP üblichen Standardkanal 1. Für Sensoren, die nur gelegentlich kurz funken, genügt das aber, solange der Pi Pico die Verbindung nach dem Einliefern der Daten schnell wieder freigibt.

Fazit

Ab der dritten Generation bringt der Raspberry Pi Bluetooth schon mit. Damit kontrollieren Sie den Mini-Rechner einerseits von extern und steuern andererseits vom RasPi aus beliebige Mikrocontroller. Gute Dienste leistet dabei der HC-05, denn der Chip erspart das Abtauchen in die Untiefen der Bluetooth-Protokolle. Außer einer einmaligen Konfiguration fällt nur der Aufwand für die Verkabelung an. Ältere RasPis rüsten Sie für wenig Geld über einen USB-Bluetooth-Dongle nach.

Klassisches Bluetooth birgt allerdings auch einige, nicht unerhebliche Nachteile. Insbesondere der Stromverbrauch macht die Technologie für IoT-Geräte eher uninteressant. Hier springt der Modus Bluetooth Low Energy (BLE) ein, eine für minimalen Stromverbrauch optimierte neue Protokollvariante. Wie die Zusammenarbeit zwischen verschiedenen Geräten des heimischen IT-Zoos damit funktioniert, klärt ein Artikel in einer der nächsten Ausgaben.

(tle)

Weitere Infos und interessante Links

www.raspi-geek.de/qr/47207