前面使用esp32c3开发板完成了播放wav文件的处理,本次实验在不改变线路的情况下测试播mp3音乐文件。

预先在SD卡中准备一个mp3音乐,名字为qingyi.mp3。
程序代码如下:
#include <SPI.h>
#include <SD.h>
#include "AudioTools.h"
#include "AudioTools/AudioCodecs/CodecMP3Helix.h"
// SD卡模块的SPI引脚
#define SCK_PIN 4
#define MISO_PIN 7
#define MOSI_PIN 6
#define CS_PIN 10
// 连接到MAX98357的I2S引脚
#define BCK_PIN 5 // 位时钟 (MAX98357的BCK)
#define WS_PIN 3 // 字时钟/左右声道选择 (MAX98357的LRC)
#define DATA_PIN 2 // 数据输出 (MAX98357的DIN)
I2SStream i2s; // final output of decoded stream
EncodedAudioStream decoder(&i2s, new MP3DecoderHelix()); // Decoding stream
StreamCopy copier;
File audioFile;
void setup(){
Serial.begin(115200);
AudioToolsLogger.begin(Serial, AudioToolsLogLevel::Info);
SPI.begin(SCK_PIN, MISO_PIN, MOSI_PIN, CS_PIN);
// 初始化 SD 卡
if (!SD.begin(CS_PIN)) {
Serial.println("SD 卡初始化失败,请检查接线!");
return;
}
Serial.println("SD 卡初始化成功");
audioFile = SD.open("/qingyi.mp3");
// setup i2s
auto config = i2s.defaultConfig(TX_MODE);
config.pin_bck = BCK_PIN; // MAX98357 的 BCLK
config.pin_ws = WS_PIN; // MAX98357 的 LRC
config.pin_data = DATA_PIN; // MAX98357 的 DIN
i2s.begin(config);
// setup I2S based on sampling rate provided by decoder
decoder.begin();
// begin copy
copier.begin(decoder, audioFile);
}
void loop(){
if (!copier.copy()) {
stop();
}
}使用了AudioTools播放库,需要专门安装。因为无法从Arduino的管理库直接安装,需要从GitHub下载。下载以下两个文件:
arduino-audio-tools-main.zip
arduino-libhelix-main.zip
下载后,通过菜单“项目”-》“导入”-》“添加.ZIP库...”方式安装库。
烧录时,切记要使用Flash Mode :DIO方式。
我要赚赏金
