KS6089 keyestudio DIY Electronic Brick ICS Microphone Module

1. Introduction

This module mainly adopts an ICS-43432 digital microphone chip, which is a high-performance and low-noise MEMS microphone with a bottom microphone hole. It is equipped with an internal MEMS sensor, Σ-Δ ADC, anti-aliasing filter, power manager and interfaces conforming to the I2S standard, and it can directly output 24-bit digital audio signals. Besides, two positioning holes are reserved on it with a diameter of 4.8mm, which is convenient for fixing it on other devices.

2. Parameters

  • Operating voltage : 3.3V - 5V DC

  • Interface : I2S digital interface

  • Signal-to-noise ratio : 65 dBA

  • Sensitivity : -26 dBFS

  • Power consumption : 1.5mA

  • Directivity : Omnidirectional

  • Data format : 24-bit I2S

  • Sensitivity tolerance : ±1 dB

  • Acoustic overload point : 116 dB SPL

  • Frequency response : 50 HZ - 20 kHZ

  • Operating temperature : -40°C to +85°C

  • Dimensions : 48mm × 24mm

3. Working Principle

Chip features:

  • High-precision 24-bit digital I2S interface

  • A sensitivity tolerance of -± 1 dB, suitable for microphone array applications

  • Broadband response, covering both voice and audio ranges

  • Low-power consumption, suitable for portable devices

I2S interface timing:

The I2S bus consists of three main signals:

  • SCK: bit clock

  • WS: word selection

  • DIN: serial audio data

Function diagram:

Schematic diagram

4. Pin Description

  • G: power ground

  • V: power positive

  • SCK: bit clock input

  • DIN: data output

  • WS: Left and right channel clocks

5. Wiring

Here we take ESP32 PLUS development board as an example:

Component

Quantity

ESP32 PLUS

1

ICS-43432 microphone module

1

M-F DuPont wire

5

TypeC cable

1

Microphone module

ESP32 development board

V

3.3V

G

GND

SCK

GPIO14

WS

GPIO12

DIN

GPIO13

6. Environment and Code

Environment Construction

For details, please refer too Keyestudio ESP32 PLUS.

Test Code

Arduino IDE code(based on ESP32):

#include "driver/i2s.h"
#include <Arduino.h>

long avgVol = 0;  

void setup() {
  Serial.begin(115200);
  
  // I2S configuration
  i2s_config_t config = {
    .mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_RX),
    .sample_rate = 44100,
    .bits_per_sample = I2S_BITS_PER_SAMPLE_32BIT,
    .channel_format = I2S_CHANNEL_FMT_ONLY_LEFT,
    .communication_format = I2S_COMM_FORMAT_STAND_I2S,
    .intr_alloc_flags = 0,
    .dma_buf_count = 4,
    .dma_buf_len = 64,
    .use_apll = false
  };

  i2s_pin_config_t pins = {
    .bck_io_num = 14,
    .ws_io_num = 12,
    .data_out_num = I2S_PIN_NO_CHANGE,
    .data_in_num = 13
  };

  i2s_driver_install(I2S_NUM_0, &config, 0, NULL);
  i2s_set_pin(I2S_NUM_0, &pins);
  i2s_start(I2S_NUM_0);
}

void loop() {
  int32_t samples[64];
  size_t bytes_read;
  
  i2s_read(I2S_NUM_0, samples, sizeof(samples), &bytes_read, portMAX_DELAY);
  
  long total = 0;
  for(int i = 0; i < 64; i++) {
    total += abs(samples[i]);
  }
  
  int raw = total / 64;  
  int scaled = raw / 30000;  
  avgVol = (avgVol * 9 + scaled) / 10;  
  int vol = constrain(avgVol, 0, 1000);  
  Serial.println(vol);  
   
  delay(200); 
}

7. Test Result

After burning the test code, wire up and power on, and turn on the serial monitor.

Normally receive external sounds:

Blow on the module:

Make some noise: