A fully menu-driven, standalone MP3 player with OLED display, physical buttons, and real-time volume control—all powered by Arduino.
|
🎶 MP3 Playback 📁 Folder Browser 🖥️ OLED Display 🎛️ Physical Controls |
🔊 Real-Time Volume ⏭️ Auto-Advance 🔄 Reset Function ⚡ USB Powered |
In an era of streaming services and smartphone apps, there's something special about a physical music player you built yourself.
- 🎧 Tangible music experience - Physical buttons beat touchscreens for music control
- 🛠️ Learn by building - Perfect project for understanding Arduino, displays, and audio modules
- 📵 Distraction-free listening - No notifications, no apps, just music
- 🎨 Customizable - Add your own features, design your own case
- 💰 Affordable - Build a unique music player for under $30
This project brings back the joy of dedicated music players while teaching valuable electronics and programming skills. It's nostalgia meets modern DIY culture. 📻
Hardware:
- Arduino Uno
- DFPlayer Mini module
- 0.96" I2C OLED display (SSD1306)
- 4 push buttons
- 10kΩ potentiometer
- 8Ω 3W speaker
- microSD card (formatted FAT32)
- Jumper wires & breadboard
Software:
- Arduino IDE
- Required libraries (see Installation)
1. Clone the repository
git clone https://github.com/HimC29/Arduino-Boombox.git
cd Arduino-Boombox2. Install Arduino libraries
Open Arduino IDE → Tools → Manage Libraries, then install:
Adafruit GFX LibraryAdafruit SSD1306DFRobotDFPlayerMini
3. Prepare your microSD card
# Format to FAT32
# Copy MP3 files to the root directory
# Files should be named: 001.mp3, 002.mp3, etc.
# Optional: Use the provided Python script to sort files
python sort_mp3_files.py /path/to/sd/card4. Wire the components
See the Hardware Connections section below
5. Upload the code
- Open
Arduino-Boombox.inoin Arduino IDE - Select Board: Arduino Uno
- Select your COM port
- Click Upload ⬆️
6. Power up and enjoy! 🎉
| Component | Quantity | Notes |
|---|---|---|
| Arduino Uno | 1 | Or compatible board |
| DFPlayer Mini | 1 | MP3 decoder module |
| OLED Display | 1 | 0.96" I2C (SSD1306, 0x3C) |
| Push Buttons | 4 | Momentary tactile switches |
| Potentiometer | 1 | 10kΩ linear |
| Speaker | 1 | 8Ω 3W |
| microSD Card | 1 | Any size, FAT32 format |
| Resistors | 4 | 10kΩ (optional, for buttons) |
Button → Arduino Pin
─────────────────────────
Back → D2
Up → D3
Down → D4
Center → D5
DFPlayer → Arduino
─────────────────────────
TX → D10
RX → D11
VCC → 5V
GND → GND
SPK+ → Speaker +
SPK- → Speaker -
OLED → Arduino
─────────────────────
VCC → 5V (or 3.3V)
GND → GND
SDA → A4
SCL → A5
Potentiometer → Arduino
──────────────────────────
Signal (middle) → A0
VCC (side) → 5V
GND (side) → GND
| Button | Action |
|---|---|
| Up | Move up in menu / Previous song |
| Down | Move down in menu / Next song |
| Center | Enter folder / Play song / Pause/Resume |
| Back | Return to previous menu |
| Potentiometer | Adjust volume in real-time |
Hold Up + Down simultaneously for 1.5 seconds to access the reset menu:
- Use Up/Down to select Yes/No
- Press Center to confirm
- Resets Arduino via watchdog timer
Songs are organized into folders by genre:
- 🎤 POP
- 🎹 Vocal Synth Songs
- 🇯🇵 J-POP
- 🇰🇷 K-POP
- 🎧 Phonk
- 😂 Memes
Each folder maps to a specific track range on your microSD card. Customize folder names and ranges in the code to match your music library!
001.mp3 ← First song
002.mp3
003.mp3
...
100.mp3
101.mp3
⚠️ Important: DFPlayer reads files by upload order, not filename. Use the provided Python script to ensure correct ordering.
- PROGMEM optimization - Stores song/folder names in flash memory to save RAM
- State machine navigation - Clean menu system with folder/song browsing
- Waveform animation - Real-time visual feedback during playback
- Non-blocking volume control - Smooth analog reading without interrupting playback
- Auto-advance - Seamlessly plays next track when current song ends
Adafruit_GFX- Graphics primitives for OLEDAdafruit_SSD1306- OLED display driverDFRobotDFPlayerMini- DFPlayer communicationSoftwareSerial- Serial communication with DFPlayer
Contributions are what make the open-source community such an amazing place! Any contributions you make are greatly appreciated.
- Fork the Project
- Create your Feature Branch
git checkout -b feature/AmazingFeature
- Commit your Changes
git commit -m 'Add some AmazingFeature' - Push to the Branch
git push origin feature/AmazingFeature
- Open a Pull Request
- 🎨 Add custom case designs (3D printable STL files)
- 🔋 Battery power support with charging circuit
- 📻 FM radio module integration
- 🎚️ Equalizer controls
- 💾 Playlist save/load functionality
- 🌈 RGB LED visualizer
- 📱 Bluetooth audio streaming
- 📖 Multi-language support
Thanks to everyone who has contributed to Arduino Boombox!
Want to see your name here? Check out the Contributing section!
- Check DFPlayer wiring (TX/RX might be swapped)
- Verify microSD card is formatted as FAT32
- Ensure MP3 files are in the root directory
- Verify I2C address is 0x3C (use I2C scanner sketch)
- Check SDA/SCL connections to A4/A5
- Use the provided Python script to sort files
- DFPlayer reads by upload order, not filename
- Check potentiometer wiring to A0
- Verify potentiometer is 10kΩ linear taper
Distributed under the MIT License. See LICENSE for more information.
TL;DR: You can use, modify, and distribute this project freely. Just keep the original license notice.
Built with amazing open-source tools and libraries:
- Arduino - The platform that powers this project
- Adafruit - For excellent display libraries
- DFRobot - DFPlayer Mini library
- All contributors who have helped improve this project
Made with ❤️ by HimC29