01 First Build · Fundamentals · Audio

MP3 Player

My first independent electronics project — and my introduction to building a working system from the ground up: wiring, soldering, circuit design, Arduino programming, and hardware troubleshooting.

Arduino NanoDFPlayer Mini OLED displayPush buttons SpeakerC / Arduino
MP3 player showing Amna's MP3 on the OLED
buttons in · DFPlayer + display · speaker out

The idea.

Take my interest in electronics beyond just writing code, and understand how individual components work together to turn an idea into something physical.

The MP3 player was my first chance to design, build, test, troubleshoot, and solder a complete system on my own. The goal was small and concrete: a working player controlled with physical buttons, a display for feedback, and a speaker for audio — simple enough to actually finish, and rich enough to learn every basic skill a hardware build needs.

How it works.

Buttons tell the Arduino what to do; the Arduino commands the DFPlayer over serial to play tracks from an SD card, drives the speaker, and shows what's happening on the display.

Features

CONTROL

Button playback

Physical buttons drive play, pause, and track skipping — the whole interface is tactile, no screen menus to navigate.

AUDIO

DFPlayer + speaker

A DFPlayer Mini reads MP3 tracks from an SD card and drives the speaker, handling decoding so the Arduino just sends simple serial commands.

FEEDBACK

Display readout

A small display gives the user feedback on the current state, closing the loop between a button press and something visible happening.

Hardware.

A deliberately small parts list — the point was to learn each one properly.

🧠
Arduino NanoThe controller, sending serial commands to the audio module
🎵
DFPlayer MiniMP3 decoder + SD card reader that drives the speaker
🖥
DisplayShows playback state and user feedback
🔘
Push buttonsPlay / pause / skip — the physical interface
🔊
SpeakerAudio output, driven directly by the DFPlayer
The soldered perfboard, wired and assembled
The soldered perfboard, wired and assembled

Testing setup.

Each part validated on its own before combining — the habit this project taught me, which every build since has used.

A. Buttons

Confirmed each button registered a clean press before wiring them to any action.

Breadboard prototype with buttons and OLED
Breadboard prototype with buttons and OLED

B. Display

Verified the display could show text and state readouts.

Arduino Nano and OLED wired up
Arduino Nano and OLED wired up

C. Audio

Tested the DFPlayer + speaker playing a track on their own.

The soldered perfboard build
The soldered perfboard build

D. Full system

Integrated buttons, display, DFPlayer, and speaker into one working player.

Boards laid out for assembly
Boards laid out for assembly

Troubleshooting.

One problem defined this whole project — and taught me the lesson I've leaned on in every build since.

Case 01

The DFPlayer wouldn't respond

Symptom

The DFPlayer Mini simply didn't react to any serial command the Arduino sent — no audio, no acknowledgement.

First guess

I assumed it was me: a wiring mistake, the wrong pins, or a bug in my code — so I spent a long time rewriting the sketch and re-running the connections.

Root cause

After isolating every other possibility, the module itself turned out to be defective. No amount of code or rewiring was ever going to fix it.

Fix

Swapped in a known-good DFPlayer and the system worked. From then on I check hardware first — voltage and continuity with a multimeter — before assuming the software is at fault.

Lesson

Not every bug is in your code. Verifying that a part actually works before debugging around it saves hours — and it's why I now retest modularly, one component at a time.

What I learned.