少走弯路,ESP32 读取Micro SD(TF)播放mp3的坑路历程。

这个坑采的非常冤枉和巨大,非常大的冤枉路,只能一声叹息

说一下我是如何踩坑的,原本是打算用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(&
以下是ESP32播放mp3文件的完整arduino代码: ``` #include <WiFi.h> #include <WiFiClient.h> #include <WebServer.h> #include <SD.h> #include <SPI.h> #include "ESPAsyncWebServer.h" #include "ESPAsyncWiFiManager.h" #include "ESPAsyncTCP.h" #include "DFRobotDFPlayerMini.h" #define SSID "YourWiFiSSID" #define PASSWORD "YourWiFiPassword" DFRobotDFPlayerMini myDFPlayer; WebServer server(80); void setup() { Serial.begin(115200); while (!Serial); Serial.println("Serial ready"); if (!SD.begin()) { Serial.println("Card Mount Failed"); return; } Serial.println("Card mounted"); if (!myDFPlayer.begin(Serial1)) { Serial.println(F("Unable to begin:")); Serial.println(F("1.Please recheck the connection!")); Serial.println(F("2.Please insert the SD card!")); return; } Serial.println(F("DFPlayer Mini online.")); myDFPlayer.setTimeOut(500); myDFPlayer.volume(20); myDFPlayer.play(1); AsyncWiFiManager wifiManager(&server); wifiManager.autoConnect(SSID, PASSWORD); server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){ request->send(SD, "/index.html", "text/html"); }); server.onNotFound([](AsyncWebServerRequest *request){ request->send(404, "text/plain", "Not found"); }); server.begin(); Serial.println("HTTP server started"); } void loop() { myDFPlayer.loop(); server.handleClient(); } ``` 你需要根据你的ESP32开发板和SD卡的具体设置做一些修改。在代码中,我们使用了ESPAsyncWiFiManager库来连接WiFi,并使用了ESPAsyncWebServer库来创建HTTP服务器。在setup()函数中,我们初始化了SD卡和DFPlayer Mini,并将DFPlayer Mini设置为播放第一个mp3文件。然后,我们使用AsyncWiFiManager连接WiFi,并设置HTTP根径的处理程序,该处理程序将返回index.html文件。在loop()函数中,我们调用myDFPlayer.loop()和server.handleClient()来处理DFPlayer Mini和HTTP请求。 请注意,你需要使用DFPlayer Mini的库文件和SD卡库文件,以及正确的引脚连接。如果你需要播放不同的mp3文件,可以使用myDFPlayer.play()函数,并将文件名作为参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值