一起玩儿物联网人工智能小车(ESP32)——69 使用INMP441模块采集声音

摘要:本文介绍如何使用INMP441模块采集声音

前边介绍了第一个基于I2S通信协议的MAX98357A模块,利用该模块可以播放各种声音文件。今天来介绍如何使用INMP441模块实现声音的采集功能,也就是如何将声音转变成数字信号。

INMP441是一款高性能,低功耗,数字输出的全向MEMS(微型机电系统)麦克风。完整的INMP441由一个MEMS声音传感器,模数转换器(ADC),抗混叠滤波器,电源管理和标准的24位I2S接口组成。I2S接口允许INMP441直接连接到数字处理器,如DSP和微控制器,而无需再使用音频编解码器,极大的降低了开发的难度。INMP441具有高信噪比,是一款出色的近场应用。INMP441具有扁平宽带频率响应,使得采集声音的清晰度很高。

INMP441模块如下图所示:

INMP441具有以下这些特性和规格参数:

1 具有高精度24位数据的数字I2S接口

2 高信噪比为61dBA

3 高灵敏度-26dBFS

4 从60Hz到15kHz的稳定频率响应

5 低功耗:低电流消耗1.4mA

6 电源电压:1.62 V至3.63 V

7 高PSR:-75dBFS

8 尺寸:12mm*14mm

INMP441的接口定义如下所示:

序号

标识

说明

1

SCK

I2S接口的串行数据时钟

2

WS

用于I2S接口的串行数据字选择

3

L/R

左/右声道选择。设置为低电平时,麦克风在I2S帧的左声道输出信号。设置为高电平时,麦克风在右声道输出信号

4

SD

I2S接口的串行数据输出。

5

VCC

输入电源,1.8V至3.3V.

6

GND

电源地

在这里需要注意的是L/R引脚是用来设置本模块属于哪个声道的,也就决定了这个模块在WS信号是高电平还是低电平的时候有输出。一个双声道声音采集系统,如下图所示:

在上图中可以看到左声道的441模块L/R为接地,是低电平状态,右

### ESP32INMP441模块集成教程 #### 一、硬件准备 为了实现ESP32INMP441麦克风模块的集成,需准备好如下材料: - ESP32开发板一块; - INMP441数字麦克风模块一个。 这些组件可以通过多种渠道购买获得[^1]。 #### 二、电路连接方式 对于ESP32INMP441之间的接线,主要涉及电源以及I²S接口信号线的对接。具体来说: - 将INMP441的VDD接到ESP32的3.3V供电端口, - GND接地处理, - DATA(SD)连接至GPIO编号为33的位置用于接收音频采样数据流, - CLOCK (SCK)则应连向GPIO27负责同步时钟脉冲传送, - WS(Word Select/LRCLK)应当绑定到GPIO26来区分左右声道信息[^2]。 ```cpp // 定义 I2S 配置参数 #define BCK_PIN 27 // Bit Clock pin #define WS_PIN 26 // Word Select pin #define SD_PIN 33 // Serial Data pin ``` #### 三、软件配置过程 完成物理层面的搭建之后,在编程方面要确保正确初始化I2S驱动程序以便于后续操作。这里提供一段基于Arduino IDE环境下的简单示例代码片段展示如何设置I2S总线并与INMP441交互获取声音样本。 ```cpp #include "driver/i2s.h" void setup() { 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_16BIT, .channel_format = I2S_CHANNEL_FMT_ONLY_LEFT, .communication_format = I2S_COMM_FORMAT_I2S_MSB, .intr_alloc_flags = 0, .dma_buf_count = 8, .dma_buf_len = 64, .use_apll = false, .tx_desc_auto_clear = true, .fixed_mclk = 0 }; i2s_pin_config_t pin_config = { .bck_io_num = BCK_PIN, .ws_io_num = WS_PIN, .data_out_num = I2S_PIN_NO_CHANGE, .data_in_num = SD_PIN }; i2s_driver_install(I2S_NUM_0, &i2s_config, 0, NULL); i2s_set_pin(I2S_NUM_0, &pin_config); } void loop(){ int16_t data; size_t bytes_read; i2s_read(I2S_NUM_0,&data,sizeof(data),portMAX_DELAY); } ``` 此段代码实现了基本的数据采集流程,即从INMP441读入原始PCM格式的声音帧并存储在一个变量内供进一步分析或处理使用
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一起玩儿科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值