乐鑫技术交流
直播中

陈文博

10年用户 1081经验值
擅长:测量仪表
私信 关注
[问答]

如何将max98357a板与Esp32-DevKitC一起使用呢?

我一直在学习如何使用 arduino IDE 在 esp32 中编程。
我不知道如何将 max98357a 板与 Esp32-DevKitC 一起使用。我试过“Audio.h”和“AudioTools.h”库,但没有改变。
我的第一次尝试只是测试语音输出。我的代码如下:
代码:
#include
Arduino.h"
#include "WiFi.h"
#include "Audio.h"

// Digital I/O used
#define I2S_DOUT      26  // DIN connection
#define I2S_BCLK      27  // Bit clock
#define I2S_LRC       14  // Left Right Clock

Audio audio;

String ssid =     "MYCROFT";
String password = "145678abc789";

void setup() {
    Serial.begin(115200);
    WiFi.disconnect();
    WiFi.mode(WIFI_STA);
    WiFi.begin(ssid.c_str(), password.c_str());
    while (WiFi.status() != WL_CONNECTED) delay(1500);
    audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT);
    audio.setVolume(21); // 0...21

//    audio.connecttohost;
//    audio.connecttohost;
//    audio.connecttohost; //  128k aac
//     audio.connecttohost; //  128k mp3
      audio.connecttohost; //  128k mp3
//    audio.connecttospeech("Wenn die Hunde schlafen, kann der Wolf gut Schafe stehlen.", "de");
//    audio.connecttohost; // podcast
   
}

void loop()
{
    audio.loop();   
}
它按预期工作,但是当我尝试向循环函数添加一些命令时,它停止工作。
我的意思是,如果我如下更改循环功能,它将停止连接到音频流。
代码:
void loop()
{
    delay(3000);
    Serial.println("Hello");
    audio.loop();   
}
除了简单的 audio.loop() 之外,是否可以将 max98357a 与一些附加代码一起使用。


                                                

回帖(1)

周蕊

2023-3-1 16:28:19
我的猜测是 audio.loop 只安排一小段音频在接下来播放(例如 1/10 秒)。换句话说,如果您每 3 秒只调用一次,就像您现在所做的那样,您将获得 3 秒的静音和 1/10 秒的音频。(也许甚至不是因为音频驱动程序可能会注意到它的调用速度不够快而只是停止)。
最简单的方法可能是在正确的时间做事而不是延迟:
代码:
int last_print; //timestamp of the last time we printed "Hi"

void loop() {
    if (millis()-last_print>3000) {//was the last time we printed more than 3s ago?
        Serial.println("Hi!n"); //Yes - print line
        last_print=millis(); //Update timestamp
   }
   audio.loop();  //Keep on playing audio
}
或者,您也许可以使用多个任务来完成音频和主循环(寻找关于 ESP 多核 Arduino 的教程),但音频库确实需要支持重新进入才能工作,而无需更复杂的东西,如多路复用器等。


                  
举报

更多回帖

发帖
×
20
完善资料,
赚取积分