This was the first MP3 player I built. The goal was to use as many recycled parts as possible. And it was also meant to be as chonky as possible.

Hardware List:
- RRW ‘Full Graphic Smart Controller’
- Teensy 3.2
- DY-SV5W MP3 Board
- 45mm Speaker
- 2 tactile switches
- 2x 8-led WS2812 boards
- microSD card
- SD card
One of the first hurdles was figuring out the pinout of the RRW controller. Not only does it have that 128×64 LCD, it also exposes an SD card, and a rotary encoder.
| EXP1 | |||
|---|---|---|---|
| MISO | 1 | 2 | SCK |
| BTN_EN2 | 3 | 4 | SD_CSEL |
| BTN_EN1 | 5 | 6 | MOSI |
| SD_DET | 7 | 8 | KILL_BTN |
| GND | 9 | 10 | NC |
| EXP2 | |||
|---|---|---|---|
| MISO | 1 | 2 | SCK |
| BTN_EN2 | 3 | 4 | SD_CSEL |
| BTN_EN1 | 5 | 6 | MOSI |
| SD_DET | 7 | 8 | KILL_BTN |
| GND | 9 | 10 | NC |
Next up was getting the DY-SV5W working. It’s a self-contained MP3 board, with a speaker amp and headphone output. It’s 5V tolerant, and has a microSD card slot. It’s actually a pretty solid little board, but it has one major issue for this project – it doesn’t have bi-directional communication with the Teensy. All it can do is tell the Teensy it’s currently playing.
It also doesn’t support long filenames, or id3 tags. Filenames are restricted to the old 8.3 style names, and for best results the files should be named sequentially. This is the only way to select specific files to play. And of course, an MP3 player is better when you know the song title, artist, and duration.
So using the fact that the RRW Display has an SD card slot, I put a text file on that card for the Teensy to read. Basically, I faked reading the MP3s. The Teensy would read that text file, that had the names, artists, and length stored, so it would calculate the time remaining display from that. Janky, but it worked!

With the code essentially complete, it was time to start 3D printing. The first print was pretty good – all the mounting holes and slots were exactly correct, but I needed to move the speaker around, as I couldn’t fit the electronics in properly.
I went through a couple more revisions, finally ending up with a custom speaker grille, with the headphone jack and microSD card accessible. I also wired in a USB port for programming and power – I didn’t have room for a battery!

In the end, it turned out pretty good. It’s about the size of a VHS tape, runs off an external battery pack, and has a built-in loop for a belt clip.