Raspberry Pi 4 Bluetooth

Infos, die wichtig sein könnten

Getestet wurde dieser Artikel mit einem Raspberry Pi 4B mit xfce4 als grafische Oberfläche. Ein Test mit einem Raspberry 3B ohne grafische Oberfläche aber mit WLan ist in Planung.

Bluetooth ist eine Funkverbindung mit der Grundfrequenz 2.4 GHz mit verschiedenen Kanälen, die dann die Bandbreite bilden.

Somit kollidiert Bluetooth mit WLan 2.4 GHz. Damit solche Kollisionen möglichst wenig sind, wird bei bestehenden Bluetooth-Verbindungen mehrmals pro Sekunde der Kanal gewechselt. Das erfordert etwas Energie in Milliwatt.

Man sollte gut überlegen, ob man beim Rasperry Pi unbedingt Bluetooth braucht. Weniger kann mehr sein. Für Audioein- und ausgaben kann das sinvoll sein, für Datenübertragungen würde ich jedoch das Netzwerk nutzen, da Bluetooth im Vergleich langsam ist.

Bluetooth-Verbindungen sind heutzutage sehr stabil (Ich war da anderer Meinung, aber das stimmt.) und 7 Geräte können miteinander verbunden werden. Werden Daten zu mehreren Geräten gleichzeitig übertragen, so leidet hier aber die Qualität der einzelnen Verbindungen.

Hier werden wir Bluetooth ausschließlich auf der Konsole einrichten. Beim Nutzen grafischer Programme wie blueman gab es Probleme bei mir. Natürlich dürft ihr die trotzdem nutzen.

Inhalt

Macht bitte nicht meine Fehler nach

In der Image-Datei von raspi-debian.net für Raspberry Pi 4 sind alle notwendigen Hardware-Implementationen für Bluetooth enthalten.

Bitte keine weiteren Packete "firmware-sonstwas" installieren. Da ensteht ein unreperables Troubleshooting, das sich nur mit einer Neuinstallation reparieren lässt.

Inhalt

Bluetooth-Software installieren

sudo apt install bluez

Mehr erst mal nicht, wenn man es verstehen möchte.

Nun wurden der Server bluetoothd und der Client bluetoothctl (Bluetooth-Control) installiert. Der Server greift auf den Bluetooth-Adapter zu, der Client sagt, was der Server machen soll.

Hinweis: Sollte der Server bluetoothd einen funktionierenden Adapter gefunden haben, so wird standardmäßig bei jedem Neustart der Adapter eingeschaltet.

Inhalt

Adapter testen

Nun ist es interessant, ob Bluetooth überhaupt geht. Dazu nutzen wir den Client bluetoothctl.

Kurze Einführung in bluetoothctl

Bluetoothctl kann man in 2 Varianten nutzen.

Variante 1

bluetoothctl
help
#Anweisung 1
#Anweisung 2
#weiter Anweisungen
quit #oder exit

Variante 2

bluetoothctl Anweisung

Man kann also bluetoothctl ohne Anweisung starten und sich dort bewegen, oder man gibt bluetoothctl eine Anweisung mit, wo hier bluetoothctl die Anweisung ausführt und beendet.

Bluetooth ein- und ausschalten

Mittels

bluetoothctl power on

sollte sich Bluetooth einschalten lassen. Mittels

bluetoothctl power off

sollte sich Bluetooth ausschalten lassen. Sind bereits grafische Programme für Bluetooth installiert, so kann es notwendig sein, voher die grafische Oberfläche zu starten.

Wenn das nicht funktioniert, wurde der Adapter nicht gefunden und man braucht nicht weiter machen. Die Hardware wurde nicht erkannt.

Zur Info: Nach einem Neustart des Systems ist Bluetooth standardmäßig eingeschaltet.

Inhalt

Mit einem Gerät verbinden

Das Gerät, mit dem die Verbindung hergestellt werden soll, muss auf "sichtbar" eingestellt sein.

Wir starten bluetoothctl in der Variante 1 und schalten es ein.

bluetoothctl
power on

Gerät suchen

Dazu nutzt man folgende Anweisung:

scan on

Nun werden alle Kanäle des Funkbereiches durchsucht, gefundene Geräte werden angezeigt, was etwas dauern kann.

Hat man das gewünschte Gerät gefunden, empfehle ich, den Discovery-Modus auszuschalten. Ansonsten nervt es bei dem weiteren Vorgehen, wenn irgend welche Leute mit Handies und Fittness-Trackern mit sichtbaren Bluetooth hier vorbei laufen.

scan off

