使用I2C同时接收和发送数据

问题描述 投票:0回答:1

我正在使用 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();
}

iot esp32 arduino-esp32 platformio
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.