L'INMP441 è un microfono MEMS digitale che fornisce dati audio tramite un'interfaccia I2S. Collega SCK come clock I2S, WS come segnale word-select (sinistra/destra) e SD come linea dati audio seriale, e alimentalo con 1,8–3,3 V con una GND comune.
| Pin | Segnale | Descrizione |
|---|---|---|
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 |
| Da | A | Filo |
|---|---|---|
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 |
Questo esempio è stato scritto e verificato in compilazione per arduino-uno. Codey Online lo adatta a qualsiasi altra scheda supportata.
// 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);
}
Descrivi cosa vuoi realizzare. Codey Online scrive il codice, disegna lo schema di collegamento, lo compila e programma la tua scheda direttamente dal browser.
Inizia gratis