Search Code

Hướng dẫn ESP32 41/55 - Trình phát MP3 sử dụng thẻ Micro SD | Bộ học IoT ESP32 của SunFounder

Hướng dẫn ESP32 41/55 - Trình phát MP3 sử dụng thẻ Micro SD | Bộ học IoT ESP32 của SunFounder

Trong hướng dẫn này, chúng ta sẽ tạo một trình phát MP3 sử dụng vi điều khiển ESP32 và thẻ micro SD. ESP32 sẽ đọc các tệp âm thanh được lưu trên thẻ micro SD và phát âm thanh qua bộ khuếch đại âm thanh và loa. Dự án này kết hợp nhiều thành phần khác nhau, bao gồm ESP32, bộ khuếch đại âm thanh và thẻ micro SD, để cho phép bạn phát nhạc một cách đơn giản.

Trong suốt quá trình, chúng ta sẽ thảo luận về cách đấu dây cần thiết, mã code và cách khắc phục các sự cố thường gặp. Để có hướng dẫn trực quan hơn, hãy xem video liên quan (trong video tại 00:00).

Giải thích về Phần cứng

Các thành phần chính được sử dụng trong dự án này bao gồm vi điều khiển ESP32, thẻ micro SD, bộ khuếch đại âm thanh và loa. ESP32 là một vi điều khiển mạnh mẽ với khả năng Wi-Fi và Bluetooth tích hợp, lý tưởng cho các dự án IoT. Nó sẽ xử lý và điều khiển việc phát lại âm thanh.

Thẻ micro SD được sử dụng để lưu trữ các tệp âm thanh ở định dạng MP3. Nó kết nối với ESP32 và cho phép chương trình đọc các tệp và gửi dữ liệu âm thanh đến bộ khuếch đại. Bộ khuếch đại âm thanh nhận tín hiệu kỹ thuật số từ ESP32 và khuếch đại nó để điều khiển loa, cho phép nghe được âm thanh.

Chi tiết Datasheet

Nhà sản xuấtSunFounder
Số bộ phậnESP32
Điện áp Logic/IO3,3 V
Điện áp cung cấp5 V
Dòng điện đầu ra (mỗi kênh)Tối đa 2 A
Dòng điện đỉnh (mỗi kênh)Tối đa 3 A
Hướng dẫn tần số PWMlên đến 40 kHz
Ngưỡng logic đầu vào0,3 x VCC (thấp), 0,7 x VCC (cao)
Sụt áp / RDS(on) / bão hòa0,15 V
Giới hạn nhiệt85 °C
Đóng góiWROOM-32
Ghi chú / biến thểTương thích với nhiều thư viện âm thanh khác nhau

  • Đảm bảo thẻ micro SD được định dạng là FAT32.
  • Sử dụng điện trở để kết nối bộ khuếch đại âm thanh nhằm tránh méo tiếng.
  • Giữ các kết nối nguồn ổn định để tránh gián đoạn.
  • Kiểm tra dây nối xem có bị lỏng trước khi cấp nguồn cho hệ thống.
  • Theo dõi đầu ra nối tiếp để biết thông tin gỡ lỗi.
  • Sử dụng loa có trở kháng thấp để có chất lượng âm thanh tốt hơn.
  • Để có hiệu suất tốt nhất, hãy đảm bảo ESP32 không bị quá tải với các tác vụ khi phát âm thanh.

SD_MMC được sử dụng để truy cập thẻ micro SD và AudioOutputI2S được sử dụng cho đầu ra âm thanh.

Hướng dẫn Đấu dây

ESP32-40-micro-sd-card-1
esp32-41-play-music-wriing

Để đấu dây các thành phần lại với nhau, hãy bắt đầu bằng cách kết nối nguồn điện. Kết nối chân 5 V từ ESP32 với chân VCC của bộ khuếch đại âm thanh. Tiếp theo, kết nối chân nối đất từ ESP32 với chân nối đất của bộ khuếch đại. Chân đầu ra âm thanh từ ESP32, thường là GPIO25, nên được kết nối với chân đầu vào của bộ khuếch đại thông qua một điện trở 10 kΩ.

Đối với loa, hãy kết nối nó với các chân đầu ra của bộ khuếch đại âm thanh. Lưu ý rằng loa không có phân cực, vì vậy bạn có thể kết nối theo bất kỳ cách nào. Cắm thẻ micro SD vào khe được chỉ định trên ESP32. Đảm bảo kiểm tra kỹ tất cả các kết nối trước khi cấp nguồn cho hệ thống.

Ví dụ Mã Code & Hướng dẫn Chi tiết

Trong mã code được cung cấp, chúng ta bắt đầu bằng cách bao gồm các thư viện cần thiết để phát lại âm thanh và truy cập thẻ SD. Các định danh chính là mp3, fileout, lần lượt đại diện cho bộ tạo MP3, nguồn tệp âm thanh và đầu ra âm thanh.

