ESP32S3通过硬件解码

太棒了!你现在已经有:

✅ 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 MOSIMOSIGPIO 23
VS1053 SPI MISOMISOGPIO 19
VS1053 SPI CLKSCKGPIO 18
VS1053 Control CSXCSGPIO 5
VS1053 Data CSXDCSGPIO 16
VS1053 DREQDREQGPIO 4
SD 卡 CSSD_CSGPIO 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 模块解析能力有限)

🎯 下一步建议

  1. 添加多个音频文件,加入按钮切歌功能
  2. 改用 musicPlayer.playFullFile() 播放完整音频(阻塞式)
  3. 将音频文件从 Wi-Fi 或 BLE 下载后播放(高级功能)
  4. 加入 OLED 屏幕、旋钮控制音量等 UI
上一篇
下一篇