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
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
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
#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);
}