ESP32 教學 41/55 - 使用 Micro SD 卡嘅 MP3 播放器 | SunFounder 嘅 ESP32 IoT 學習套件
喺呢個教學入面,我哋會用ESP32微控制器同埋一張micro SD卡整一個MP3播放器。ESP32會讀取儲存喺micro SD卡上面嘅音訊檔案,然後透過音訊放大器同喇叭輸出聲音。呢個項目結合咗唔同嘅組件,包括ESP32、一個音訊放大器同埋一張micro SD卡,令你可以用一個簡單嘅方法播放音樂。
成個過程入面,我哋會討論需要嘅接線、編碼,同埋點樣排查常見問題。想睇多啲視覺上嘅指引,記得睇埋相關嘅影片(喺影片00:00位置)。
硬件解說
呢個項目用到嘅主要組件包括ESP32微控制器、一張micro SD卡、一個音訊放大器同埋一個喇叭。ESP32係一個功能強大嘅微控制器,內置Wi-Fi同藍牙功能,好啱用喺物聯網項目。佢會負責處理同控制音訊播放。
Micro SD卡用嚟儲存MP3格式嘅音訊檔案。佢連接去ESP32,容許程式讀取檔案並將音訊數據發送去放大器。音訊放大器會接收ESP32嘅數碼訊號,然後放大佢去驅動喇叭,令聲音可以聽到。
數據表詳情
| 製造商 | SunFounder |
|---|---|
| 零件編號 | ESP32 |
| 邏輯/IO電壓 | 3.3 V |
| 供電電壓 | 5 V |
| 輸出電流(每通道) | 最大 2 A |
| 峰值電流(每通道) | 最大 3 A |
| PWM頻率指引 | 最高 40 kHz |
| 輸入邏輯閾值 | 0.3 x VCC(低),0.7 x VCC(高) |
| 電壓降 / RDS(on) / 飽和 | 0.15 V |
| 熱限制 | 85 °C |
| 封裝 | WROOM-32 |
| 備註 / 變體 | 兼容多種音訊庫 |
- 確保micro SD卡格式化做FAT32。
- 用一粒電阻連接音訊放大器,防止失真。
- 保持電源連接穩定,避免中斷。
- 供電之前檢查接線有冇鬆脫。
- 監察串列輸出嚟睇調試資訊。
- 用低阻抗喇叭嚟獲得更好嘅音質。
- 為咗最佳表現,確保ESP32喺播放音訊時冇被過多任務負載。
SD_MMC用嚟存取micro SD卡,而AudioOutputI2S就用嚟做音訊輸出。
接線指示


要將組件接埋一齊,首先連接電源。將ESP32嘅5 V連去音訊放大器嘅VCC腳。跟住,將ESP32嘅接地腳連去放大器嘅接地腳。ESP32嘅音訊輸出腳,通常係GPIO25,應該透過一粒10 kΩ電阻連去放大器嘅輸入腳。
對於喇叭,將佢連去音訊放大器嘅輸出腳。注意喇叭冇極性,所以你可以任意方向連接。將micro SD卡插入ESP32上面指定嘅插槽。確保喺供電之前再三檢查所有連接。
代碼示例同講解
喺提供嘅代碼入面,我哋首先包含播放音訊同存取SD卡所需嘅庫。主要嘅識別符係mp3、file同out,分別代表MP3生成器、音訊檔案來源同音訊輸出。
AudioGeneratorMP3 *mp3;
AudioFileSourceSD_MMC *file;
AudioOutputI2S *out;
呢度,我哋宣告咗MP3生成器同音訊檔案來源嘅指針。喺setup()函數入面,我哋初始化串列通訊同SD卡。
void setup() {
Serial.begin(115200);
if (!SD_MMC.begin()) {
Serial.println("SD卡掛載失敗!");
}
file = new AudioFileSourceSD_MMC("/To Alice.mp3");
out = new AudioOutputI2S(0, 1);
}
喺呢段摘錄入面,我哋檢查SD卡係咪成功掛載。如果失敗,就會印出一條錯誤訊息。然後我哋設定MP3檔案同音訊輸出模式。
void loop() {
if (mp3->isRunning()) {
if (!mp3->loop()) mp3->stop();
} else {
Serial.println("MP3完成");
delay(1000);
}
}
呢個迴圈檢查MP3檔案係咪仲喺度播放。如果唔係,就會印出一條訊息表示播放已經完成。完整代碼會喺文章下面載入,方便進一步參考。
示範 / 預期效果
當所有嘢接好晒並且上載咗代碼之後,當micro SD卡插入時,你應該會聽到音訊透過喇叭播放。確保插入卡片之後重置ESP32。如果音訊冇播放,檢查接線,並確保代碼入面嘅音訊檔案名稱正確(喺影片05:00位置)。
常見嘅問題包括冇正確格式化micro SD卡,或者用咗唔支援嘅音訊檔案格式。永遠確保檔案係MP3格式,並且放喺根目錄或者指定嘅資料夾入面。
影片時間戳
- 00:00 開始
- 2:19 項目介紹
- 4:27 文件頁面
- 5:32 音訊放大器接線
- 8:00 格式化microSD卡畀ESP32
- 10:16 庫同代碼
- 15:16 喺Arduino IDE入面選擇ESP32板同COM埠
- 16:58 用ESP32從Micro SD卡播放歌曲
- 19:14 第二個示範用18650電池
#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);
}
}
Common Course Links
Common Course Files
資源與參考資料
-
文件记录ESP32 Tutorial 41/55- SunFounder doc page for playing music from memory carddocs.sunfounder.com
文件📁
冇文件可用。