太棒了!你现在已经有:
✅ ESP32-S3
✅ VS1053 音频解码模块
✅ SD 卡模块
✅ PAM8403 功放(放大 VS1053 输出)
✅ 无源喇叭(连接 PAM8403)
我们现在就可以开始写一个完整的 MP3 播放系统,流程如下:
🔧 系统架构(数据流)
less复制编辑[ESP32-S3]
|
├── 读取 MP3 文件(来自 SD 卡)
└── SPI 发送 MP3 数据 →
[VS1053 解码模块] → 模拟音频输出 →
[PAM8403 放大] → [无源喇叭]
🧰 所需库(使用 Arduino 开发方式)
确保在 Arduino IDE 或 PlatformIO 中装好以下库:
cpp复制编辑Adafruit_VS1053
SD
SPI
🖧 引脚定义建议(可根据你实际接线修改)
模块功能 | 引脚名称 | ESP32-S3 推荐引脚 |
---|---|---|
VS1053 SPI MOSI | MOSI | GPIO 23 |
VS1053 SPI MISO | MISO | GPIO 19 |
VS1053 SPI CLK | SCK | GPIO 18 |
VS1053 Control CS | XCS | GPIO 5 |
VS1053 Data CS | XDCS | GPIO 16 |
VS1053 DREQ | DREQ | GPIO 4 |
SD 卡 CS | SD_CS | GPIO 15 |
✅ 完整 Arduino 示例代码(MP3 播放)
cpp复制编辑#include <SPI.h>
#include <SD.h>
#include <Adafruit_VS1053.h>
// VS1053引脚配置
#define VS1053_RESET -1 // 如果模块没有连接 RESET 引脚,则设置为 -1
#define VS1053_CS 5 // XCS
#define VS1053_DCS 16 // XDCS
#define VS1053_DREQ 4
// SPI 总线
#define CARDCS 15 // SD 卡的 CS 引脚
#define VS1053_MOSI 23
#define VS1053_MISO 19
#define VS1053_CLK 18
Adafruit_VS1053_FilePlayer musicPlayer =
Adafruit_VS1053_FilePlayer(VS1053_RESET, VS1053_CS, VS1053_DCS, DREQ, CARDCS);
void setup() {
Serial.begin(115200);
Serial.println("VS1053 + ESP32 音频播放启动");
// 初始化 VS1053 解码器
if (!musicPlayer.begin()) {
Serial.println("❌ VS1053 初始化失败");
while (1);
}
Serial.println("✅ VS1053 初始化成功");
// 启用 SPI SD 卡
if (!SD.begin(CARDCS)) {
Serial.println("❌ SD 卡初始化失败");
while (1);
}
Serial.println("✅ SD 卡初始化成功");
// 检查文件是否存在
if (!SD.exists("/test.mp3")) {
Serial.println("❌ 没找到 /test.mp3 文件");
while (1);
}
// 设置音量(0 = 最大,100 = 静音)
musicPlayer.setVolume(20, 20); // 左右声道音量
// 播放 MP3 文件
Serial.println("🎵 开始播放 /test.mp3");
musicPlayer.startPlayingFile("/test.mp3");
}
void loop() {
if (!musicPlayer.playingMusic) {
Serial.println("✅ 播放完成");
delay(2000);
musicPlayer.startPlayingFile("/test.mp3"); // 重复播放
}
}
🔌 硬件连接(简略图)
sql复制编辑ESP32 VS1053
----- ------
GPIO 23 <--> MOSI
GPIO 19 <--> MISO
GPIO 18 <--> SCK
GPIO 5 <--> XCS(CS)
GPIO 16 <--> XDCS(DCS)
GPIO 4 <--> DREQ
ESP32 SD卡模块
----- ---------
GPIO 23 <--> MOSI
GPIO 19 <--> MISO
GPIO 18 <--> SCK
GPIO 15 <--> CS
VS1053 PAM8403
------- -------
LOUT / ROUT --> 输入(L / R)
GND --> GND
VCC(3.3~5V) --> VCC
PAM8403 喇叭
------- ------
OUT+ / OUT- --> 无源喇叭
📝 文件准备
- 将 MP3 文件重命名为
test.mp3
- 拷贝到 SD 卡根目录
- 确保卡格式为 FAT32
- 不要用超长文件名或子目录(VS1053 模块解析能力有限)
🎯 下一步建议
- 添加多个音频文件,加入按钮切歌功能
- 改用
musicPlayer.playFullFile()
播放完整音频(阻塞式) - 将音频文件从 Wi-Fi 或 BLE 下载后播放(高级功能)
- 加入 OLED 屏幕、旋钮控制音量等 UI