测试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 |

#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;
}
}
测试现象:
对准麦克风说话,即可在喇叭模块上实时听到麦克风录制的声音。