#include "I2SConfig.h" void initI2S() { // I2S configuration i2s_config_t i2s_config = { .mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_RX), .sample_rate = Config::SAMPLE_RATE, .bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT, .channel_format = I2S_CHANNEL_FMT_ONLY_LEFT, .communication_format = I2S_COMM_FORMAT_STAND_I2S, .intr_alloc_flags = ESP_INTR_FLAG_LEVEL1, .dma_buf_count = Config::DMA_BUFFER_COUNT, .dma_buf_len = Config::DMA_BUFFER_LEN, .use_apll = false, .tx_desc_auto_clear = false, .fixed_mclk = 0 }; // I2S pin configuration i2s_pin_config_t i2s_mic_pins = { .bck_io_num = Config::I2S_MIC_SERIAL_CLOCK, .ws_io_num = Config::I2S_MIC_LEFT_RIGHT_CLOCK, .data_out_num = I2S_PIN_NO_CHANGE, .data_in_num = Config::I2S_MIC_SERIAL_DATA }; // Install and configure I2S driver i2s_driver_install(I2S_NUM_0, &i2s_config, 0, NULL); i2s_set_pin(I2S_NUM_0, &i2s_mic_pins); } void readI2SSamples(int16_t* samples, size_t* bytesRead) { i2s_read(I2S_NUM_0, samples, Config::SAMPLE_BUFFER_SIZE * sizeof(int16_t), bytesRead, portMAX_DELAY); }