Hướng dẫn kết nối và lập trình ESP32 phát nhạc MP3 sử dụng module DFPlayer Mini, điều khiển qua UART bằng thư viện DFRobotDFPlayerMini, hỗ trợ các chức năng như phát, dừng, chỉnh âm lượng, chuyển bài và phát thư mục cụ thể trên thẻ nhớ microSD.
Mục lục
- Giới thiệu DFPlayer Mini
- Nguyên lý hoạt động
- Chuẩn bị phần cứng
- Sơ đồ kết nối ESP32 và DFPlayer
- Cài đặt thư viện cần thiết
- Mã nguồn điều khiển DFPlayer Mini
- Giải thích mã
- Kết quả chạy thực tế
- Lỗi thường gặp & cách khắc phục
- Gợi ý mở rộng
1) Giới thiệu DFPlayer Mini
DFPlayer Mini là một module phát nhạc MP3 độc lập có thể điều khiển qua UART (Serial) hoặc chân IO.
Module có khe cắm microSD, ngõ ra loa trực tiếp và hỗ trợ nhiều lệnh điều khiển như:
- Phát / Dừng / Tiếp / Lùi
- Phát file theo ID, thư mục, hoặc ngẫu nhiên
- Điều chỉnh âm lượng (0–30)
- Báo trạng thái phát và phản hồi lỗi
Điểm mạnh: Không cần MCU mạnh, có thể phát trực tiếp từ thẻ SD định dạng MP3 / WAV với âm thanh rõ nét.
2) Nguyên lý hoạt động
DFPlayer Mini đọc file từ thẻ nhớ microSD, thẻ nhớ cần phải format định dạng FAT16/FAT32.
Khi nhận lệnh AT qua UART, nó xử lý nội bộ và phát âm thanh ra loa 8Ω – 1W hoặc ngõ LINE OUT.
Sơ đồ khối đơn giản:
ESP32 UART2 <--> DFPlayer Mini <--> Loa 8Ω 1W
|
+--> microSD chứa file nhạc (.mp3)
File phải được lưu trong thư mục /mp3/ hoặc /01/ … và đặt tên dạng
0001.mp3,0002.mp3, …
3) Chuẩn bị phần cứng
| Thành phần | Số lượng | Ghi chú |
|---|---|---|
| ESP32 DevKit V1 | 1 | UART2: GPIO16 (RX2), GPIO17 (TX2) |
| DFPlayer Mini | 1 | Module phát nhạc |
| Loa 8Ω 1W | 1 | Kết nối SPK1–SPK2 |
| microSD (≤ 32GB) | 1 | FAT32, chứa file .mp3 |
| Dây nối, breadboard | vài sợi | — |
4) Sơ đồ kết nối

| DFPlayer Pin | ESP32 Pin | Mô tả |
|---|---|---|
| VCC | 5V | Nguồn 5V (ổn định) |
| GND | GND | Mass chung |
| TX | GPIO16 (RX2) | Gửi dữ liệu về ESP32 |
| RX | GPIO17 (TX2) | Nhận lệnh từ ESP32 |
| SPK1/SPK2 | — | Loa 8Ω (tuỳ chọn) |
Lưu ý:
- DFPlayer chỉ hoạt động tốt ở 5V.
- Dòng khởi động có thể cao → nên cấp nguồn riêng (nếu có).
- Không nên dùng cáp USB của ESP32 để cấp đồng thời DFPlayer + loa công suất lớn hơn 1w.
5) Cài đặt thư viện cần thiết
Trong Arduino IDE → Tools > Manage Libraries…
Tìm và cài thư viện: DFRobotDFPlayerMini
6) Mã nguồn điều khiển DFPlayer Mini
#include <Arduino.h>
#include "DFRobotDFPlayerMini.h"
#define RXD2 16 // ESP32 nhận dữ liệu từ DFPlayer
#define TXD2 17 // ESP32 gửi lệnh đến DFPlayer
HardwareSerial mySerial(2);
DFRobotDFPlayerMini player;
void setup() {
Serial.begin(115200);
mySerial.begin(9600, SERIAL_8N1, RXD2, TXD2);
Serial.println("ESP32 DFPlayer Mini demo");
if (!player.begin(mySerial)) {
Serial.println("Không tìm thấy DFPlayer Mini!");
while(true);
}
Serial.println("Kết nối DFPlayer thành công!");
player.volume(20); // âm lượng (0-30)
player.play(1); // phát file 0001.mp3
}
void loop() {
if (player.available()) {
uint8_t type = player.readType();
int value = player.read();
Serial.printf("Event: %d, Value: %d\n", type, value);
}
// Demo: chuyển bài mỗi 10s
static unsigned long last = 0;
if (millis() - last > 10000) {
static int track = 1;
track++;
if (track > 5) track = 1;
player.play(track);
Serial.printf("Phát bài %d\n", track);
last = millis();
}
}
7) Giải thích mã
mySeriallà UART2 (GPIO16/17) dùng để giao tiếp DFPlayer.player.begin()khởi tạo module; trảfalsenếu không kết nối được.player.volume(20)đặt âm lượng.player.play(n)phát bài theo số thứ tự (1 → 0001.mp3).player.available()kiểm tra sự kiện (hoàn tất bài hát, lỗi, …).
8) Kết quả chạy thực tế
- Sau khi ESP32 khởi động, DFPlayer phát bài 0001.mp3.
- Mỗi 10 giây, tự chuyển sang bài tiếp theo.
- Trên Serial Monitor in trạng thái (OK, end track, volume set, …).
9) Lỗi thường gặp & cách khắc phục
| Lỗi | Nguyên nhân | Cách xử lý |
|---|---|---|
| DFPlayer không phát | Chưa cấp đủ dòng 5V | Dùng nguồn riêng ≥ 1A |
| Không nhận DFPlayer | Kiểm tra dây TX/RX đảo đúng | DF TX → ESP RX2, DF RX → ESP TX2 |
| Chỉ “cạch” 1 tiếng rồi dừng | File SD sai định dạng | FAT32, file tên 0001.mp3, 0002.mp3 |
| Loa rè hoặc méo | Dòng yếu, loa công suất quá cao | Dùng loa ≤ 3W hoặc Line Out |
10) Gợi ý mở rộng
- Nút nhấn Play/Pause/Next/Prev (GPIO).
- Điều khiển qua Bluetooth hoặc WiFi Web UI.
- Gửi trạng thái phát nhạc qua MQTT.
- Kết hợp với cảm biến (PIR, MQ2, DHT11) để phát âm thanh tự động.


Để lại một bình luận