Παραγγελία έως τις 14:00 τις εργάσιμες = αποστολή την ίδια ημέρα 30 ημέρες δικαίωμα υπαναχώρησης Εγγύηση 1 έτους
← Πίσω στην επισκόπηση

Διάγραμμα σύνδεσης και παράδειγμα κώδικα

Έτσι συνδέεις το Πολυκατευθυντικό Μικρόφωνο INMP441 MEMS 3.3V σε ένα Arduino UNO ή ESP32, με ένα παράδειγμα sketch που μπορείς να ανεβάσεις αμέσως.

Μικρόφωνο I2S INMP441 με Arduino Uno

Αυτό το έργο συνδέει ένα ψηφιακό, πανκατευθυντικό μικρόφωνο I2S INMP441 σε ένα Arduino Uno. Το Uno δημιουργεί τα σήματα I2S bit clock (SCK) και word select (WS) σε λογισμικό για να διαβάζει δείγματα ήχου 24-bit από τη γραμμή SD. Ανοίξτε το Serial Monitor ή το Serial Plotter στα 115200 baud για να δείτε τα επίπεδα ήχου να μεταβάλλονται σε πραγματικό χρόνο.

Διάγραμμα σύνδεσης: Πολυκατευθυντικό Μικρόφωνο INMP441 MEMS 3.3V σε ένα Arduino UNO
Διάγραμμα σύνδεσης · Κάνε κλικ για μεγέθυνση
Πίνακας σύνδεσης: Πολυκατευθυντικό Μικρόφωνο INMP441 MEMS 3.3V σε ένα Arduino UNO
Πίνακας σύνδεσης · Κάνε κλικ για μεγέθυνση
INMP441_I2S_Microphone_with_Arduino_Uno.ino · μεταγλωττισμένο και δοκιμασμένο
/*
 * ==================================================================
 *  Generated by Codey.online  —  https://www.codey.online
 * ==================================================================
 *  Project   : INMP441 I2S Microphone with Arduino Uno
 *  Board     : Arduino UNO (arduino:avr:uno)
 *  Parts     : INMP441 microphone
 *  Libraries : none (built-in)
 *
 *  Codey Online is an AI-powered browser IDE for Arduino and ESP32.
 *  Describe your project and Codey writes the code, draws the wiring
 *  diagram and uploads it to your board, straight from the browser.
 *  This code is free to use, modify and share, without warranty.
 * ==================================================================
 */

// INMP441 I2S Microphone demonstration on Arduino Uno

const int PIN_SCK = 2; // Serial Clock (SCK)
const int PIN_WS  = 3; // Word Select / LRCLK (WS)
const int PIN_SD  = 4; // Serial Data (SD)

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

  pinMode(PIN_SCK, OUTPUT);
  pinMode(PIN_WS, OUTPUT);
  pinMode(PIN_SD, INPUT);

  digitalWrite(PIN_SCK, LOW);
  digitalWrite(PIN_WS, LOW);

  Serial.println(F("INMP441 Microphone Demo Initialized."));
  Serial.println(F("Speak or make noise near the microphone."));
}

// Bit-bang 32 clock pulses per channel and sample 24-bit audio
int32_t readI2SSample() {
  int32_t sample = 0;

  // Select Left Channel
  digitalWrite(PIN_WS, LOW);

  // I2S standard has 1-bit delay before MSB
  for (int bit = 0; bit < 32; bit++) {
    digitalWrite(PIN_SCK, HIGH);
    digitalWrite(PIN_SCK, LOW);

    if (bit > 0 && bit <= 24) {
      sample = (sample << 1) | digitalRead(PIN_SD);
    }
  }

  // Select Right Channel to complete stereo frame
  digitalWrite(PIN_WS, HIGH);
  for (int bit = 0; bit < 32; bit++) {
    digitalWrite(PIN_SCK, HIGH);
    digitalWrite(PIN_SCK, LOW);
  }

  // Sign-extend 24-bit to 32-bit signed integer
  if (sample & 0x00800000) {
    sample |= 0xFF000000;
  }

  return sample;
}

void loop() {
  int32_t rawSample = readI2SSample();
  int32_t magnitude = abs(rawSample);

  Serial.print(F("Raw: "));
  Serial.print(rawSample);
  Serial.print(F("\tMagnitude: "));
  Serial.println(magnitude);

  delay(20);
}

Wiring diagram and example code generated by Codey.online — https://www.codey.online

Μετρητής στάθμης ήχου INMP441 I2S

Διαβάζει ψηφιακό ήχο από το πανκατευθυντικό μικρόφωνο I2S INMP441 και υπολογίζει επίπεδα έντασης σε πραγματικό χρόνο. Ανοίξτε το Serial Monitor ή το Serial Plotter στα 115200 baud για να δείτε οπτικά τον ήχο περιβάλλοντος και το πλάτος της φωνής.

Διάγραμμα σύνδεσης: Πολυκατευθυντικό Μικρόφωνο INMP441 MEMS 3.3V σε ένα ESP32 DevKit V1
Διάγραμμα σύνδεσης · Κάνε κλικ για μεγέθυνση
Πίνακας σύνδεσης: Πολυκατευθυντικό Μικρόφωνο INMP441 MEMS 3.3V σε ένα ESP32 DevKit V1
Πίνακας σύνδεσης · Κάνε κλικ για μεγέθυνση
INMP441_I2S_Sound_Level_Meter.ino · μεταγλωττισμένο και δοκιμασμένο
/*
 * ==================================================================
 *  Generated by Codey.online  —  https://www.codey.online
 * ==================================================================
 *  Project   : INMP441 I2S Sound Level Meter
 *  Board     : ESP32 DEVKIT V1 (esp32:esp32:esp32doit-devkit-v1)
 *  Parts     : INMP441 microphone
 *  Libraries : none (built-in)
 *
 *  Codey Online is an AI-powered browser IDE for Arduino and ESP32.
 *  Describe your project and Codey writes the code, draws the wiring
 *  diagram and uploads it to your board, straight from the browser.
 *  This code is free to use, modify and share, without warranty.
 * ==================================================================
 */

#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 64

int32_t samples[BUFFER_LEN];

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

  const i2s_config_t i2s_config = {
    .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 = ESP_INTR_FLAG_LEVEL1,
    .dma_buf_count = 4,
    .dma_buf_len = BUFFER_LEN,
    .use_apll = false
  };

  const i2s_pin_config_t pin_config = {
    .bck_io_num = I2S_SCK,
    .ws_io_num = I2S_WS,
    .data_out_num = I2S_PIN_NO_CHANGE,
    .data_in_num = I2S_SD
  };

  i2s_driver_install(I2S_PORT, &i2s_config, 0, NULL);
  i2s_set_pin(I2S_PORT, &pin_config);
}

void loop() {
  size_t bytes_read = 0;
  i2s_read(I2S_PORT, &samples, sizeof(samples), &bytes_read, portMAX_DELAY);

  int samples_read = bytes_read / sizeof(int32_t);
  int64_t sum = 0;

  for (int i = 0; i < samples_read; i++) {
    int32_t sample = samples[i] >> 14;
    sum += abs(sample);
  }

  if (samples_read > 0) {
    int32_t sound_level = sum / samples_read;
    Serial.print("SoundLevel:");
    Serial.println(sound_level);
  }

  delay(20);
}

Wiring diagram and example code generated by Codey.online — https://www.codey.online