Bluetooth-Audio über die Anlage abspielen
Raspberry Pi als Bluetooth-Empfänger (Audio-Wiedergabe über die Stereoanlage)
In diesem Beitrag demonstriere ich, wie man Bluetooth-Audio (z. B. vom Smartphone) an den Raspberry Pi sendet. Dieser kann den Ton dann einfach über eine angeschlossene Stereoanlage abspielen. Wir erhalten also eine „Super-Bluetooth-Box“ mit großen Holzlautsprechern.

Ich lasse Musik vom Smartphone (z. B. von Spotify) kabellos über den Raspberry auf meiner alten 70er-Jahre-Anlage abspielen. Das geht recht einfach.
Ich hatte ja bereits dargestellt, wie einfach es ist, eine Bluetooth-Box mit dem Raspberry Pi zu verbinden (headless). Aber es geht auch genau anders herum: Nicht der Raspberry soll das Wiedergabegerät sein sondern ein Laptop oder Smartphone. Das Audiosignal dieser Geräte wird dann per Bluetooth an den Raspberry gesendet und dieser spielt die Musik dann auf einer Stereoanlage ab, welche einfach per Klinke-Cinch-Kabel oder HifiBerry mit der guten alten Stereoanlage im Wohnzimmer verbunden ist.
Zunächst prüfen, ob Bluetooth generell aktiviert ist
Als erstes prüfen wir, ob Bluetooth auf dem Raspberry Pi überhaupt aktiviert ist. Falls man irgendwann einmal Bluetooth in der /boot/firmware/config.txt deaktiviert hatte, sollte man dies nun natürlich rückgängig machen. Nun (ggf. nach einem Neustart) prüfen wir in der Konsole via rfkill list, ob Bluetooth dort als deaktiviert angezeigt wird. Wenn nein, müsste man es aktivieren: sudo rfkill unblock bluetooth.
Jetzt sollte man noch hciconfig aufrufen und wenn dort irgedend etwas mit „DOWN“ vermerkt ist, sollte man Bluetooth mit sudo hciconfig hci0 up aktivieren.
Es schadet nicht, wenn man den Pi nun noch einmal neu startet.
BlueAlsa installieren
Ich nutze das Betriebssystem DietPi und zwar ohne grafische Oberfläche („headless“). Zum Verbinden von Bluetooth-Audiogeräten musste ich zunächst BlueAlsa installieren – eine sehr leichtgewichtiger Audio-Server-Software: sudo apt update sowie dann sudo apt install bluez-alsa-utils.
Mit systemctl status bluealsa prüfen wir danach, ob der Dienst korrekt läuft.
Smartphone mit dem Raspberry Pi verbinden
Nun koppeln und verbinden wir z. B. ein Smartphone mit dem Raspberry Pi. Hierzu rufen wir in der Konsole bluetoothctl auf.
Darin dann:
power on (Sicherstellen, dass der Adapter bereit ist.)
discoverable on (Damit das Smartphone / der Laptop den Pi in der Suche findet.)
pairable on (Damit eine Kopplung erlaubt wird.)
agent NoInputNoOutput (Setzt den Modus so, dass keine PIN-Bestätigung am Pi getippt werden muss.)
default-agent
Somit bietet sich der Raspberry Pi sozusagen für andere Geräte an.
Ich nutze ein Android-Smartphone. Dort gehe ich in die Bluetooth-Einstellungen und suche nach neuen Geräten in der Nähe. Der Raspberry Pi müsste hier nun in der Liste auftauchen. Bei mir heißt er „DietPi“.
Wir verbinden nun unter Android den Raspberry Pi und bestätigen dies sowohl auf dem Handy wie auch in der Konsole.
Unter Android definieren wir das neue Gerät als „Medien Audio“ bzw. als „Lautsprecher“.
In der Konsole können wir bluetoothctl wieder via exit verlassen.
Nummer des Ausgabegerätes ermitteln
Nun müssen wir wissen, welche „Soundkarte“ der Raspberry Pi nutzt. Wir geben hierzu aplay -l in der Konsole ein. Ich erhalte bei mir dann so etwas:
**** Liste der Hardware-Geräte (PLAYBACK) **** Karte 0: sndrpihifiberry [snd_rpi_hifiberry_dac], Gerät 0: HifiBerry DAC HiFi pcm5102a-hifi-0 [HifiBerry DAC HiFi pcm5102a-hifi-0] Sub-Geräte: 0/1 Sub-Gerät #0: subdevice #0
Wie man sieht, nutze ich anstelle der Klinkenbuchse einen HifiBerry. Relevant ist hier jetzt aber nur die Nummer der Karte – bei mir 0 bzw. die Angaben
Sub-Gerät #0: subdevice #0
Das merken wir uns für später bzw. für zwei kleine Schalt-Skripte.
Verbindung testen
Wir können den Raspberry nun bereits ohne Skripte zum Test scharf stellen. Zuvor bitte jegliche Musikwiedergabe am Pi stoppen (falls man derzeit via Kodi, vlc oder mpd Musik wiedergibt).
In der Konsole geben wir dann ein: bluealsa-aplay -D hw:0,0
Falls bei Ihnen die Karte andere Nummern als 0 hat, muss man diesen Befehl natürlich entsprechend anpassen.
Nun wartet der Pi auf eine Verbindung und wir verbinden das Smartphone wieder mit dem Raspberry. Als nächstes spielen wir auf dem Handy Musik ab und diese sollte nun über die Anlage erklingen, die am Pi angeschlossen ist. In der Konsole sieht man nun auch diverse Statusmeldungen.
Wenn der Test erfolgreich war, stoppen wir bluealsa-aplay in der Konsole wieder via STRG + C. Das Smartphone sollte nun die Verbindung verloren haben, die Musik sollte nun wieder über die internen Lautsprecher abgespielt werden. Bei meinem Tablet „merkt“ Android manchmal nicht, dass das Empfangsgerät nun offline ist. Dann muss man Bluetooth dort halt manuell deaktivieren.
Modi-Umschalten per Skripte regeln
Ich höre Musik normalerweise so, dass mein Raspberry Pi das Wiedergabegerät ist (via mpd). Zwischendurch möchte ich aber auch Musik vom Smartphone über meine Anlage abspielen. Hierzu gebe ich natürlich keine Befehle in der Konsole ein, sondern starte je zwei Skripte.
Skript 1: Raspberry als Bluetooth-Empfänger
Damit mein Raspberry Pi als Bluetooth-Empfänger für Audio bzw. Musik fungieren kann, starte ich dieses Skript:
#!/bin/bash # 1. Alte Instanzen mit sudo beenden sudo pkill -f "bluealsa-aplay" # 2. Kurze Pause für ALSA sleep 1 # 3. Ansage abspielen aplay -D hw:0,0 /home/dietpi/00_Skripte/Bluetooth/wiedergabe-via-bluetooth-aktiviert.wav # 4. Brücke im Hintergrund starten sudo bluealsa-aplay -D hw:0,0 > /dev/null 2>&1 & echo "Bluetooth-Empfang aktiviert."
Speichern als z. B. raspberry_ist_bt-empfaenger.sh
Wie man sieht, wird vor dem Umschalten eine Tondatei abgespielt. Diese muss natürlich vorhanden sein bzw. der Pfad dazu muss im Skript angepasst sein. Es ertönt dann eine Stimme: Wiedergabe via Bluetooth aktiviert. Diese Zeile kann man natürlich löschen, wenn man dies nicht wünscht. Diese Tondatei (wav-Datei) kann man sich hier herunter laden und sie hört sich so an:
Und: Natürlich muss man im Skript die korrekten Karten-Ziffern (0,0) angeben; s. o.
Skript 2: Raspberry wieder als regulärer Audio-Player
Damit der Raspberry Pi (z. B. via Kodi) selbst Audio wiedergeben kann, muss der Bluetooth-Modus wieder gestoppt werden:
#!/bin/bash
# 1. Alle aktuell verbundenen (klassischen) Bluetooth-Geräte ermitteln und trennen
connected_devices=$(bluetoothctl devices Connected | cut -d' ' -f2)
for mac in $connected_devices; do
echo "Trenne Gerät: $mac"
echo "disconnect $mac" | bluetoothctl
done
# 2. Die Bluetooth-Audio-Brücke am Pi beenden
sudo pkill -f "bluealsa-aplay"
# 3. Kurze Pause für das System (ALSA-Freigabe)
sleep 1
# 4. Ansage abspielen
aplay -D hw:0,0 /home/dietpi/00_Skripte/Bluetooth/lokale-wiedergabe-aktiv.wav
echo "Bluetooth-Gerät getrennt."
Speichern als z. B. raspberry_ist_abspielgeraet.sh
Auch hier habe ich eine Tonansage eingebaut: Lokale Wiedergabe aktiv:
Diese wav-Datei kann man sich hier herunter laden. Selbstredend muss man im Skript den Pfad zur Tondatei korrigieren. Man kann die entsprechende Zeile natürlich auch ganz entfernen, wenn man keine Ansage haben möchte.
Toggle-Skript
Damit man nicht jedes Mal zwei Skripte bedienen muss, kann man beide auch mit einem einzigen „Toggle“-Skript, also mittels Umschalter, ausführen – je nach aktuellem Zustand:
#!/bin/bash
# Prüfen, ob bluealsa-aplay gerade läuft
if pgrep -f "bluealsa-aplay" > /dev/null
then
echo "Modus: Raspberry -> Stereoanlage"
bash /home/dietpi/00_Skripte/Bluetooth/raspberry_ist_abspielgeraet.sh
else
echo "Modus: Bluetooth -> Raspberry -> Stereoanlage"
bash /home/dietpi/00_Skripte/Bluetooth/raspberry_ist_bt-empfaenger.sh
fiSpeichern als z. B. raspberry_toggle_analog-out_bt-in.sh
Auch hier: Natürlich muss man die Pfade zu den beiden Basis-Skripten anpassen. Dieses Toggle-Skript ermittelt einfach, ob der Raspberry Pi sich nun gerade im regulären Audio-Wiedergabe-Modus befindet, oder ob er derzeit als Bluetooth-Empfänger arbeitet. Entsprechend wird dann das nötige Skript zum Umschalten ausgeführt.
Kurzum
Ich nutze meinen Raspberry Pi täglich für diverse Einsatzzwecke. Ich höre regelmäßig Musik über ihn (bzw. über meine Stereoanlage). Bisweilen soll die Anlage aber auch den Ton vom Smartphone oder Tablet wiedergeben. Dann starte ich das Toggle-Skript (ich tue dies meist via Taste auf der Infrarot-Fernbedienung für den Pi), verbinde diese Geräte via Bluetooth und schon ertönt die Musik über die großen Holzlautsprecher.
Was allerdings nicht gut geht: Ton von Videos. Hier gibt es eine deutliche Verzögerung. Der Ton ist nicht synchron. Vielleicht könnte man dies irgendwie beheben (kein Puffer?). Aber da ich nur Musik mit dem Raspberry höre, stört mich dies nicht.
