I2S MEMS麦克风模块

该款MEMS数字I2S麦克风模块是以SPH0645LM4H声音传感器为核心,内置一个对声音敏感的电容式驻极体话筒。声波使话筒内的驻极体薄膜振动导致电容的变化,经过A/D转换被数据采集器接收通过I2S协议和主控通讯。
创客 音频 I2S ADC 乐高拼搭兼容 SPH0645LM4H

使用示例

测试PDM麦克风的时候需要搭配一个I2S音频放大器才可以完成测试

名称 数量
ESP32 IOT BOARD 1
I2S音频放大器模块 1
PDM麦克风模块 1
PH2.0接口喇叭模块 1
5Pin双头PH2.0杜邦线 1
4Pin双头PH2.0杜邦线 1
TypeC数据线 1

接线如下

PDM麦克风模块 ESP32
DATA 27
WS 26
BCK 25
音频放大器模块 ESP32
BCLK 33
LRCLK 32
DIN 23

imgFile

ESP32 Arduino示例代码

#include <ESP_I2S.h>

#define MIC_BCK    GPIO_NUM_25
#define MIC_WS     GPIO_NUM_26
#define MIC_DATA   GPIO_NUM_27

#define SPK_BCLK   GPIO_NUM_33
#define SPK_LRCK   GPIO_NUM_32
#define SPK_DATA   GPIO_NUM_23

I2SClass i2sMic;
I2SClass i2sSpk;

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

  // 麦克风输入
  i2sMic.setPins(MIC_BCK, MIC_WS, -1, MIC_DATA);
  bool ret = i2sMic.begin(I2S_MODE_STD, 16000, I2S_DATA_BIT_WIDTH_16BIT, I2S_SLOT_MODE_MONO);
  if (!ret) {
    Serial.println("Failed to initialize Mic I2S bus!");
    return;
  }

  // 杨声器输出
  i2sSpk.setPins(SPK_BCLK, SPK_LRCK, SPK_DATA);
  ret = i2sSpk.begin(I2S_MODE_STD, 16000, I2S_DATA_BIT_WIDTH_16BIT, I2S_SLOT_MODE_MONO);
  if (!ret) {
    Serial.println("Failed to initialize Speaker I2S bus!");
    return;
  }

  Serial.println("setup OK");
}

void loop() {
  size_t buf_size;
  uint8_t *wav_buffer = i2sMic.recordWAV(2, &buf_size);
  if (buf_size > 0) {
    Serial.printf("buffer size: %d\n", buf_size);
    size_t len = i2sSpk.write(wav_buffer, buf_size);
    delete wav_buffer;
  }
}

测试现象:

对准麦克风说话,即可在喇叭模块上实时听到麦克风录制的声音。