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.

Comments

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

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *