This was my first mp3 player build, and was made mostly from scavenged parts.

The display is a 3D Printer display, the speaker was swiped from a cheap BT speaker, and in general, the whole thing was designed to be very chunky.

Parts List
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 128x64 LCD, it also exposes an SD card, and a rotary encoder.

EXP1
BEEPER 1 2 BTN_ENC
LCDE 3 4 LCDRS
LCD4 5 6 NC
NC 7 8 NC
GND 9 10 +5V
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

With those pins, it was then possible to wire up the display to the Teensy. One of the first things I did was get the LCD working, with an Ono-Sendai boot animation. Delicious chonky LCD graphics!
LCD Animation

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!

First Print
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.

I went through a couple more revisions, finally ending up with a custom speaker grille, with the headphone jack and microSD card accesible. I also wired in a USB port for programming and power - I didn’t have room for a battery!
Final Revision

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.