Bluetooth-speaker koppelen aan Raspberry Pi

Home automation, ook wel domotica genoemd, draait om het automatiseren van apparaten in woonhuizen. Whirlwind volgt deze ontwikkelingen met interesse en schrijft uit eigen ervaring zo nu en dan een artikel over dit onderwerp. In dit artikel koppelen we een Bluetooth-speaker aan Snapcast, een multi-room-audioserver en client voor onder andere Raspberry Pi (meer informatie over Snapcast is vermeld in ons artikel Multi-room Spotify via Raspberry Pi). Veel Bluetooth-speakers hebben een accu en kunnen bijvoorbeeld gebruikt worden op een terras, balkon of in een badkamer.

We gebruiken een Raspberry Pi met besturingssysteem Raspbian Stretch. Raspbian Stretch bevat bluealsa. Bluealsa zorgt voor de koppeling tussen het Linux-geluidssysteem ALSA (Advanced Linux Sound Architecture) en Bluetooth zodat het geluid naar de Bluetooth-speaker wordt gestuurd.

Overigens kan de Raspberry Pi aan één Bluetooth-speaker gekoppeld worden. Verder treedt een lichte vertraging op vanwege het Bluetooth-protocol; de muziek op de Bluetooth-speaker loopt iets achter ten opzichte van andere Snapcast-clients. Als Snapclient ingesteld wordt op een latency van bijvoorbeeld 150 milliseconden, is deze vertraging minder merkbaar.

Besturingssysteem bijwerken

Met de volgende commando’s wordt de software op de Raspberry Pi bijgewerkt en vervolgens opnieuw gestart.

sudo apt-get update
sudo apt-get dist-upgrade (eventueel met --fix-missing)
sudo reboot

Installatie pi-btaudio

We gebruiken pi-btaudio, een installatiescript dat het volgende doet: 

  • De service /etc/systemd/system/bluealsa.service wordt aangemaakt. Deze service start bluealsa. Met het commando sudo service bluealsa status kan de status bekeken worden.
  • Het configuratiebestand /etc/asound.conf wordt aangemaakt. Dit bestand zorgt ervoor dat al het geluid van de Raspberry Pi naar de Bluetooth-speaker wordt gestuurd.
  • Er wordt een watchdog daemon geïnstalleerd. Dit is nodig om sommige Bluetooth-speakers automatisch te verbinden. Met het commando sudo service pi-btaudio status kan de status bekeken worden. Indien problemen optreden of als deze daemon overbodig is, kan deze uitgeschakeld worden met sudo systemctl disable pi-btaudio.service.
  • De scripts btaudio-connect en btaudio-disconnect worden geïnstalleerd zodat je de Bluetooth-verbinding handmatig kunt maken of verbreken door deze commando’s in te voeren.

Download en installeer pi-btaudio met:

git clone https://github.com/bablokb/pi-btaudio.git
cd pi-btaudio
sudo tools/install

Bluetooth-speaker koppelen

De volgende stap is het koppelen van de Bluetooth-speaker aan de Raspberry Pi.

sudo bluetoothctl
power on
pairable on
agent on
default-agent
scan on

Schakel de Bluetooth-speaker in en wacht totdat deze gedetecteerd is. Noteer het MAC-adres van de Bluetooth-speaker, bijvoorbeeld 00:58:56:0F:04:4B en voer de volgende commando’s in.

trust 00:58:56:0F:04:4B
pair 00:58:56:0F:04:4B
connect 00:58:56:0F:04:4B

Sluit bluetoothctl met exit.

Configuratie ALSA

Open het ALSA-configuratiebestand met sudo nano /etc/asound.conf en vul het MAC-adres van de Bluetooth-speaker in bij defaults.bluealsa.device.

Voor Snapcast is het noodzakelijk om een virtuele geluidskaart aan te maken. Voeg het onderstaande toe aan asound.conf:

pcm.bt_speaker {
   type plug
   slave {
      pcm {
         type bluealsa
         device 00:58:56:0F:04:4B
         profile "a2dp"
      }
   }
   hint {
      show on
      description "BT Speaker"
   }
}

Herstart de Raspberry Pi met sudo reboot. Na de herstart wordt de Bluetooth-speaker als het goed is automatisch verbonden. Stel eventueel het volume in met alsamixer.

Snapclient koppelen aan Bluetooth-speaker

Snapclient moet aan de virtuele geluidskaart gekoppeld worden. Vraag een lijst van geluidskaarten op met snapclient -l.

Stel dat de virtuele geluidskaart bt_speaker met 1 wordt aangeduid, configureer Snapclient dan als volgt. Open het Snapclient-configuratiebestand met sudo nano /etc/default/snapclient en wijzig de onderstaande variabele in:

SNAPCLIENT_OPTS="--soundcard 1 --latency 150"

Herstart de Snapcast client. De muziek wordt nu afgespeeld op de Bluetooth-speaker.