Hi everyone,
I’m using an ESP32-S3-DevKitC-1-N16R8 board (ESP32-S3-WROOM-1, 16 MB flash, 8 MB PSRAM, v1.3) together with an INMP441 I²S microphone and am having issues getting any audio.
My Wiring
| Mic Pin | ESP32-S3 Pin | Notes |
|---|---|---|
| VDD | 3.3 V | Verified 3.3 V on multimeter |
| GND | GND | Common ground shared |
| SD | GPIO 13 | Data input |
| SCK | GPIO 14 | Bit clock (BCLK) |
| WS | GPIO 15 | Word select (LRCLK) |
| L/R | GND | Left channel |
Power is stable (3.3 V confirmed by multimeter), and continuity checks show no short circuits.
However, the I²S readings stay at 0 or –1 no matter what I do, clapping or speaking has no effect.
I’ve also tried swapping pins and tested both channels (L/R pin to GND and 3.3 V), but still no audio output.
Code Used
#include <Arduino.h>
#include <driver/i2s.h>
#define I2S_WS 15 // LRCLK / WS
#define I2S_SCK 14 // BCLK / SCK
#define I2S_SD 13 // DOUT from mic
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("=== SUPER BASIC I2S TEST (ESP32-S3) ===");
// Basic I2S configuration (input only)
i2s_config_t 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,
.intr_alloc_flags = 0,
.dma_buf_count = 4,
.dma_buf_len = 64,
.use_apll = false
};
i2s_pin_config_t pins = {
.bck_io_num = I2S_SCK,
.ws_io_num = I2S_WS,
.data_out_num = I2S_PIN_NO_CHANGE,
.data_in_num = I2S_SD
};
// Initialize driver
if (i2s_driver_install(I2S_NUM_0, &config, 0, NULL) == ESP_OK)
Serial.println("I2S driver installed OK");
else
Serial.println("I2S driver install FAILED");
if (i2s_set_pin(I2S_NUM_0, &pins) == ESP_OK)
Serial.println("I2S pins set OK");
else
Serial.println("I2S pin setup FAILED");
i2s_start(I2S_NUM_0);
Serial.println("I2S started. Reading samples...");
}
void loop() {
int32_t sample = 0;
size_t bytes_read = 0;
i2s_read(I2S_NUM_0, &sample, sizeof(sample), &bytes_read, portMAX_DELAY);
// Scale down to visible 16-bit range
int16_t s16 = sample >> 14;
Serial.println(s16);
delay(100); // slow output so you can read it
}
What I’ve Tried
Hardware
- Verified power (3.3 V stable)
- Confirmed continuity on all lines with a multimeter (many times...)
- Checked that SD pad isn’t shorted to GND ring
- Tried 3 other INMP441 microphones
- Tried 2 other ESP32-S3 boards (same model)
- Grounded L/R directly to mic GND pad
- Tried connecting L/R to both GND and 3.3 V (testing left/right channels)
- Used different jumper wires and breadboard rows, as well as directly connecting it.
Software
.bits_per_sample = I2S_BITS_PER_SAMPLE_24BIT- Changed sample rates (5 kHz, 16 kHz, 32 kHz)
- Tried both
I2S_COMM_FORMAT_I2SandI2S_COMM_FORMAT_STAND_I2S - Changed pins to various GPIO combinations: (13, 15, 14), (13, 16, 14), (13, 15, 16), (12, 15, 14), (18, 15, 14), (9, 15, 14), (10, 15, 14), (13, 7, 8), and many more...
- Verified that
i2s_driver_install()andi2s_set_pin()both returnESP_OK - Tried other known-working setups such as:
ThatProject/ESP32_MICROPHONE/ESP32_INMP441_SETUP_ESP-2.X/ESP32_INMP441_SETUP_ESP-2.X.ino at master · 0015/ThatProject · GitHub - Tested VU-meter example shared by aji_99 (reported working with regular ESP32)
- Flashed firmware multiple times to rule out corruption
- Also tested via ESPHome / Home Assistant YAML configs (same result)
Observations
- Serial output remains at 0 or –1 consistently
- No response to clapping, tapping, or voice
- Occasionally see very large numbers (~150000), likely from timing mismatch
- I²S driver initializes cleanly with no errors
- Power rails remain stable during sampling
Photos
on the back it says "ESP32-S3 DEVK RE1.0"
I would appreciate any advice on what to try or do as I am quite new to this and have been brute-forcing my way through the last few days. I also can't find any working setups online with my exact board, otherwise I would try that exactly.
If there is any other data needed, please let me know.
Thank you in advance!


