Raspberry Pi Bluetooth Speaker: Difference between revisions

From Alpine Linux
Line 90: Line 90:




edit ''/etc/mdev.conf'' using `sed`. '''s/#rpi bluetooth/rpi bluetooth/''' means replace '''#rpi bluetooth''' with '''rpi bluetooth'''.
edit ''/etc/mdev.conf'' and enable bluetooth. We're using `sed`, where '''s/#rpi bluetooth/rpi bluetooth/''' means replace '''#rpi bluetooth''' with '''rpi bluetooth'''.


   sed -i 's/#rpi bluetooth/rpi bluetooth/' /etc/mdev.conf
   sed -i 's/#rpi bluetooth/rpi bluetooth/' /etc/mdev.conf
   sed -i 's/#btattach -B \/dev\/ttyAMA0 -P bcm -S 115200 -N &/btattach -B \/dev\/ttyAMA0 -P bcm -S 3000000 &/rpi bluetooth/' /etc/mdev.conf
   sed -i 's/#ttyAMA0        root:tty 660 @btattach -B \/dev\/$MDEV -P bcm -S 115200/ttyAMA0        root:tty 660 @btattach -B \/dev\/$MDEV -P bcm -S 3000000/' /etc/mdev.conf
 
Note: the last command uncomments the ''btattach'' command and changes it to work with the Pi 4.
 
 
  apk add python3 py3-dbus py3-gobject3


   rc-update add bluetooth
   rc-update add bluetooth

Revision as of 12:37, 4 August 2021

How To Build a Raspberry Pi Bluetooth Speaker

This articles describes how to build a Bluetooth speaker. This article is being actively written.

Before You Start

You’ll need:

  • A Raspberry Pi
  • A Bluetooth USB dongle (if your Pi doesn’t have Bluetooth on board)
  • An active speaker or sound card and passive speaker(s)

Getting the Speaker(s) Working

The audio hardware can range from using the Raspberry Pi's on board audio with an external (active) travel speaker to wiring up an amplifier to some high-end passive speakers.

I'm testing this using Raspberry Pi's excellent IQaudio DigiAMP+ board with a pair bookshelf speakers and an old (active) travel speaker using the on board audio. It is possible to test by using headphones instead of active speakers.

Once the speaker(s), and possibly amplifier, are wired into the Pi, it's time to install a fresh version of Alpine Linux. The armv7 version from the Downloads page works on almost all Pis. This Wiki has several articles about installing Alpine on a Raspberry Pi.

Enable writing to the boot media:

 mount /media/mmcblk0p1 -o rw,remount

Then either enable the on board sound:

 echo "dtparam=audio=on" >> /media/mmcblk0p1/usercfg.txt

or your fancier sound card (e.g. IQaudIO):

 echo "dtoverlay=iqaudio-dacplus,unmute_amp" >> /media/mmcblk0p1/usercfg.txt

and then reboot your Pi.

Follow these instructions to enable ALSA. In summary

 apk add alsa-utils alsa-utils-doc alsa-lib alsaconf # the required software for sound
 aplay -l # should display a List of PLAYBACK Hardware Devices

In my case my list is:

 **** List of PLAYBACK Hardware Devices ****
 card 0: Headphones [bcm2835 Headphones], device 0: bcm2835 Headphones [bcm2835 Headphones]
   Subdevices: 8/8
   Subdevice #0: subdevice #0
   Subdevice #1: subdevice #1
   Subdevice #2: subdevice #2
   Subdevice #3: subdevice #3
   Subdevice #4: subdevice #4
   Subdevice #5: subdevice #5
   Subdevice #6: subdevice #6

Before you play anything from your speakers, I advise you to lower the volume first.

 amixer

displays a list of "simple controls"; for my headphones and the on-board sound, the output is this:

 Simple mixer control 'Headphone',0
   Capabilities: pvolume pvolume-joined pswitch pswitch-joined
   Playback channels: Mono
   Limits: Playback -10239 - 400
   Mono: Playback 0 [96%] [0.00dB] [on]

In this case there is only 1 control, 'Headphone', so I issue this command to lower the maximum volume to a comfortable level (50% in my case).

 amixer sset Headphone 50%

The IQaudIO DAC that I use has a much longer set of controls. I issued this command to set the volume:

 amixer sset 'Digital' 50 # quotes may be required if there are spaces in the control name

Note that there can be several interlinked controls, some of which are muted by defualt. ALSA (and other audio software on Linux) is notoriously under-documented, try `man amixer` for more information. Sometimes it is easier to use a more visual control to change the configuration:

 alsamixer

Finally, if you issue this command:

 speaker-test -t wav -c 2

Then you should hear "Front Left, Front Right" repeating from your chosen speakers. Now it's time to setup Bluetooth. Don't forget to save your changes (lbu commit) before moving on.

Bluetooth

I used Raspberry Pi 3 - Setting Up Bluetooth as a reference with some slight modifications as I am using a Pi 4.

Raspberry Pi 4

 apk add bluez
 btattach -B /dev/ttyAMA0 -P bcm -S 3000000 &
 # btattach -B /dev/ttyAMA0 -P bcm -S 115200 -N & # Pi 3 - not tested by me
 rc-service bluetooth start


edit /etc/mdev.conf and enable bluetooth. We're using `sed`, where s/#rpi bluetooth/rpi bluetooth/ means replace #rpi bluetooth with rpi bluetooth.

 sed -i 's/#rpi bluetooth/rpi bluetooth/' /etc/mdev.conf
 sed -i 's/#ttyAMA0         root:tty 660 @btattach -B \/dev\/$MDEV -P bcm -S 115200/ttyAMA0         root:tty 660 @btattach -B \/dev\/$MDEV -P bcm -S 3000000/' /etc/mdev.conf

Note: the last command uncomments the btattach command and changes it to work with the Pi 4.


 apk add python3 py3-dbus py3-gobject3
 rc-update add bluetooth
 lbu commit && reboot

Doing Something Title

Write the steps of how to do something in this section. If possible, show an example first, then tell your readers the steps. Break this procedure into separate procedures to avoid more than about 7-9 steps per procedure.

INSERT GREAT EXAMPLE HERE
  1. Answer the following three questions, at least in your head.
    1. What do I explain how to do?
    2. How do I do that?
    3. What do HOWTO readers already know about doing that?
  2. Write up a good example. This ensures you can do it.
  3. Write up the steps to do it.
  4. Write the background info/prerequisites readers need.
  5. Write the summary.
  6. Clean up your work.
  7. Revise, revise, revise.

See Also

Raspberry Pi's blog on How to play sound and make noise with your Raspberry P

There are lots of speaker and amplifier options: