
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
Drag to rotate
Pinout & connections
Arduino example
#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);
}