Für meinen Raspberry Pi brauche ich nun eine Sprachausgabe da Karotz gestorben ist. Ich habe noch einen < 5 Euro Bluetooth Speaker aus der China-Bucht liegen. So ein Teil:
Denn wollte ich nun drahtlos anbinden.
Dazu verwende ich für den Raspberry Pi den folgenden Bluethooth USB-Adapter, denn ich schon mal mit Fhem angebunden hatte.
Das ist schnell gemacht!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# Zuerst das System updaten sudo apt-get update sudo apt-get upgrade # etwas Softwre für Bluetooth usw. installieren sudo apt-get install pi-bluetooth blueman pulseaudio pavucontrol pulseaudio-module-bluetooth mpg321 bluez # den Bluethooth USB-Adapter in den USB-Port stecken und ein reboot # dann müsste der Bluethooth USB-Adapter in der Liste erscheinen wenn man lsusb # eingibt, bei mir # Bus 001 Device 004: ID 050d:0012 Belkin Components F8T012 Bluetooth Adapter # ok, der Adapter wird erkannt, ist er auch aktive, das Testen wir mit /etc/init.d/bluetooth status # ok Ausgabe # ● bluetooth.service - Bluetooth service # Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled) # Active: active (running) since Mon 2016-12-26 17:50:12 CET; 48min ago # Docs: man:bluetoothd(8) # Main PID: 331 (bluetoothd) # Status: "Running" # CGroup: /system.slice/bluetooth.service # └─331 /usr/lib/bluetooth/bluetoothd # # Wenn der Lautsprecher im Koppelmodus ist, dann Testen evl. mehrfach versuchen, bis der Lautsprecher gelistet wird hcitool scan # man bekommt in der Liste die Adresse, jetzt kann man noch testen ob sie erreichbar ist mit sudo l2ping -c 1 37:00:00:00:8E:C4 # da muss dann soetwas zurück kommen # Ping: 37:00:00:00:8E:C4 from 00:00:3A:69:11:7D (data size 44) ... # 44 bytes from 37:00:00:00:8E:C4 id 0 time 178.73ms # 1 sent, 1 received, 0% loss # # Jetzt koppeln wir den Speaker mit dem Programm bluetoothctl # dort auf der Kommandozeile geben wir diese Befehle ein scan on # Das Programm listet nun alle erkannten Geräte in Funkreichweite auf. Dieser Vorgang kann geraume Zeit dauern, einzelne Geräte werden dabei immer wieder aktualisiert # ausschalten geht mit scan off # dann einen sogenannten Bluetooth-Agenten starten agent on # den Lautsprechern nun pairen pair 37:00:00:00:8E:C4 # es muss pairing successful ausgegeben werden # dann das Gerät vertrauen trust 37:00:00:00:8E:C4 # und verbinden connect 37:00:00:00:8E:C4 # wenn das alles geklappt hat, mit info checken: info 37:00:00:00:8E:C4 # Ausgabe dann z.B. # [bluetooth]# info 37:00:00:00:8E:C4 # Device 37:00:00:00:8E:C4 # Name: BT-SPEAKER # Alias: BT-SPEAKER # Class: 0x242404 # Icon: audio-card # Paired: yes # Trusted: yes # Blocked: no # Connected: yes # LegacyPairing: yes # UUID: Headset (00001108-0000-1000-8000-00805f9b34fb) # UUID: Audio Sink (0000110b-0000-1000-8000-00805f9b34fb) # UUID: A/V Remote Control (0000110e-0000-1000-8000-00805f9b34fb) # UUID: Handsfree (0000111e-0000-1000-8000-00805f9b34fb) # Evl. muss das man immer wieder auf das zu konfigurierenden Bluetooth-Geräten auf den Pairing-Knopf drücken, damit das Gerät so der Umwelt signalisiert, dass es bereits # zum Verbindungsaufbau ist. Es blinkt die LED. # # nun holen wir uns eine mp3 Testdatei mit: wget http://blog.wenzlaff.de/wp-content/uploads/2016/12/hallo-thomas-wie-geht-es-dir.mp3 # zum abspielen der mp3 Dateinen nun das pulseaudio starten mit pulseaudio --start # und die MP3 Datei abspielen mit mpg321 hallo-thomas-wie-geht-es-dir.mp3 # als Ergebnis wir die Datei abgespielt und der Text ausgegeben: # High Performance MPEG 1.0/2.0/2.5 Audio Player for Layer 1, 2, and 3. # Version 0.3.2-1 (2012/03/25). Written and copyrights by Joe Drew, # now maintained by Nanakos Chrysostomos and others. # Uses code from various people. See 'README' for more! # THIS SOFTWARE COMES WITH ABSOLUTELY NO WARRANTY! USE AT YOUR OWN RISK! # Playing MPEG stream from hallo-thomas-wie-geht-es-dir.mp3 ... # MPEG 2.0 layer III, 48 kbit/s, 22050 Hz mono # # [0:01] Decoding of hallo-thomas-wie-geht-es-dir.mp3 finished. # # Wave Dateien können so abspielen aplay beispiel.wav |
Hier gibt es die MP3 Testdatei zum Anhören:
Hier mal das Ergebnis als Video:
So, das läuft erst einmal. Wenn das Gerät nun ausgeschaltet wird muss es wieder manuell neue verbunden werden mit:
1 2 |
bluetoothctl connect 37:00:00:00:8E:C4 |
Am nächsten Tag klappte das Abspielen nicht mehr. Dann mal geschaut und
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# Pulseaudio neu gesartet pulseaudio --start # geschaut ob noch connected ist mit bluetoothctl info 37:00:00:00:8E:C4 # geschaut welche Geräte vorhanden sind pactl list sinks short # liefert zwei Geräte # 0 alsa_output.0.analog-stereo module-alsa-card.c s16le 2ch 44100Hz SUSPENDED # 2 bluez_sink.37_00_00_00_8E_C4 module-bluez5-device.c s16le 2ch 44100Hz SUSPENDED # dann das 0 als Default gesetzt, und es tut wieder pactl set-default-sink 0 # oder pactl set-default-sink bluez_sink.37_00_00_00_8E_C4 |
Das wollen wir nun automatisieren. Dazu die folgende start-connect.sh Datei angelegt:
1 2 3 4 5 |
#/sh/bin bluetoothctl << EOF connect 37:00:00:00:8E:C4 EOF echo "Automatisch Connected" |
Noch ausführbar gemacht mit
1 |
chmod +x start-connect.sh |
Dann noch eine Testdatei start-lautsprecher-mp3-testausgabe.sh erstellt:
1 2 3 |
#/sh/bin mpg321 hallo-thomas-wie-geht-es-dir.mp3 |
Noch ausführbar gemacht mit
1 |
chmod +x start-lautsprecher-mp3-testausgabe.sh |
Jetzt braucht nach einem ausschalten des Lautsprechers nur ein
1 2 3 4 |
./start-connect.sh # und zum testen ein ./start-lautsprecher-mp3-testausgabe.sh # ausgeführt werden. |
So, wenn die Lautstärke verändert werden soll, geht das mit:
1 2 3 4 |
# schauen unter welcher Nr. der Lautsprecher läuft mit pactl list sinks short # wenn unter 2, dann für volle Pulle pactl set-sink-volume 2 100% |
So dann wurde nach dem ausloggen aus der Terminal Session jedesmal die Verbindung getrennt. Deshalb den User in die bluetooth Gruppe hinzufügen mit
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
sudo usermod -G bluetooth -a pi # checken ob es geklappt hat cat /etc/group | grep bluetooth # muss mit pi enden # bluetooth:x:113:pi # dann noch ein reboot sudo reboot # dann läuft es nach einem connect weiter # wohl doch noch nicht # in # /etc/rc.local noch ein echo -e "connect AA:BB:CC:DD:EE:FF \nquit" | bluetoothctl # eingefügt, und nach einem sudo reboot # den connect gestartet mit (evl. liegt es auch an dem & das hilft?) ./start-connect.sh & # dann läuft es jetzt schon mal ein paar Minuten # dann den User noch in die Gruppe ergänzt sudo adduser pi pulse-access # und reboot sudo reboot # mal sehen wie lange es nun tut 24h tut es jetzt jedenfalls schon mal... |
So diese Scripte können nun über OpenHab aufgerufen werden. Dazu aber mehr in 2017 …