Wichtig für uns ist nun die Geräte-Adresse, wo ich hier jetzt mal 12:34:56:A1:B2:C3 als Beispiel nehme.

Kopplung

Um sich mit dem Gerät verbinden zu können, muss eine Kopplung durchgeführt werden. Hier werden zwischen den Geräten Daten, ausgetauscht, wie zukünftige Verbindungen konfiguriert werden. Dazu wird kurzzeitig eine Verbindung zum Gerät erstellt.

Die Kopplung wird durchgeführt mittels:

pair 12:34:56:A1:B2:C3

Dem Gerät vertrauen

Soll es in Zukunft möglich sein, dass sich das Gerät mit dem Raspberry Pi verbinden darf, kann man es auf "vertraulich" setzten:

trust 12:34:56:A1:B2:C3

Und nun endlich die Verbindung und bluetoothctl beenden

connect 12:34:56:A1:B2:C3
quit

Nun kann man in Zukunft mittels...

Inhalt

Weitere Beispiele mit bluetoothctl

Inhalt

Audio über Bluetooth

Sehr oft wird Bluetooth für die Audioein- und -ausgabe genutzt. Beispiele sind Bluetooth-Lautsprecher, Headsets und sogar das Autoradio.

Ob man das an einem Raspberry Pi ohne grafische Oberfläche wirklich braucht, sollte man sich gut überlegen. Aber es geht.

Um die Audiodaten mittels Bluetooth zu übertragen, benötigt man einen Audio-Server. Ich habe das nur mittels pulseaudio getestet.

Um Audio mittels Bluetooth nutzen zu können, benötigen wir folgendes Packet:

sudo apt install pulseaudio-module-bluetooth

Ist keine grafische Oberfläche installiert, wird hier pulseaudio mit allen abhängigen Packeten installiert. Das ist eine Menge. Um das Bluetooth-Gerät für Audio zu nutzen, muss man sich in pactl einarbeiten und die Audioein- und Ausgabe setzen. Kurzes Beispiel:.

pactl list
pactl set-default-sink bluez_sink.12_34_56_A1_B2_C3.a2dp_sink

Wird die Verbindung zum Gerät getrennt, schaltet pulseaudio um. Wird eine Verbindung später neu erstellt, kann es sein, dass man die Sache erneut durchspielen muss. Deshalb kann man vielleicht ein Skript nutzen, wo die Verbindung erstellt und die Audio-Ausgabe gesetzt wird. Beispiel audio.sh:

#!/usr/bin/dash

# Verbindung erstellen
bluetoothctl connect 12:34:56:A1:B2:C3

# pulseaudio Zeit geben, Kanal zu erkennen
sleep 10

# Audioausgabekanal setzen
pactl set-default-sink bluez_sink.12_34_56_A1_B2_C3.a2dp_sink

Mittels

sh ./audio.sh

sollte nun die Sache automatisch durchgeführt werden.

Hat man eine grafische Oberfläche, so lässt sich alles mittels pavucontrol (oder mit dem Lautsprecher auf der Leiste) wie gewünscht einstellen.

Mein Test

Mein Raspberry Pi 4 befindet sich in einem Metallgehäuse, was nicht für gute Funkverbindungen spricht. Trotzdem konnte ich 2 Geräte in einigen Metern Entfernung mit Wänden dazwischen für die Audioausgabe nutzen.

Mittels pulseaudio habe ich in der Stube den Sound eines Films wiedergeben lassen, während in der Küche ein Radio-Stream wiedergegeben wurde.

Inhalt

Wenn Bluetooth nicht mehr funktionieren will

Es ist ein bekanntes Problem nicht nur in Debian, dass Bluetooth irgendwann nicht mehr funktionieren will.

Bei mir trat das Problem beim Spielen mit bluman auf, weshalb ich es nun nicht mehr auf dem Raspberry Pi nutze. Auf Laptops trat dieses Problem bisher noch nicht auf.

Hier ist es notwendig, alle Geräte zu entkoppeln und zu entfernen.

Als erstes entzieht man dem Gerät die Vertraulichkeit falls gesetzt.

bluetoothctl untrust 12:34:56:A1:B2:C3

Danach wird das Gerät entkoppelt.

bluetoothctl cancel-pairing 12:34:56:A1:B2:C3

Zum Schluss wird das Gerät entfernt.

bluetoothctl remove 12:34:56:A1:B2:C3

Diese Prozedur führte ich mit allen Geräten durch, sieht viel aus, geht aber doch schnell.

Danach konnte ich Geräte wie oben beschrieben neu koppeln und seitdem läuft es stabil.

Inhalt