Raspberry Pi zero portable music player

Similar projects worth following
This is a portable music player based on a Raspberry Pi Zero. The first version was made using common modules this made it quite a mess, big and fragile. That's why I am currently working on a second version. This new version will have all the electronics on a single PCB.

The current version has a music player interface written in Python, this interface will get a redesign for the bigger display. Currently planned is an import tool for a PC that will index the music and perform loudness normalization. I am also planning to make a docking station.


  • 1200 mAh battery
  • 2.2" TFT display
  • 24-bit DAC
  • Safe shutdown circuit
  • Navigation, volume and power buttons
  • Music player interface
    • Index music from /Music folder
    • Sorting by artist, album and tracks
    • Control volume
    • Queueing
    • Shuffling the queue
    • Sleep mode (Backlight off)
    • Display artist name, album title and track title

To do

  • Desktop tool
    • Import music
    • Update music library database
    • Loudness normalization
    • Album cover download
  • Music player interface
    • Redesign of UI
  • Hardware
    • Building and testing
    • Docking station


Ethernet gadget:


View all 8 components

  • Update #7 Fully assembled PCB

    bram7 days ago 0 comments

    I have finally assembled a complete PCB, there are few change I will make on rev 2 but I have a prototype working. The power down function on this prototype isn't working yet and is kinda fixed by adding a slide switch. I've also decided to switch back to a PCM5102 DAC because I couldn't get a good enough clock pulse from the RPi to provide the CS4344 DAC with a MCLK. If I want to use this DAC I will have to add an external clock and for this I would have to redo the PCB and hope that I could get the drivers working. That's why I have decided to go back to the PCM5102 DAC on this prototype the DAC is sandwiched between the PCB and the RPi.

  • Update #6 First PCB received

    bram05/16/2018 at 19:18 1 comment

    Today I received the first version of the PiPod PCB from PCBWay surprisingly I received it earlier than the PCB's I ordered from Oshspark.  I first wanted to test parts of the circuit with the boards from Oshspark but because the board from PCBway was very cheap I decided to order it. So here they are:

    As you can see I ordered 0.8mm black PCB's this didn't cost anything extra. The boards come with HASL finish and an ENIG finish does cost extra but for this first prototype it doesn't really matter. When you select these options, the price is about the same as the Aisler and Oshspark boards the only difference is the quantity. The quality of these boards look good, the only quality issue I've found are the holes that aren't completely covered.

    Here are some more close-ups:

    I am still waiting on a couple of parts and when it has arrived I will assemble it further, for now I've soldered on the buttons to test the case.

  • Update #5 mockup of V2

    bram05/14/2018 at 20:57 0 comments

    Exploded view of the design

    Compared to V1 and my phone

  • Project details V1

    bram05/14/2018 at 20:14 0 comments


    • 1200 mAh battery
    • 1.8" TFT display
    • 24-bit DAC
    • Dimensions: 92mm x 70mm x 13,5mm
    • On/Off switch
    • 5 control buttons
    • Music player interface
      • Index music from /Music folder
      • Sorting by artist, album and tracks
      • Control volume
      • Queueing
      • Shuffling the queue
      • Sleep mode (Backlight off)
      • Display artist name, album title and track title

    Why did I build this?

    I had some spare time when I heard Apple was discontinuing their Ipod line. While I was reading about it I remembered that I had most part to build a MP3 player laying around, so I decided to build one.

    Project cost

    The price of this project is an approximation because I had most of the parts laying around.

    Raspberry Pi zero€ 5,50
    I2S DAC€ 3,00
    1.8" TFT display€ 4,00
    Powerboost 500C€ 17,95
    1200 mAh battery
    € 11,95
    64GB SD card
    € 30,99
    Other small bits and pieces€ 5,00
    Total€ 78,39


    Ethernet gadget:


  • update #4: Power button and custom PCB's

    bram05/05/2018 at 23:03 0 comments

    I am currently working on a single PCB PiPod. This new version of the PiPod will have a higher resolution display(2.2" 320x240), a bigger battery and a safe shutdown button. I have designed three small modules for the new parts that I want to use on this version these are currently being produced by @oshpark . While I am waiting on the PCB's and parts to arrive I am working on the final version that I want to verify with these small modules. These modules are also a great way to practice using my new reflow station before using it on the PiPod ;)


    Boost circuit
    Boost circuit
    DAC - CS4344
    DAC - CS4344

    Safe shutdown

    This power button circuit will make the Raspberry pi boot while the pi is booting it will turn on a GPIO that turns on  the booster circuit and a LED to indicate that the power button can be released.

  • Update #3: Better audio

    bram09/18/2017 at 20:46 0 comments

    Audio output

    Recently I milled a PCB with the audio circuitry on it from the original RPi and when I received the little I2S DAC from China last week I compared both the boards on audio quality.

    The quality of the dead bugged together solution was okay but it had a bit of white noise, I hoped that most of that white noise would be gone with the milled PCB but that wasn't the case. If the milled PCB wouldn't have had the white noise it would have been the perfect board because the audio quality was good enough (I only use it with earbuds) and it would have fitted better then the I2S DAC.

    I was really surprised with the quality of the I2S DAC, it is really small and the audio quality is great. I have edited the case so it would fit this board, I had to make the walls a bit thinner at the top to have the extra space needed for the board but that is unnoticeable. I also moved the power switch to make some room for the component of the DAC and with all that extra room I added a extra screw hole because I noticed on the first version that the case didn't close properly. The updated case can be found on Thingiverse.

    All the electronics inside

    What's next?

    The front part of the case is currently outdated but it still fits so I will keep it until I have decided what I am going to use as input method. I am currently looking at capacitive touch buttons and I will soon receive a kit of different kind of buttons I could try. If I have decided I will print a new front and mill a PCB for the buttons.

  • Update #2: updated case and initial PlayerUI release

    bram08/20/2017 at 01:02 0 comments

    Initial PlayerUI release

    I pushed the initial release of the interface I am writing for my music player, it is functional but there is still a long todo list.

    If all the modules are installed you can run this will load the main screen from there you can navigate to the Settings and update the library this will make the program look for all .MP3 files in the "Music" folder and save the metadata to a .csv file for a quick lookup.

    Main screen

    The main screen has all the controls on it and the information of the current song.


    Music submenu

    updated case

    I have also made a few changes to the case design, here they are:

    • The screw holes are now countersunk
    • There are little lids so the middle button won't completely rotate
    • The SD card hole is a little bigger
    • The clip for the audio connector is a bit thinner to be more flexible
    • The slide switch inserts from the back instead of the front

  • Update #1 Buttons and paint

    bram08/15/2017 at 19:11 0 comments

    I started by designing and printing the button caps for the first version of the case. These button caps are temporarily because I am still looking for the best input method for the PiPod. If I am going to use tactile buttons permanent I will redesign the front so the button caps move less.

    I've also bought some paint to test out how that would look. I used an old version of the back of the case that I sanded and but primer on to test out the color.

    This is the first time I used paint on a 3D print so I didn't know how much I should sand it down. The result of this test is pretty good but I do need to sand some parts more and use more filler.

    In this picture you can clearly see the print issues on the case. This issue could be solved by printing slower (like I did on the next print of the case). The metallic color I used to paint this part looks pretty good and I will probably use this color for the back.

View all 8 project logs

  • 1


    RPi headerDisplay
    GPIO 8 (CE0)CS
    GPIO 24D/C
    GPIO 23BL

    I2S DAC

    I2S DAC
    RPi header
    DINGPIO 21

    GPIO 18
    LCKGPIO 19

    Slide switch

    Slide switch
    Left pin
    Powerboost EN
    Middle pin
    Powerboost GND
    Right pin
    RPi GND
  • 2
    Setting up the image for the Pi
    1. Burn the Raspbian Jessy Lite image to your SD card
    2. Turn your Pi into a Ethernet Gadget (If you are on Windows you should also install Bonjour)
    3. Enable SSH by putting a file named ssh on the SD card

    Now insert the SD card  into the Pi and connect it to your computer using USB (don't use the PWR port but the USB port). If everything went alright you should now be able to SSH into your Pi using the address "raspberrypi.local". It could be that Windows 10 doesn't see the Pi as a RDNIS device but as generic USB device, in that case you should download this driver and install it manually.

    To finish the set up of the image share the internet connection from you PC with the Pi.

    When you've established an internet connection you can install Retrogame(to use the keypad as keyboard), Git, Python3 and pip3.

  • 3
    I2S DAC setup

    Open up /boot/config.txt and change



    # dtparam=audio=on

     and add the following device tree overlay


    Save and quit the config file and create /etc/asound.conf and add this

    pcm.!default  {
     type hw card 0
    ctl.!default {
     type hw card 0

    Now the audio should work after a reboot.

View all 4 instructions

Enjoy this project?



Craig Hissett wrote 08/26/2017 at 00:13 point

This is phenomenal! Great project.

I need to build this.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates