我正在使用 ESP32S3 板,目前正在从事一个 IoT 项目,其中我通过 I2C 以主从关系连接两个板。主 ESP32 连接到传感器,并将数据中继到从 ESP32,从 ESP32 通过 PCM5102 DAC 模块播放 SD 卡中的音频文件。代码相当简单。然而,当与从属模式结合使用时,我很难让音频播放功能正常工作。是因为 I2C 在任何给定时间都只能单向工作吗?或者有什么办法让它发挥作用吗?
我使用的音频库可以在 - https://github.com/schreibfaul1/ESP32-audioI2S/ 找到。使用的代码是标准 I2C 读写与音频代码的组合,可以在上述库的自述文件中找到该代码。我正在 platformio 中使用 arduino 框架,如果证明有用的话。任何帮助,将不胜感激。非常感谢!
#include "Arduino.h"
#include "Audio.h"
#include "SD.h"
#include "FS.h"
//SPI Pins
#define SD_CS D9
#define SPI_MOSI MOSI
#define SPI_MISO MISO
#define SPI_SCK SCK
// I2S Pins
#define I2S_DOUT SDA
#define I2S_BCLK SCL
#define I2S_LRC D6
Audio audio;
// Function to receive signal - Toggles volume based on data received
void receiveSignal(int numBytes)
{
while(Wire.available())
{
bool c = Wire.read();
if(c)
{
audio.setVolume(21);
}
else
{
audio.setVolume(0);
}
}
Serial.println();
}
// Setup function - Initialises Serial, SPI, SD and Audio Pins
void setup()
{
pinMode(SD_CS, OUTPUT);
digitalWrite(SD_CS, HIGH);
SPI.begin(SPI_SCK, SPI_MISO, SPI_MOSI);
Serial.begin(115200);
delay(5000);
SD.begin(SD_CS);
audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT);
audio.setVolume(21);
audio.connecttoFS(SD, "/audio.wav");
Wire.begin(8);
Wire.onReceive(receiveSignal);
}
// Loop function - Loops audio
void loop()
{
audio.loop();
}