#include "driver/i2s.h" // LED Pins const int GREEN_LED = 5; const int WAVE_LED_1 = 6; const int WAVE_LED_2 = 43; const int WAVE_LED_3 = 44; // Mic I2S Pins (ICS-43434) #define I2S_WS 2 // WS #define I2S_SCK 3 // SCK #define I2S_SD 12 // Serial Data bool isRecording = false; void setup() { Serial.begin(115200); // LED setup pinMode(GREEN_LED, OUTPUT); pinMode(WAVE_LED_1, OUTPUT); pinMode(WAVE_LED_2, OUTPUT); pinMode(WAVE_LED_3, OUTPUT); digitalWrite(GREEN_LED, LOW); digitalWrite(WAVE_LED_1, LOW); digitalWrite(WAVE_LED_2, LOW); digitalWrite(WAVE_LED_3, LOW); delay(500); // Step 1: I2S Config for ICS-43434 i2s_config_t i2s_config = { .mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_RX), .sample_rate = 16000, .bits_per_sample = I2S_BITS_PER_SAMPLE_32BIT, .channel_format = I2S_CHANNEL_FMT_ONLY_LEFT, .communication_format = I2S_COMM_FORMAT_I2S_MSB, .intr_alloc_flags = ESP_INTR_FLAG_LEVEL1, .dma_buf_count = 4, .dma_buf_len = 256, .use_apll = false, .tx_desc_auto_clear = false, .fixed_mclk = 0 }; i2s_pin_config_t pin_config = { .bck_io_num = I2S_SCK, .ws_io_num = I2S_WS, .data_out_num = I2S_PIN_NO_CHANGE, .data_in_num = I2S_SD }; // Step 2: Install and check I2S driver esp_err_t err = i2s_driver_install(I2S_NUM_0, &i2s_config, 0, NULL); if (err == ESP_OK) { i2s_set_pin(I2S_NUM_0, &pin_config); // Try reading to see if mic responds uint8_t buffer[64]; size_t bytesRead = 0; err = i2s_read(I2S_NUM_0, &buffer, sizeof(buffer), &bytesRead, 1000); if (err == ESP_OK && bytesRead > 0) { Serial.println("Microphone is ready. Recording starts!"); isRecording = true; } else { Serial.println("Mic not responding."); } } else { Serial.println("I2S driver install failed."); } } void loop() { if (isRecording) { digitalWrite(GREEN_LED, HIGH); digitalWrite(WAVE_LED_1, HIGH); delay(100); digitalWrite(WAVE_LED_1, LOW); digitalWrite(WAVE_LED_2, HIGH); delay(100); digitalWrite(WAVE_LED_2, LOW); digitalWrite(WAVE_LED_3, HIGH); delay(100); digitalWrite(WAVE_LED_3, LOW); digitalWrite(WAVE_LED_2, HIGH); delay(100); digitalWrite(WAVE_LED_2, LOW); delay(100); } else { digitalWrite(GREEN_LED, LOW); digitalWrite(WAVE_LED_1, LOW); digitalWrite(WAVE_LED_2, LOW); digitalWrite(WAVE_LED_3, LOW); } }