Introduction: BOSEBerry Pi Internet Radio

I love listening to the radio! I was using a DAB radio in my house, but found the reception was a bit patchy and the sound kept breaking up, so I decided to build my own internet radio. I have a strong wifi signal around my house and the digital broadcast should mean that I was able to play high fidelity sound.

I didn't want to use a smart speaker. I wanted to switch the radio on, be able to change channels and then switch it off, so it behaved just like a traditional radio but as it was using the internet for its connectivity, I could listen to radio channels from anywhere in the world.

I managed to find a second hand BOSE SoundDock series II model on ebay (cost £5.33) but it was listed as not working. This wasn't a problem as I would remove all the internal circuitry to add my own.


A Bose SoundDock (I used the series II model)

Raspberry Pi Zero Wireless with right angle GPIO header pins

DAC decoder PCM5102A

Amplifier PAM8403

VS1838B infrared receiver

HX1838 remote control

Barrel jack 2.1mm socket

Connecting wire (I used wirewrap)

3D printing facilities

Spool of PLA printer filament

Acrylic lacquer spray

Enamel paint

M3 nuts

M3 x 8mm dome head hex drive machine screws

IR receiver LED

Veroboard & header pins

Step 1: Disassemble the Unit and Clean It

The SoundDock is easy to take apart. Remove the base first and disconnect the wiring loom. The front ipod docking sections uses Torx T6 spline screws.

Remove the front wire mesh panel. This is a friction fit that uses foam to grip the side of the case. I managed to loosen it with a hook type pick and then it lifted out easily. I have seen instructions to remove these by twisting a coin in the slot between the wire mesh and the case, but I didn't want to mark the case with the edge of the coin.

The front panel acts as a heatsink for the original amplifier and can be removed with screws. This is then lifted out and the speakers and flat ribbon cable can be disconnected.

If your SoundDock is an old unit, it has probably picked up a lot of dust and grime. With all the electrical components removed, you can now give it a good clean in hot soapy water. I used a 'sticker remover' spray to clean up the mess left by a label. Remember not to use any abrasive cleaning materials, so you can preserve the high gloss finish on the case.

Step 2: 3D Print the Components

I designed a cradle that would mount to the inside of the alloy heatsink so that I could attach the Raspberry Pi, DAC decoder and amplifier components in a single compact unit.

The cradle comes in two parts, the lower part was printed with supports as there is a hole required in the side of the unit, so the micro SD card can be changed without having to disassemble the whole unit. These printed supports can easily be removed using a metal pick and a pair of fine-nosed pliers. The two parts of the cradle can be joined together with M3 machine screws and nuts that are held captive in the design.

A 40-pin right angle header was soldered onto the Raspberry Pi (RPi).

The RPi is mounted on some printed circuit board spacers which are then drilled out so the machine screws pass through easily. This is also done carefully on the Raspberry Pi corner mounting holes.

On the top of the cradle you will see the DAC PCM5102A with soldered right angle headers, a PAM amplifier and a double row of headers mounted on some veroboard to act as a power supply bus bar. The whole of this assembly can be attached to the alloy heat sink panel that attaches to the front of the SoundDock using the original screws.

The front name plate was designed to follow the radius of curvature of the case. I used embossed letters and it was printed out accurately, but I didn't think the BOSEBerry Pi name was particularly visible unless it caught the light in the correct way. I decided to paint the embossed letters to make them more visible. I sealed the print with a clear acrylic lacquer spray to fill any voids in the print surface. This should ensure that the next layer of coloured enamel paint didn't bleed through the printed layers of the piece. The enamel paint was built up in several coats. Whilst painting, some capilliary action did draw the paint up to the surface resulting in some smudges, but once it was dry, I was able to clean it up with some wet and dry paper and then add a final coat of clear lacquer to match the glossy finish of the unit.

