在决定使用INMP441作为麦克风的时候,我们对麦克风的相关知识并不是很了解,所以过程中出了很多问题。出现问题,那就针对debug的结果和自己的猜想一个个去查,去实验,最后终于解决了问题,不过这个过程真的蛮令人抓狂的。本项目的代码都有参考网上的代码,参考列表会给出。本项目是基于Arduino平台开发的,因为简单,但是Arduino调试比较麻烦。在做的过程中,我学会了查阅官方文档,esp32的和INMP441的。
INMP441的连接
INMP441麦克风有6个引脚,长这样:
INMP441是芯片,麦克风是基于这个芯片的。
和网上PCM编码的图片对比之后,发现应该是PCM编码的麦克风。
这是一个数字麦克风,这很重要。数字麦克风本身包含ADC,它传递进来的是数字量,如果要播放,或者是上传到语音识别API中,必须要经过一次DAC。将输入的数字信号转换成电压模拟信号输出。
官方文档里对其引脚有详尽的描述:
再结合esp32-wrover板子的技术规格文档里的引脚信息,本次项目我们给出的连接方案是
INMP441 | ESP32 |
---|---|
SCK | 2 |
WS | 15 |
SD | 13 |
L/R | 无连接 |
GND | GND (对所有元件都是一样的) |
VDD | 3V3 |
INMP441录音
买的时候商家会有几个示例代码。注意:
- INMP441不需要额外的库,只需要esp32本身的<driver/i2s.h>库
- I2S的初始化可以参考esp32官方API指南,不再赘述。
在串口绘图器打印录音波形代码如下:
/**
* ESP32 I2S Serial Plotter Example.
* 在串口绘图器中显示声音波形
*/
#include <driver/i2s.h>
const i2s_port_t I2S_PORT = I2S_NUM_0;
void setup() {
Serial.begin(115200