Why did I build this?
I made this music player because I wasn't satisfied with the current playback methods that are available. The music streaming services available started to feel like radio stations with the same music repeating, they are also depended on an online internet connection while there might be offline functionality it is still limited by the available storage on your phone.
Since most vinyl records come with a download code for MP3 files a dedicated portable music player with my own offline music collection seemed like a good option. Storage has become cheaper and cheaper in recent years so there should be a couple of music players with a lot of storage, right? Well that's not the case, there are a couple of high end players with enough storage, but these are a couple of hundred bucks. That's why I build the first version using parts I had laying around for a few bucks. Since then I've remade it a couple of times and I've finally come to a version that works completely and could be built for about €80, - including 64GB storage (depended on local pricing).
Features
Display
The display on this board has a resolution of 320 by 240 pixels with a screen diagonal of 2.2”. It is connected to the Raspberry Pi using the SPI bus.
I2S Audio output
This board includes the PCM5102A a 24-bit I2S DAC with a 3.5mm jack. This IC is used to generate high quality audio without a hum like you would get if your using the onboard PWM as audio source.
User controls
On the board are controls for navigation, volume control and backlight control. There is also a slide switch on top to select between the USB output (off position) and battery output (on position).
Battery protection and charging
The battery is charged using the TP4056 charger with a charge rate of 1000 mA. It is also protected by the DW01 battery protection circuit, this IC protects against: overcharge, overdischarge and overcurrent.
Battery monitoring and charging detection
Battery monitoring and charging detection are implemented using a ADS1015 ADC. The ADS1015 is a 12-bit ADC that is connected using I2C to the Raspberry Pi. Channel 0 is connected to the USB connection and channel 1 to the battery using a voltage divider, channels 3 and 4 are not being used but are broken out to two test pads next to the ADC.
Battery booster
The nominal voltage of 3.7v outputted by the battery is converted to a steady 5v output by the MT3608 step-up converter. The MT3608 include under-voltage lockout, current limiting, and thermal overload protection.
Specifications
- 1200 or 2000 mAh battery
- 2.2" TFT display
- 24-bit DAC (PCM5102A)
- Safe shutdown on low battery (not implemented yet)
- Navigation, volume and power buttons
- Music player interface
- Index music from
/Music
folder - Sorting by artist, album and tracks
- Volume control
- Queueing
- Queue shuffling
- Sleep mode (Backlight off)
- Display artist name, album title and track title
- Index music from
Battery selection:
The case design allow a max battery dimension of 67x37x8mm. This 1200mAh batteryfrom Adafruit fits in the case and they also sell a 2000mAh version that theoretically should fit. An other option would be to source it from a battery bank or to buy one from Aliexpress.
Resources:
Ethernet gadget:
- https://learn.adafruit.com/turning-your-raspberry-pi-zero-into-a-usb-gadget/ethernet-gadget
- https://www.mobileread.com/forums/showthread.php?p=3283986
Audio:
- https://www.raspberrypi.org/forums/viewtopic.php?f=91&t=86609
- https://support.hifiberry.com/hc/en-us/articles/205377651-Configuring-Linux-4-x-or-higher
- https://learn.adafruit.com/adafruit-speaker-bonnet-for-raspberry-pi?view=all#i2s-tweaks
Display:
Also could a USB C connector be used?
Something like this https://www.mouser.com/new/amphenol/amphenol-usb-type-c-connector-system/ ?