Dienstag, 16. Mai 2017

Raspberry Pi 3 commandline Verbindung zu Bluetooth Lautsprecher

Zielstellung

Einrichten des Raspberry Pi via commandline, um dieses mit einem Bluetooth Lautsprecher zu verbinden und Musik abzuspielen. Dazu werden folgende Schritte beschrieben.

  1. Bluetooth Konfiguration
  2. Audio Konfiguration
  3. Audioausgabe

Materialliste

  • Raspberry Pi 3
  • uSD Karte
  • Netzteil
  • raspbian light image (2017-04-10-raspbian-jessie-lite.zip)
  • Bluetooth Lautsprecher z.B. xq B20
  • PC/Notebook mit Linux Mint
  • Internet - Zugang
  • WiFi mit aktiven DHCP

Bluetooth Konfiguration

Im aktuellen Raspbian 2017-04-10-raspbian-jessie-lite.zip sind bereits die notwendigen Tools enthalten und der Bluetooth Service wird beim Start auch automatisch geladen. Zur Kontrolle kann man sich wie folgt die Version der Bluetooth Tools anzeigen lassen:

pi@raspberrypi:~ $ dpkg -l bluez
Gewünscht=Unbekannt/Installieren/R=Entfernen/P=Vollständig Löschen/Halten
| Status=Nicht/Installiert/Config/U=Entpackt/halb konFiguriert/
         Halb installiert/Trigger erWartet/Trigger anhängig
|/ Fehler?=(kein)/R=Neuinstallation notwendig (Status, Fehler: GROSS=schlecht)
||/ Name                    Version          Architektur      Beschreibung
+++-=======================-================-================-====================================================
ii  bluez                   5.23-2+rpi2      armhf            Bluetooth tools and daemons

Die Verbindung zum Bluetooth Lautsprecher lässt sich z.B. über das interaktive Tool bluetoohctl herstellen. Nach dem das Tool gestartet wurde, wechselt es in einen Eingabemodus. In diesem können dann diverse Kommandos (z.B. scan, pair, trust, connect, etc.) abgesetzt werden.

Am folgenden Beispiel zeige ich, wie ich das Raspberry Pi mit dem Lautsprecher verbunden habe. Dazu werden folgende Kommandos abgesetzt:

  1. Nach Bluethooth Geräten suchen mit scan on
  2. Beenden des Suchvorgangs mit scan off
  3. Pairen mit BT Lautsprecher mit pair MAC
  4. Dem BT Lautsprecher vertrauen mit trust MAC
  5. Verbindung mit BT Lautsprecher herstellen mit connect MAC
  6. BT Gerät Information anzeigen mit info MAC
  7. bluetoohctl verlassen mit exit

Anschließend ist der Lautsprecher mit dem System verbunden und kann verwendet werden. Mal abgesehen vom connect Kommando müssen die Kommandos nur einmalig abgesetzt werden.

pi@raspberrypi:~ $ bluetoothctl
[NEW] Controller B8:27:EB:6C:2A:67 raspberrypi [default]
[bluetooth]# scan on
Discovery started
[CHG] Controller B8:27:EB:6C:2A:67 Discovering: yes
[NEW] Device C9:F8:A7:A1:90:D0 C9-F8-A7-A1-90-D0
[NEW] Device BC:85:56:CC:3A:7F BRAVIA
[NEW] Device 10:B7:F6:18:B6:39 xqB20
[bluetooth]# scan off
[CHG] Device 10:B7:F6:18:B6:39 RSSI is nil
[CHG] Device BC:85:56:CC:3A:7F RSSI is nil
[CHG] Device C9:F8:A7:A1:90:D0 RSSI is nil
Discovery stopped
[CHG] Controller B8:27:EB:6C:2A:67 Discovering: no
[bluetooth]# pair 10:B7:F6:18:B6:39
Attempting to pair with 10:B7:F6:18:B6:39
[CHG] Device 10:B7:F6:18:B6:39 Connected: yes
[CHG] Device 10:B7:F6:18:B6:39 UUIDs:
    0000110b-0000-1000-8000-00805f9b34fb
[CHG] Device 10:B7:F6:18:B6:39 Paired: yes
Pairing successful
[CHG] Device 10:B7:F6:18:B6:39 Connected: no
[bluetooth]# trust 10:B7:F6:18:B6:39
[CHG] Device 10:B7:F6:18:B6:39 Trusted: yes
Changing 10:B7:F6:18:B6:39 trust succeeded
[bluetooth]# connect 10:B7:F6:18:B6:39
Attempting to connect to 10:B7:F6:18:B6:39
[CHG] Device 10:B7:F6:18:B6:39 Connected: yes
Connection successful
[bluetooth]# info 10:B7:F6:18:B6:39
Device 10:B7:F6:18:B6:39
    Name: xqB20
    Alias: xqB20
    Class: 0x240414
    Icon: audio-card
    Paired: yes
    Trusted: yes
    Blocked: no
    Connected: yes
    LegacyPairing: no
    UUID: Audio Sink                (0000110b-0000-1000-8000-00805f9b34fb)
[bluetooth]# exit
pi@raspberrypi:~ $ bluetoothctl
[NEW] Controller B8:27:EB:6C:2A:67 raspberrypi [default]

[bluetooth]# scan on
Discovery started
[CHG] Controller B8:27:EB:6C:2A:67 Discovering: yes
[NEW] Device 10:B7:F6:18:B6:39 xqB20

[bluetooth]# scan off
[CHG] Device 10:B7:F6:18:B6:39 RSSI is nil
Discovery stopped
[CHG] Controller B8:27:EB:6C:2A:67 Discovering: no

[bluetooth]# pair 10:B7:F6:18:B6:39
Attempting to pair with 10:B7:F6:18:B6:39
[CHG] Device 10:B7:F6:18:B6:39 Connected: yes
[CHG] Device 10:B7:F6:18:B6:39 UUIDs:
    0000110b-0000-1000-8000-00805f9b34fb
[CHG] Device 10:B7:F6:18:B6:39 Paired: yes
Pairing successful
[CHG] Device 10:B7:F6:18:B6:39 Connected: no

[bluetooth]# trust 10:B7:F6:18:B6:39
[CHG] Device 10:B7:F6:18:B6:39 Trusted: yes
Changing 10:B7:F6:18:B6:39 trust succeeded

[bluetooth]# connect 10:B7:F6:18:B6:39
Attempting to connect to 10:B7:F6:18:B6:39
[CHG] Device 10:B7:F6:18:B6:39 Connected: yes
Connection successful

[bluetooth]# info 10:B7:F6:18:B6:39
Device 10:B7:F6:18:B6:39
    Name: xqB20
    Alias: xqB20
    Class: 0x240414
    Icon: audio-card
    Paired: yes
    Trusted: yes
    Blocked: no
    Connected: yes
    LegacyPairing: no
    UUID: Audio Sink                (0000110b-0000-1000-8000-00805f9b34fb)

[bluetooth]# exit

Audio Konfiguration

Für die Audioausgabe verwende ich pulseaudio und das zugehörige Bluetooth Modul. Beides ist in dem von mir verwenden Raspbian light nicht enthalten und muss wie folgt nach installiert werden.

pi@raspberrypi:~ $ sudo apt-get install pulseaudio-module-bluetooth

Anschließend lassen sich mit dem Tool pactl weitere Einstellungen vornehmen:

Auflisten der Audiosenken:

pi@raspberrypi:~ $ pactl list sinks short
0   alsa_output.platform-soc_audio.analog-stereo    module-alsa-card.c  s16le 2ch 48000Hz   SUSPENDED
1   bluez_sink.10_B7_F6_18_B6_39    module-bluez5-device.c  s16le 2ch 44100Hz   SUSPENDED

Den Bluetooth Speaker als default Audiosenke einstellen.

pi@raspberrypi:~ $ pactl set-default-sink 1

Einstellen der Audiolautstärke.

pi@raspberrypi:~ $ pactl set-sink-volume 1 20%

Audioausgabe

Mit dem Tool wget zuerst eine Beispiel Datei von der Seite The Hitchhiker's Guide to the Galaxy herrunterladen. Diese kann danach mit paplay abgespielt werden. Wenn alles klappt, sollte die Tonausgabe via Bluetooth Lautsprecher erfolgen.

pi@raspberrypi:~ $ wget http://youness.net/wp-content/uploads/2016/08/h2g2.ogg
pi@raspberrypi:~ $ paplay h2g2.ogg

Neustart

Die mit bluetoohctl hergestellte Verbindung ist nicht persistent, d.h. diese wird beim Neustart nicht automatisch wieder hergestellt. Um bei einem Neustart z.b. per Skript eine Verbindung zu einem bekannten Bluetooth Lautsprecher aufzubauen, kann folgendes Kommando verwendet werden.

pi@raspberrypi:~ $ echo -e "connect 10:B7:F6:18:B6:39\nquit" | bluetoothctl
[NEW] Controller B8:27:EB:6C:2A:67 raspberrypi [default]
[NEW] Device 10:B7:F6:18:B6:39 xqB20
[bluetooth]# connect 10:B7:F6:18:B6:39
Attempting to connect to 10:B7:F6:18:B6:39
[bluetooth]# quit
[DEL] Controller B8:27:EB:6C:2A:67 raspberrypi [default]

Referenz

Diese Vorgehensweise basiert auf der Anleitung von der Seite: https://kofler.info