这个坑采的非常冤枉和巨大,非常大的冤枉路,只能一声叹息
说一下我是如何踩坑的,原本是打算用esp32 读取SD卡播放mp3,在esp32 读取自己打的SD卡已经踩了无数坑了,详情见:
少走弯路,ESP32 使用Micro SD(TF)的经验说明-优快云博客
在好不容易解决了SD卡用1线sdmmc读取的问题,遇到了惊天大雷,esp32 s3 只支持ble 5.0 ,不支持a2dp,那就意味着esp32 s3不能用做蓝牙音频播放的接受端 ,除非哪天升级到ble 5.2的版本才有le audio.
没法,只能回到esp32 ,sdmmc的方式读取走不通,那就用SPI的方式吧。
之前在esp32 通过spi读取数据的代码如下:
SPIClass spi = SPIClass(HSPI);
spi.begin(18 /* SCK */, 19 /* MISO */, 23 /* MOSI */, 5 /* SS */);
if (!SD.begin(5 /* SS */, spi, 120000000,"/cdcard")) {
Serial.println("Card Mount Failed");
return;
}
这段代码是可以正常工作的,访问到TF卡对象,后面也能对文件和目录进行各种访问,结果坑就在这里啊。
于是,就在这段代码基础上引入了ESP8266Audio 进行音乐播放,这是个相对灵活的库,以前验证使用过。
if (file->open("/mp3/王杰 - 一场游戏一场梦 (2000版).mp3"))
{
// Serial.println(file->getPos());
// file->seek(100,100);
// Serial.println(file->getPos());
Serial.printf_P(PSTR("Playing '%s' from SD card...\n"), mp3file.name());
id3 = new AudioFileSourceID3(file);
id3->RegisterMetadataCB(MDCallback, (void*)"ID3TAG");
mp3->begin(file, out);
}
else
{
Serial.printf_P(PSTR(&