Documentation

INMP441 I2S Omnidirectional Microphone Module | ShillehTek Product Manual
Documentation / INMP441 I2S Omnidirectional Microphone Module | ShillehTek Product Manual

INMP441 I2S Omnidirectional Microphone Module | ShillehTek Product Manual

Overview

The INMP441 is a high-quality digital MEMS microphone with an I2S output, perfect for adding clean audio capture to any I2S-capable microcontroller (ESP32, Raspberry Pi Pico, Teensy, STM32). Unlike analog microphones that need amplification and ADC sampling, the INMP441 outputs a fully digital 24-bit PCM audio stream directly — you connect three signal lines (BCLK, LRCLK, DOUT) and feed I2S samples into your audio buffer with no extra components.

It's especially popular for ESP32 voice-recognition, voice-activation, audio-streaming projects (like ESPHome microphones, voice assistants, audio-monitoring), AI-edge inference (using something like TensorFlow Lite to detect sound classes), and as a USB / WiFi microphone in DIY conferencing setups. Sensitivity is -26 dBFS (1 Pa), bandwidth covers the full audio range from 60 Hz to 15 kHz, and signal-to-noise ratio is a respectable 61 dB — comparable to mid-range smartphone microphones.

The L/R pin selects which I2S channel the mic outputs on (left or right), letting you stereo-pair two INMP441 modules on the same I2S bus by setting one to L and the other to R. SD (data output) is high-impedance when not transmitting, so multiple mics can share an I2S bus.

At a Glance

Type
Digital MEMS I2S microphone
Output
24-bit I2S PCM
Sample Rates
8 - 48 kHz
Sensitivity
-26 dBFS @ 1 Pa
SNR
61 dB(A)
Operating Voltage
1.8V - 3.3V

Specifications

Parameter Value
Microphone InvenSense / TDK INMP441 (omnidirectional MEMS)
Interface I2S (Inter-IC Sound)
Resolution 24-bit signed PCM
Sample Rate Range 8 kHz - 48 kHz
Sensitivity -26 dBFS @ 94 dB SPL (1 Pa)
Frequency Response 60 Hz - 15 kHz
SNR 61 dB(A)
Acoustic Overload Point 120 dB SPL
Operating Voltage 1.8V - 3.3V (3.3V typical)
Operating Current ~1.4 mA active
Connector 6-pin header, 2.54 mm
Form Factor Round PCB, ~15 mm diameter

Pinout Diagram

INMP441 I2S omnidirectional microphone module round PCB pinout showing L/R, WS, SCK, GND, VDD, and SD pins

Pin Descriptions

Pin Function
VDD Power supply (1.8 - 3.3V)
GND Ground
SCK / BCLK I2S bit clock (master clock from MCU)
WS / LRCLK I2S word select / left-right clock
SD / DOUT I2S serial data output (audio stream)
L/R Channel select: GND = left, VDD = right

Wiring Guide

ESP32 I2S Connection

ESP32 has flexible I2S pin assignment — any GPIOs can be used for BCLK, LRCLK, and DIN. Below is a common assignment.

Mic Pin ESP32 GPIO
VDD 3V3
GND GND
SCK (BCLK) GPIO14 (or any output)
WS (LRCLK) GPIO15 (or any output)
SD (DOUT) GPIO32 (or any input)
L/R GND (left channel)

Raspberry Pi Pico (MicroPython, machine.I2S)

Mic Pin Pi Pico Pin
VDD 3V3 (Pin 36)
GND GND
SCK (BCLK) GP10 (Pin 14)
WS (LRCLK) GP11 (Pin 15)
SD (DOUT) GP12 (Pin 16)
L/R GND

Code Examples

ESP32 (Arduino IDE) — Read 1024 Samples and Print RMS Level

esp32_i2s.ino
#include <driver/i2s.h>

#define I2S_WS  15
#define I2S_SD  32
#define I2S_SCK 14
#define I2S_PORT I2S_NUM_0
#define BUFFER_LEN 1024

int32_t sBuffer[BUFFER_LEN];

void i2s_install() {
  const i2s_config_t cfg = {
    .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_t(I2S_COMM_FORMAT_STAND_I2S),
    .intr_alloc_flags = 0,
    .dma_buf_count = 8,
    .dma_buf_len = BUFFER_LEN,
    .use_apll = false
  };
  i2s_driver_install(I2S_PORT, &cfg, 0, NULL);
}

void i2s_setpin() {
  const i2s_pin_config_t pins = {
    .bck_io_num = I2S_SCK,
    .ws_io_num = I2S_WS,
    .data_out_num = -1,
    .data_in_num = I2S_SD
  };
  i2s_set_pin(I2S_PORT, &pins);
}

void setup() {
  Serial.begin(115200);
  i2s_install();
  i2s_setpin();
  i2s_start(I2S_PORT);
}

void loop() {
  size_t bytesIn = 0;
  i2s_read(I2S_PORT, &sBuffer, sizeof(sBuffer), &bytesIn, portMAX_DELAY);
  long sum = 0;
  int n = bytesIn / 4;
  for (int i = 0; i < n; i++) sum += (sBuffer[i] >> 14);  // shift to 18-bit usable
  Serial.println(sum / n);
}

Frequently Asked Questions

My audio sounds like white noise / static.
Three common causes: (1) BCLK and LRCLK swapped — verify wiring. (2) L/R pin floating — tie it to GND for left channel. (3) Reading wrong bit depth — INMP441 outputs 24-bit data shifted into 32-bit slots, so configure I2S as 32-bit and discard the lower 8 bits, or use 24-bit mode if your driver supports it.
Can I use this with Arduino UNO or Nano (ATmega328)?
No — the ATmega328 doesn't have an I2S peripheral. You'd need to bit-bang I2S, which doesn't work for real-time audio at audio rates. Use ESP32, Pi Pico, Teensy, or STM32 instead.
How do I record audio to a file?
On ESP32, read I2S samples in chunks, write them as 16-bit PCM to a WAV file on an SD card. The SparkFun ESP32-S2 audio examples include a complete WAV recorder. Sample at 16 kHz mono — that's plenty for voice, and uses much less storage than 48 kHz stereo.
What's the difference between INMP441 and ICS43434?
Both are MEMS I2S mics; the ICS43434 has slightly better noise (65 dB SNR vs 61 dB), but the INMP441 is cheaper and more widely used in maker projects. For voice / general audio capture, both are fine.
Can I record stereo with two INMP441s?
Yes — tie one mic's L/R to GND (left) and the other's L/R to VDD (right). Connect both to the same SCK, WS, and SD lines. Set your I2S driver to stereo mode and you'll get interleaved L/R samples.
Why is the audio quiet?
The INMP441 outputs 24-bit data; if your code reads it as 16-bit and shifts incorrectly, the level will be too low. Sample at 32-bit and shift right by 11-14 bits to scale to a reasonable amplitude, or use a 24-bit-aware audio library.