Series
Lập Trình ESP32 Cơ Bản
  1. Series Lập Trình ESP32 Cơ Bản – Giới Thiệu: Lộ Trình 19 Bài Từ Số 0
  2. 1Lập trình ESP32 – Bài 1: ESP32 là gì? Hướng dẫn bắt đầu với ESP32 cho người mới
  3. 2Lập trình ESP32 – Bài 2: Kết nối WiFi và kiểm tra Internet với ESP32
  4. 3Lập trình ESP32 – Bài 3: Đọc nút nhấn và điều khiển LED với ESP32
  5. 4Lập trình ESP32 – Bài 4: Đọc nhiệt độ & độ ẩm với cảm biến DHT11
  6. 5Lập trình ESP32 – Bài 5: ESP32 Web Server – Điều khiển LED qua trình duyệt
  7. 6Lập trình ESP32 – Bài 6: Điều khiển LED RGB
  8. 7Lập trình ESP32 – Bài 7: Điều khiển Relay qua Web Server
  9. 8Lập trình ESP32 – Bài 8: WebSocket – Điều khiển LED realtime từ trình duyệt
  10. 9Lập trình ESP32 – Bài 9: Đọc cảm biến ánh sáng (LDR) và hiển thị realtime qua WebSocket
  11. 10Lập trình ESP32 – Bài 10: Điều khiển Servo SG90 qua Web Server
  12. 11Lập trình ESP32 – Bài 11: Đọc các loại biến trở (Potentiometer / Analog Sensor)
  13. 12Lập trình ESP32 – Bài 12: Đọc cảm biến khoảng cách HC-SR04
  14. 13Lập trình ESP32 – Bài 13: ESP32 – Đọc cảm biến nhiệt độ, độ ẩm DHT11 và hiển thị dữ liệu realtime qua WebSocket
  15. 14Lập trình ESP32 – Bài 14: Hiển thị màn hình TFT (SPI)
  16. 15Lập trình ESP32 – Bài 15: Màn hình OLED SSD1306 (I2C)
  17. 16Lập trình ESP32 – Bài 16: Module SIM 4G A7680C – Gọi điện thoại, in thông tin SIM/Module, trạng thái 4G
  18. 17Lập trình ESP32 – Bài 17: Phát nhạc MP3 với module DFPlayer Mini
  19. 18Lập trình ESP32 – Bài 18: Đọc cảm biến khí gas MQ-2 và hiển thị lên màn hình OLED
  20. 19Lập trình ESP32 – Bài 19: Kết nối MQTT, Publish dữ liệu cảm biến & Subscribe điều khiển thiết bị
Kiến thức

Lập trình ESP32 – Bài 17: Phát nhạc MP3 với module DFPlayer Mini

Th10 2025
Lập trình ESP32 – Bài 17: Phát nhạc MP3 với module DFPlayer Mini

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

  1. Giới thiệu DFPlayer Mini
  2. Nguyên lý hoạt động
  3. Chuẩn bị phần cứng
  4. Sơ đồ kết nối ESP32 và DFPlayer
  5. Cài đặt thư viện cần thiết
  6. Mã nguồn điều khiển DFPlayer Mini
  7. Giải thích mã
  8. Kết quả chạy thực tế
  9. Lỗi thường gặp & cách khắc phục
  10. 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átphả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ầnSố lượngGhi chú
ESP32 DevKit V11UART2: GPIO16 (RX2), GPIO17 (TX2)
DFPlayer Mini1Module phát nhạc
Loa 8Ω 1W1Kết nối SPK1–SPK2
microSD (≤ 32GB)1FAT32, chứa file .mp3
Dây nối, breadboardvài sợi

4) Sơ đồ kết nối

DFPlayer PinESP32 PinMô tả
VCC5VNguồn 5V (ổn định)
GNDGNDMass chung
TXGPIO16 (RX2)Gửi dữ liệu về ESP32
RXGPIO17 (TX2)Nhận lệnh từ ESP32
SPK1/SPK2Loa 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ã

  • mySerial là UART2 (GPIO16/17) dùng để giao tiếp DFPlayer.
  • player.begin() khởi tạo module; trả false nế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ỗiNguyên nhânCách xử lý
DFPlayer không phátChưa cấp đủ dòng 5VDùng nguồn riêng ≥ 1A
Không nhận DFPlayerKiểm tra dây TX/RX đảo đúngDF TX → ESP RX2, DF RX → ESP TX2
Chỉ “cạch” 1 tiếng rồi dừngFile SD sai định dạngFAT32, file tên 0001.mp3, 0002.mp3
Loa rè hoặc méoDòng yếu, loa công suất quá caoDù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.