The INMP441 is a digital MEMS microphone that provides audio data over an I2S interface. Connect SCK as the I2S clock, WS as the word-select (left/right) signal, and SD as the serial audio data line, and power it from 1.8–3.3 V with a common ground.
| Pin | Signal | Description |
|---|---|---|
SCK |
SCK | top-left through-hole pin |
WS |
data | top-center through-hole pin |
L/R |
digital | top-right through-hole pin |
SD |
data | bottom-left through-hole pin |
VDD |
power 1.8v - 3.3v | bottom-center through-hole pin |
GND |
ground | bottom-right through-hole pin |
| From | To | Wire |
|---|---|---|
board:5V |
x1:VDD |
red |
board:GND |
x1:GND |
black |
board:D3 |
x1:WS |
green |
board:D2 |
x1:SCK |
blue |
board:D4 |
x1:SD |
yellow |
board:GND.1 |
x1:L/R |
black |
This example was written and compile-checked for the arduino-uno. Codey Online adapts it to any other supported board for you.
// INMP441 microphone example for Arduino Uno
//
// Note: The Arduino Uno (AVR) does not have a built-in I2S peripheral or
// a standard preinstalled I2S library, so this sketch demonstrates a simple
// software-based read of the microphone clock/data lines using direct pin reads.
// This is not a full audio recorder, but it is a beginner-friendly example that
// compiles on Uno and shows how to detect microphone activity.
#include <Arduino.h>
const byte PIN_BCLK = 2; // SCK on the INMP441
const byte PIN_LRCLK = 3; // WS on the INMP441
const byte PIN_DATA = 4; // SD on the INMP441
volatile bool lastBclk = LOW;
uint32_t readOneI2SSample() {
// Wait for a rising edge on BCLK, then sample DATA.
bool current = digitalRead(PIN_BCLK);
while (current == lastBclk) {
current = digitalRead(PIN_BCLK);
}
lastBclk = current;
uint32_t sample = 0;
for (int i = 0; i < 24; i++) {
// Wait for next clock edge
bool clk = digitalRead(PIN_BCLK);
while (clk == lastBclk) {
clk = digitalRead(PIN_BCLK);
}
lastBclk = clk;
sample <<= 1;
if (digitalRead(PIN_DATA)) {
sample |= 1;
}
}
return sample;
}
void setup() {
Serial.begin(115200);
pinMode(PIN_BCLK, INPUT);
pinMode(PIN_LRCLK, INPUT);
pinMode(PIN_DATA, INPUT);
Serial.println("INMP441 microphone demo started");
Serial.println("L/R connected to GND selects the left channel.");
Serial.println("Speak near the microphone and watch the values change.");
}
void loop() {
// The INMP441 sends 24-bit audio data synchronized to BCLK/WS.
// On an Uno this software example is only suitable for basic learning.
uint32_t raw = readOneI2SSample();
// Convert to signed-ish 24-bit range for display.
int32_t sample = (int32_t)(raw & 0x00FFFFFF);
if (sample & 0x00800000) {
sample |= 0xFF000000;
}
long magnitude = labs(sample);
Serial.print("Raw: ");
Serial.print(sample);
Serial.print(" Magnitude: ");
Serial.println(magnitude);
delay(20);
}
Describe what you want to build. Codey Online writes the code, draws the wiring diagram, compiles it and flashes your board straight from the browser.
Start for free