This gist will show how to setup Raspbian Stretch as a headless Bluetooth A2DP audio sink. This will allow your phone, laptop or other Bluetooth device to play audio wirelessly through a Rasperry Pi.
A quick search will turn up a plethora of tutorials on setting up A2DP on the Raspberry Pi. However, I felt this gist was necessary beacuse this solution is:
- Automatic & Headless - Once setup, the system is entirely automatic. No user iteration is required to pair, connect or start playback. Therefore the Raspberry Pi can be run headless.
- Simple - This solution has few dependencies, readily available packages and minimal configuration.
- Up to date - As of December 2017. Written for Raspbian Stretch & Bluez 5.43
- Raspberry Pi - I used the Raspberry Pi 3. The Pi 3 has integrated Bluetooth, however there is a known bug when the WiFi is used simultaneously.
- Raspbian Stretch Lite - See the offical guide on how to install the latest Raspbian OS: https://www.raspberrypi.org/learning/software-guide/quickstart/
If you are using a separate USB Bluetooth dongle, disbale the integrated Bluetooth to prevent conflicts.
To disable the integrated Bluetooth Add the
# Disable onboard Bluetooth
dtoverlay=pi3-disable-bt
to /boot/config.txt and execute the following command
sudo systemctl disable hciuart.service
First execute the following commands to make sure the system is up to date.
sudo apt-get update
sudo apt-get upgrade
Then reboot the Pi to ensure the latest kernal is loaded.
Now install the pre-requisite packages.
sudo apt-get install bluealsa python-dbus
Normally a Bluetooth device is only discoverable for a limited amount of time. Since this is a headless setup we want the device to always be discoverable.
- Set the DiscoverableTimeout in
/etc/bluetooth/main.confto 0
# How long to stay in discoverable mode before going back to non-discoverable
# The value is in seconds. Default is 180, i.e. 3 minutes.
# 0 = disable timer, i.e. stay discoverable forever
DiscoverableTimeout = 0
- Enable discovery on the Bluetooth controller
sudo bluetoothctl
power on
discoverable on
exit
On recent raspbian:
Using a2dp-playback.service with
piuser not works, because of permissions issues for that user:Adding to lp and bluetooth not enough too... I changed to run as root for now. Please check.