ESP32 S3 - Mini Mp3 Player Module
The ESP32 S3 is a powerful 3.3V development board with dual-core processing and rich peripheral support, making it an excellent choice for audio projects. In this tutorial, you'll learn how to build a complete mp3 player system using the DIYables Mini Mp3 Player module with your ESP32 S3 board.
What you'll build:
- A working mp3 player that plays audio files from a micro SD card
- A volume control system using physical buttons
- A track navigation interface with next/previous controls
- A serial monitor control panel for testing all playback features

Hardware Preparation
| 1 | × | ESP32 S3 WROOM N16R8 | |
| 1 | × | USB Cable Type-A to Type-C (for USB-A PC) | |
| 1 | × | USB Cable Type-C to Type-C (for USB-C PC) | |
| 1 | × | DIYables Mini Mp3 Player module | |
| 1 | × | Micro SD Card | |
| 1 | × | Speaker | |
| 1 | × | Breadboard | |
| 1 | × | Jumper Wires |
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Additionally, some of these links are for products from our own brand, DIYables .
Overview of the Mini Mp3 Player Module
The DIYables Mini Mp3 Player is a YX5200-24SS mp3 decoder module that plays audio files from a micro SD card through a built-in amplifier. It communicates over UART serial at 9600 baud and includes a 3W amplifier for direct speaker connection, making it a self-contained audio solution that requires no external decoder or amplifier IC.
Key Specifications
- Operates at 3.3V–5V (perfect for ESP32 S3's 3.3V logic)
- Controls via UART serial at 9600 baud
- Built-in 3W amplifier for direct speaker connection
- Supports up to 255 tracks and 99 folders
- 31 volume levels (0–30)
- 6 equalizer presets (Normal, Pop, Rock, Jazz, Classic, Bass)
- Multiple repeat and shuffle modes
- Status query capabilities for volume, track number, and playback state
- No external decoder or amplifier IC required
- Beginner-friendly with simple serial commands
Pinout
The Mini Mp3 Player module has 11 pins covering power, communication, audio output, and control functions.
- VCC: Power supply (3.2V–5.0V)
- GND: Ground connection
- RX: UART receive (connect to ESP32 S3 TX pin)
- TX: UART transmit (connect to ESP32 S3 RX pin)
- SPK_1: Speaker positive terminal (built-in 3W amplifier)
- SPK_2: Speaker negative terminal
- DAC_R: Right channel line-level audio output
- DAC_L: Left channel line-level audio output
- BUSY: Status pin (LOW when playing, HIGH when idle)
- IO_1: Button input (short press = previous, long press = volume down)
- IO_2: Button input (short press = next, long press = volume up)

Wiring Diagram
Connect the Mini Mp3 Player to your ESP32 S3 using hardware Serial1, which provides reliable UART communication at the required baud rate. The ESP32 S3 operates at 3.3V logic, matching the module's signaling levels perfectly so no level-shifting resistors are needed on the TX/RX lines.
Safety Notes
Power the module from the 3.3V pin for low-volume applications, or from 5V (VBUS) if you need maximum speaker volume—the built-in amplifier performs better with higher supply voltage. Always connect GND before applying power, and ensure your speaker impedance matches the module's 3W amplifier rating to avoid damage.
| Mini Mp3 Player | ESP32 S3 | Notes |
|---|---|---|
| VCC | 3.3V | Module also accepts 5V from VBUS if needed |
| GND | GND | Common ground |
| RX | TX1 (GPIO17) | Direct connection — no resistor needed |
| TX | RX1 (GPIO18) | Direct connection — 3.3V logic compatible |
| SPK_1 | Speaker + | Amplified output |
| SPK_2 | Speaker − | Amplified output |

This image is created using Fritzing. Click to enlarge image
SD Card Setup
The Mini Mp3 Player requires properly formatted and named files on your micro SD card.
Formatting requirements:
- File system: FAT16 or FAT32
- Card size: Up to 32GB recommended
Basic file naming (root directory):
Folder-based naming (organized playback):
Critical naming rules:
- Track numbering starts at 1 (not 0)
- Root files: 3-digit zero-padded names (001–255)
- Folder names: 2-digit zero-padded (01–99)
- Files in folders: 3-digit zero-padded (001–255)
- Copy order matters: The module determines playback order from the sequence files were copied, not alphabetical naming
- Best practice: Format card first, then copy files one by one in your desired playback order
Library Installation
The DIYables_MiniMp3 library simplifies control of the mp3 module for ESP32 S3 projects. Install it directly from the Arduino IDE Library Manager before uploading any of the example sketches.
- Connect your ESP32 S3 to your computer via USB-C cable
- Open the Arduino IDE
- Select ESP32 S3 as your board
- Choose the correct COM port
- Click the Libraries icon in the left sidebar
- Search for "DIYables_MiniMp3"
- Find the library by DIYables
- Click Install
- Search for DIYables_MiniMp3 created by DIYables
and click the Install button.
Library benefits:
- Zero external dependencies
- Simple command functions for all playback features
- Works perfectly with ESP32 S3 hardware serial
ESP32 S3 Code — Basic Setup
The following code shows the basic template for controlling the Mini Mp3 Player with ESP32 S3 using hardware Serial1. It initializes the serial interface, waits for the module to boot, and sets an initial volume level so you can verify the connection is working before adding playback logic.
What this code does:
- Initializes Serial1 for mp3 module communication at 9600 baud
- Sets up the mp3 player object
- Waits for module boot-up
- Sets initial volume to level 25
Why hardware serial?
- ESP32 S3 has dedicated UART hardware
- More reliable than software serial
- No timing issues at 9600 baud
- Leaves USB serial free for debugging
ESP32 S3 Code — Play a Single Track
The following code demonstrates how to play a single track from your SD card using the ESP32 S3. It initializes the mp3 module and immediately begins playing track 001.mp3 so you can confirm the full hardware stack is working correctly.
Detailed Instructions
- New to ESP32 S3? Complete our Getting Started with ESP32 S3 guide first.
- Prepare SD card: Format as FAT32 and copy mp3 files with names 001.mp3, 002.mp3, etc.
- Insert SD card: Place the micro SD card into the module's slot.
- Connect wiring: Follow the wiring diagram above (VCC, GND, TX1, RX1, speaker).
- Connect speaker: Attach your speaker to SPK_1 and SPK_2 terminals.
- Open Arduino IDE: Launch the IDE on your computer.
- Select board: Choose ESP32 S3 from the board menu.
- Select port: Choose the correct COM port for your board.
- Upload code: Copy the code above and upload to your ESP32 S3.
- Listen: Track 001.mp3 should play through the speaker.
- Pro Tip: If you hear no sound, check the SD card format and file naming—the module is very sensitive to naming conventions.
Playback Commands
| Method | Purpose | Example |
|---|---|---|
| play(trackNum) | Start a specific track | mp3.play(1) |
| playNext() | Advance to the next track | mp3.playNext() |
| playPrevious() | Go to the previous track | mp3.playPrevious() |
| pause() | Pause the active track | mp3.pause() |
| resume() | Unpause the track | mp3.resume() |
| stop() | Halt playback | mp3.stop() |
ESP32 S3 Code — Play Multiple Tracks
The following code shows how to cycle through multiple tracks automatically, advancing to the next song every few seconds. This pattern is useful for background music systems or demo projects where you want continuous playback without user interaction.
Detailed Instructions
- New to ESP32 S3? Complete our Getting Started with ESP32 S3 guide first.
- Prepare SD card: Ensure you have at least 3 mp3 files named 001.mp3, 002.mp3, 003.mp3.
- Wire module: Use the same wiring from the previous example.
- Upload code: Copy and upload the sketch above.
- Listen: Tracks will rotate every 5 seconds automatically.
- Watch serial: Open Serial Monitor at 115200 baud to see track changes.
- Pro Tip: Adjust the delay(5000) value to change how long each track plays before advancing.
Serial Monitor Output
ESP32 S3 Code — Volume Control
The following code adds two hardware buttons to your ESP32 S3 project so the user can raise or lower the mp3 player volume in real time. Each button press increments or decrements the volume by one step, and the current level is printed to the Serial Monitor for debugging.
Detailed Instructions
- New to ESP32 S3? Complete our Getting Started with ESP32 S3 guide first.
- Add buttons: Wire two buttons to GPIO4 and GPIO5 (plus GND).
- Upload code: Copy the sketch above to Arduino IDE and upload.
- Test buttons: Press the buttons while music plays to adjust volume.
- Watch serial: Serial Monitor displays current volume level.
- Pro Tip: Volume range is 0–30, with 15 being a good starting point for most speakers.
Volume Commands
| Method | Purpose | Example |
|---|---|---|
| setVolume(v) | Jump to a specific volume level | mp3.setVolume(20) |
| volumeUp() | Increase by 1 step | mp3.volumeUp() |
| volumeDown() | Decrease by 1 step | mp3.volumeDown() |
| getVolume() | Query the current level | mp3.getVolume() |
Serial Monitor Output
ESP32 S3 Code — Pause/Resume Toggle
The following code uses a single button on your ESP32 S3 to toggle between paused and playing states, giving users a simple way to pause music without stopping the track entirely. The playback state is printed to the Serial Monitor so you can follow the logic during testing.
Detailed Instructions
- New to ESP32 S3? Complete our Getting Started with ESP32 S3 guide first.
- Wire button: Connect pause/resume button to GPIO4 and GND.
- Upload code: Load the sketch to your board.
- Start playback: Music begins automatically.
- Toggle pause: Press button to pause, press again to resume.
- Check status: Serial Monitor displays playback state.
- Pro Tip: The BUSY pin on the module can also indicate play/pause state for visual feedback with an LED.
Serial Monitor Output
ESP32 S3 Code — Loop a Track
The following code programs the Mini Mp3 Player to repeat a single track continuously, which is ideal for background music or alert sounds that should never stop. Once uploaded to your ESP32 S3, no further interaction is needed—playback loops automatically.
Detailed Instructions
- New to ESP32 S3? Complete our Getting Started with ESP32 S3 guide first.
- Upload sketch: Load the code above.
- Listen: Track 1 will repeat continuously.
- Pro Tip: Use loopAll() for background music projects that need continuous playback across all tracks.
Repeat & Shuffle Commands
| Method | Purpose | Example |
|---|---|---|
| loopTrack(t) | Keep replaying one track | mp3.loopTrack(1) |
| loopFolder(f) | Replay all tracks in a folder | mp3.loopFolder(1) |
| loopAll() | Replay everything on the card | mp3.loopAll() |
| stopLoop() | End the current repeat mode | mp3.stopLoop() |
| shuffle() | Randomize playback order | mp3.shuffle() |
ESP32 S3 Code — Play from Folder
The following code demonstrates how to play a specific track from a numbered folder on your SD card, enabling organized playback for projects with multiple audio categories such as sound effects, music genres, or language packs.
Detailed Instructions
- New to ESP32 S3? Complete our Getting Started with ESP32 S3 guide first.
- Create folders: On your SD card, create folders named 01, 02, etc.
- Add files: Place mp3 files in each folder (001.mp3, 002.mp3, etc.).
- Upload code: Load the sketch to ESP32 S3.
- Test playback: Code plays the first track from folder 01.
- Pro Tip: Organize sound effects, music genres, or languages into separate folders for easy project organization.
Folder Methods
| Method | Purpose | Example |
|---|---|---|
| playFolder(f, t) | Select track t from folder f | mp3.playFolder(1, 1) |
| playLargeFolder(f, t) | Large folder mode (up to 3000 tracks) | mp3.playLargeFolder(1, 1500) |
| playFromMP3Folder(t) | Access the special /mp3 folder | mp3.playFromMP3Folder(1) |
ESP32 S3 Code — Serial Monitor Control
The following code turns the Arduino IDE Serial Monitor into a full control panel for your Mini Mp3 Player, letting you test every playback feature by typing single-character commands. This is the recommended first sketch to run after wiring your ESP32 S3, since it lets you verify all functions before building a physical interface.
Detailed Instructions
- New to ESP32 S3? Complete our Getting Started with ESP32 S3 guide first.
- Upload code: Load the sketch to your ESP32 S3.
- Open Serial Monitor: Set baud rate to 115200.
- Send commands: Type commands from the table below.
- Control playback: Use keyboard to test all mp3 player features.
- Pro Tip: This is perfect for testing your mp3 module before building it into a larger project.
Serial Commands
| Input | Result |
|---|---|
| 1–9 | Play that track |
| + / − | Volume up / down |
| p | Pause |
| r | Resume |
| s | Stop |
| n | Next track |
| b | Previous track |
| ? | Display status |
Serial Monitor Output
Equalizer Presets
The Mini Mp3 Player offers six built-in equalizer modes to enhance audio quality for different music genres.
Available EQ presets:
| Constant | ID | Tone |
|---|---|---|
| DIYables_MiniMp3::EQ_NORMAL | 0 | Neutral |
| DIYables_MiniMp3::EQ_POP | 1 | Pop |
| DIYables_MiniMp3::EQ_ROCK | 2 | Rock |
| DIYables_MiniMp3::EQ_JAZZ | 3 | Jazz |
| DIYables_MiniMp3::EQ_CLASSIC | 4 | Classical |
| DIYables_MiniMp3::EQ_BASS | 5 | Bass boost |
Example usage:
Tips:
- EQ_NORMAL works well for voice recordings and podcasts
- EQ_BASS enhances small speakers with limited low-frequency response
- Try different presets to match your speaker characteristics
Status Query Functions
The library provides functions to read the current state of the Mini Mp3 Player module in real-time.
Important notes:
- Each query blocks execution for up to 100 milliseconds
- Functions return −1 on timeout or communication error
- Use these sparingly in time-critical applications
Available status functions:
| Method | Returns | Info |
|---|---|---|
| isPlaying() | bool | Whether a track is active |
| getVolume() | int16_t | Volume (0–30) |
| getEQ() | int16_t | EQ preset (0–5) |
| getTrackCount() | int16_t | Total tracks on card |
| getCurrentTrack() | int16_t | Currently playing track |
| getFolderCount() | int16_t | Number of folders |
| getTrackCountInFolder(f) | int16_t | Tracks in folder f |
Example code:
Application & Project Ideas
The ESP32 S3's dual-core processing and built-in WiFi make it especially well-suited for networked audio applications that go beyond simple local playback.
- WiFi Audio Player: Build a WiFi-controlled home audio player with a web interface for remote track selection.
- Talking Clock: Create a talking alarm clock with scheduled voice announcements for different times of day.
- Museum Guide: Design an exhibit guide that plays audio descriptions automatically when visitors approach.
- Interactive Toy: Make an interactive toy with sound effects triggered by motion or touch sensors.
- Language Trainer: Build a language learning device with folder-organized lessons for vocabulary and pronunciation.
- Smart Doorbell: Create a doorbell with customizable mp3 chimes selectable via a web interface.
- Meditation Timer: Design a meditation timer with background music and voice prompts at timed intervals.
- Retail Demo Unit: Build a product demo station with looping advertisement audio controlled remotely.
Video Tutorial
Watch the step-by-step video walkthrough for this ESP32 S3 project below.
Challenge Yourself
These projects build progressively on the skills you developed in this tutorial, taking your ESP32 S3 mp3 player from a simple demo to a polished, feature-rich device.
- Beginner: Add an LED that lights up when music is playing using the BUSY pin.
- Beginner: Create a 3-button jukebox that plays track 1, 2, or 3 on demand.
- Intermediate: Build a web interface to control playback over the ESP32 S3's WiFi connection.
- Intermediate: Add an LCD display showing the current track number and volume level.
- Advanced: Create a voice-activated mp3 player using a microphone module and the ESP32 S3's ADC.
- Advanced: Build a multi-room audio system with multiple ESP32 S3 boards synced over WiFi using UDP broadcasts.