INMP441 on ESP32-S3-DevKitC-1-N16R8 - No Sound Detected (Always 0 Output)

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_I2S and I2S_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() and i2s_set_pin() both return ESP_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!

Stop now. None of your headers are soldered. There is no reliable electrical contact being made. It will not work and you are risking damage to both devices.

1 Like

Hi! Welcome to the Forum!

Getting the headers soldered is action zero.
This post might be of your interest after:

https://forum.arduino.cc/t/inmp441-on-esp32-mic-outputs-values-but-doesn-t-respond-to-voice-or-sound-amplitude/

1 Like

@Brazilino @van_der_decken thank you guys for the help and the warm welcome to the Forum!

Knew I was doing something stupid and needed some help. After soldering I did some testing and found out my breadboard does not work... So I swapped it out and audio is working!!

Appreciate the help!

2 Likes

hey , i am using inmp441 too in my esp32 s3 and i'm also getting only 0's and -1's on serial monitor . what should i do now ?

please help me i'm stuck with it !!

Please follow the forum guidelines.

  1. Start your own thread
  2. Show what you have (circuit schematic, photograph, code)

Without that we cannot help...

1 Like