AudioGeneratorMP3 *mp3;
AudioFileSourceSD_MMC *file;
AudioOutputI2S *out;

Ở đây, chúng ta khai báo các con trỏ cho bộ tạo MP3 và nguồn tệp âm thanh. Trong hàm setup(), chúng ta khởi tạo giao tiếp nối tiếp và thẻ SD.

void setup() {
  Serial.begin(115200);
  if (!SD_MMC.begin()) {

    Serial.println("SD card mount failed!");
  }
  file = new AudioFileSourceSD_MMC("/To Alice.mp3");
  out = new AudioOutputI2S(0, 1);
}

Trong đoạn trích này, chúng ta kiểm tra xem thẻ SD có được gắn kết thành công hay không. Nếu thất bại, một thông báo lỗi sẽ được in ra. Sau đó, chúng ta thiết lập tệp MP3 và chế độ đầu ra âm thanh.

void loop() {
  if (mp3->isRunning()) {
    if (!mp3->loop()) mp3->stop();
  } else {
    Serial.println("MP3 done");
    delay(1000);
  }
}

Vòng lặp này kiểm tra xem tệp MP3 có đang phát hay không. Nếu không, nó sẽ in ra thông báo cho biết quá trình phát lại đã hoàn tất. Mã code đầy đủ sẽ được tải xuống bên dưới bài viết để tham khảo thêm.

Trình diễn / Điều gì sẽ xảy ra

Sau khi mọi thứ được đấu dây và mã code được tải lên, bạn sẽ nghe thấy âm thanh phát qua loa khi cắm thẻ micro SD. Đảm bảo đặt lại ESP32 sau khi cắm thẻ. Nếu âm thanh không phát, hãy kiểm tra dây nối và đảm bảo tệp âm thanh được đặt tên chính xác trong mã code (trong video tại 05:00).

Các lỗi thường gặp bao gồm không định dạng đúng thẻ micro SD hoặc sử dụng các định dạng tệp âm thanh không được hỗ trợ. Luôn đảm bảo rằng các tệp ở định dạng MP3 và được đặt trong thư mục gốc hoặc thư mục được chỉ định nếu cần.

Mốc thời gian Video

  • 00:00 Bắt đầu
  • 2:19 Giới thiệu về dự án
  • 4:27 Trang tài liệu
  • 5:32 Đấu dây cho bộ khuếch đại âm thanh
  • 8:00 Định dạng thẻ microSD cho ESP32
  • 10:16 Thư viện và Mã code
  • 15:16 Chọn bo mạch ESP32 và cổng COM trong Arduino IDE
  • 16:58 Phát bài hát bằng ESP32 từ thẻ Micro SD
  • 19:14 Trình diễn thứ hai sử dụng pin 18650

Hình ảnh

speaker_pic
speaker_pic
audio_module
audio_module
ESP32-40-micro-sd-card-1
ESP32-40-micro-sd-card-1
esp32-41-play-music-wriing
esp32-41-play-music-wriing
842-ESP32 Tutorial 41/55- Arduino code for playing music from microSD card
Ngôn ngữ: C++
#include "AudioFileSourceSD_MMC.h"
#include "AudioOutputI2S.h"
#include "AudioGeneratorMP3.h"
#include "SD_MMC.h"
#include "FS.h"

// Declare pointers for the MP3 generator, file source, and output.
AudioGeneratorMP3 *mp3;
AudioFileSourceSD_MMC *file;
AudioOutputI2S *out;

void setup() {
  // Start the serial communication.
  Serial.begin(115200);
  delay(1000);

  // Initialize the SD card. If it fails, print an error message.
  if (!SD_MMC.begin()) {
    Serial.println("SD card mount failed!");
  }

  // Open the MP3 file from the SD card. Replace "/To Alice.mp3" with your own MP3 file name.
  file = new AudioFileSourceSD_MMC("/To Alice.mp3");
  
  // Set up the I2S output on ESP32's internal DAC.
  out = new AudioOutputI2S(0, 1);
  
  // Set the output to mono.
  out->SetOutputModeMono(true);

  // Initialize the MP3 generator with the file and output.
  mp3 = new AudioGeneratorMP3();
  mp3->begin(file, out);
}

void loop() {
  // If the MP3 is running, loop it. Otherwise, stop it.
  if (mp3->isRunning()) {
    if (!mp3->loop()) mp3->stop();
  } 
  // If the MP3 is not running, print a message and wait for 1 second.
  else {
    Serial.println("MP3 done");
    delay(1000);
  }
}

Tài nguyên & tài liệu tham khảo

Tập tin📁

Không có tệp nào khả dụng.