Step 3: Configure the Pi

    The following instructions are the steps you need to go through in order to configure the radio software.

    1. Download Buster Lite from the zipped file – you will have a .img file.
    2. Format the micro SD card using SD card formatter
    3. Use Win32 Disk Imager to write Raspbian Buster onto the SD card (which takes about 10 minutes)
    4. Attach the Pi to a monitor and keyboard and login with username = pi, password = raspberry
    5. Type Sudo raspi-config into a console window.
    6. Menu option 8 – update this tool to latest version.
    7. Menu option 1 – change the user password and make a note of it.
    8. Menu option 2 – network options
      1. (N2) Enter WiFi details for your home network
      2. (N1) Change hostname to radiopi
    9. Menu option 3 – Enable Boot options (B1) and (B2) Console auto login
    10. Menu option 5 – Interfacing options (P2) enable SSH
    11. Menu option 7 – Advanced (A1) Expand filesystem
    12. Sudo apt-get update
    13. Sudo apt-get upgrade (15 minutes)
    14. Sudo rpi-update (to update firmware)
    15. RPiZ can now be used ‘headless’ so you can SSH into it to configure the rest of the settings. Log on to your router through a browser (something like and find the ip address of your radiopi. Download Putty and use it to log in to the Pi using the ip address you have just found. The username=pi and use your new password.
    16. sudo apt-get install lirc # install LIRC (enter y to continue)
    17. sudo nano /boot/config.txt
    18. uncomment and change pin number --> dtoverlay=gpio-ir,gpio_pin=23 #pin 16 on the board
    19. comment out #dtparam=audio=on
    20. dtoverlay=hifiberry-dac
    21. comment out RPi4 options dtoverlay=vc4-fkms-v3d and max_framebuffers=2
    22. ctrl X then Enter then ‘Y’ to save
    23. cd /etc/lirc
    24. ls to list the files in the directory
    25. sudo cp lirc_options.conf.dist lirc_options.conf
    26. sudo cp lircd.conf.dist lircd.conf
    27. sudo nano lirc_options.conf
    28. driver = default
    29. device = /dev/lirc0
    30. ctrl X then Enter then ‘Y’ to save
    31. sudo nano /etc/lirc/lircd.conf.d/HX1838.conf
    32. Copy in the definitions for HX1838.conf from text file (ctrl-insert to paste into the console)
    33. ctrl X then Enter then ‘Y’ to save
    34. cd /etc/lirc/lircd.conf.d
    35. ls to see files
    36. sudo mv devinput.lircd.conf devinput.lircd.conf.dist (to disable it)
    37. sudo nano /etc/lirc/lircrc
    38. paste in the configuration code for lircrc
    39. ctrl X then Enter then ‘Y’ to save
    40. sudo apt-get install mpd – enter ‘Y’ to continue (takes some time)
    41. sudo apt-get install mpc
    42. sudo nano /etc/rc.local
    43. comment out all the code except exit 0 at the end
    44. #add these next comments before exit 0
    45. add irexec -d
    46. add mpc stop
    47. add mpc volume 30
    48. #reduce the power requirements
    49. # switch off hdmi as this unit is headless
    50. /usr/bin/tvservice -o
    51. ctrl X then Enter then ‘Y’ to save
    52. Finally, create a new asound.conf by typing sudo nano /etc/asound.conf and entering the following:
    53. pcm.!default {
    54. type hw card 0
    55. }
    56. ctl.!default {
    57. type hw card 0
    58. }
    59. ctrl X then Enter then ‘Y’ to save
    60. sudo nano /etc/mpd.conf
    61. scroll down to amend these settings
    62. audio-output{
    63. Type “alsa”
    64. Name“My ALSA Device”
    65. Device “hw:0,0”
    66. Mixer_type “software”
    67. Mixer_device “default”
    68. Mixer_control “PCM”
    69. Mixer_index “0”
    70. }
    71. ctrl X then Enter then ‘Y’ to save
    72. sudo reboot
    73. You are now ready to connect the wires.

    I configured the radio stations to the following, but you can change the url streams and use any radio stations you want. See the attached lircrc configuration file.

    Key 0 = Jazz FM

    Key 1 = Absolute Classic Rock

    Key 2 = BBC Radio 2

    Key 3 = Classic FM

    Key 4 = BBC Radio 4

    Key 5 = BBC Radio 5

    Key 6 = BBC Radio 6 Music

    Key 7 = BBC Hereford and Worcester

    Key 8 = Absolute 80s Music

    Key 9 = Absolute 90s Music

    Up Arrow = volume up

    Down Arrow = volume down

    Key Left = Clear playlist

    Key Right = Clear playlist

    Key OK = Play

    Key Back = Toggle (which pauses live play)

    Key Exit = Stop

    Step 4: Wire Up the Project

    Connect the circuits up using the wiring tables above.

    I originally built the prototype on a breadboard to check that it worked. I was then able to transfer the wire connections to the components I had installed, using dupont connectors on the headers. Again, I was able to test to check that the unit was still working. Finally, I decided to make the final connections using a wirewrap tool. This provides a very neat way to connect the components and has the added bonus that connections can easily be 'undone' if necessary. The electrical connections made using this method are so good, they don't actually need soldering.

    The IR led receiver was added into the project by soldering it onto a small piece of veroboard which was then mounted in the place of the original LED at the front of the case. The wires were kept short and fed through the built in channel to connect to the RPi. This receiver will sit behind the fine wire mesh grill so that it is able to 'see' the IR signal from the remote control unit.

    Once the speakers have been secured in the cabinet, they can be attached to the stereo channels of the amplifier output. The female power supply jack socket can be threaded through the 3D printed support plate and wired into the bus bar of the circuit. The whole unit is powered by a 5v 3A plug in transformer.

    Anything Goes Contest

    Participated in the
    Anything Goes Contest