#include <driver/i2s_std.h>
i2s_chan_handle_t rx_chan;
#ifndef LED_BUILTIN
#define LED_BUILTIN 8
#endif
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(115200);
i2s_chan_config_t chan_cfg =
I2S_CHANNEL_DEFAULT_CONFIG(I2S_NUM_AUTO, I2S_ROLE_MASTER);
i2s_new_channel(&chan_cfg, NULL, &rx_chan);
i2s_std_config_t cfg = {
.clk_cfg = I2S_STD_CLK_DEFAULT_CONFIG(16000),
.slot_cfg = I2S_STD_MSB_SLOT_DEFAULT_CONFIG(
I2S_DATA_BIT_WIDTH_32BIT,
I2S_SLOT_MODE_MONO),
.gpio_cfg = {
.mclk = I2S_GPIO_UNUSED,
.bclk = GPIO_NUM_4, // SCK
.ws = GPIO_NUM_5, // WS
.dout = I2S_GPIO_UNUSED,
.din = GPIO_NUM_3, // SD
.invert_flags = {
.mclk_inv = false,
.bclk_inv = false,
.ws_inv = false,
}
}
};
i2s_channel_init_std_mode(rx_chan, &cfg);
i2s_channel_enable(rx_chan);
}
void loop() {
int32_t sample;
size_t bytes_read;
if (i2s_channel_read(rx_chan,
&sample,
sizeof(sample),
&bytes_read,
pdMS_TO_TICKS(100)) == ESP_OK) {
int32_t level = abs(sample >> 8);
if (level > 5000) { // порог, возможно придется подобрать
digitalWrite(LED_BUILTIN, HIGH);
} else {
digitalWrite(LED_BUILTIN, LOW);
}
}
}