Skip to product information
1 of 4

PDM Microphone (MMICT3902)

PDM Microphone (MMICT3902)

SKU:AX22-0044

Capture clean voice from across the room. Built on TDK InvenSense's T3902. This omnidirectional mic pulls in far-field speech, holds a high SNR of 64.5 dB for crisp recordings, and takes loud, close-up sound without clipping thanks to a 120 dB acoustic overload point (126 dB in high-performance mode). All from a MEMS package smaller than a grain of rice.

Regular price $8.99
Regular price Sale price $8.99
Sale Sold out
View full details

Technical Details

- TDK InvenSense T3902 (MMICT3902) PDM MEMS microphone
- Omnidirectional, bottom-port digital mic
- High 64.5 dB signal-to-noise ratio
- 120 dB SPL AOP (126 dB in high-performance mode)
- −32 dB sensitivity, 36 Hz–20 kHz+ response
- Digital PDM output, fourth-order Σ-Δ modulator
- High-performance, low-power, standard & sleep modes
- 22 mm × 22 mm square
- 4× ⌀2.7 mm Mounting Holes
- Headers spaced for easy simultaneous access
- Arduino IDE Compatible
- MicroPython Compatible
- MicroBlocks Compatible

Material Datasheet →

Pinout

Technical Resources

PDM Microphone (MMICT3902) - (AX22-0044)
🖱️ Click & drag to rotate

#include <ESP_I2S.h>

I2SClass i2s;

#define SAMPLE_BUF 512
int16_t buf[SAMPLE_BUF];

void setup() {
  Serial.begin(115200);

  pinMode(P1_IO0, OUTPUT);
  digitalWrite(P1_IO0, LOW); // SEL low = left/mono slot

  i2s.setPinsPdmRx(P1_IO2, P1_IO1); // CLK, DATA
  if (!i2s.begin(I2S_MODE_PDM_RX, 16000, I2S_DATA_BIT_WIDTH_16BIT, I2S_SLOT_MODE_MONO)) {
    Serial.println("PDM mic init failed");
    return;
  }

  Serial.println("PDM mic ready");
}

void loop() {
  size_t bytes = i2s.readBytes((char*)buf, sizeof(buf));
  if (bytes == 0) return;

  int n = bytes / sizeof(int16_t);

  // RMS amplitude
  long long sum = 0;
  for (int i = 0; i < n; i++) sum += (long long)buf[i] * buf[i];
  float rms = sqrt((float)(sum / n));

  // Peak
  int16_t peak = 0;
  for (int i = 0; i < n; i++) {
    int16_t a = abs(buf[i]);
    if (a > peak) peak = a;
  }

  Serial.print("RMS:");
  Serial.print((int)rms);
  Serial.print(",PEAK:");
  Serial.println(peak);
}