0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ESP32 I2S音频总线学习笔记(二):I2S读取INMP441音频数据

jf_88434166 来源:jf_88434166 作者:jf_88434166 2025-10-23 19:55 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

简介

在这个系列的上一篇文章中,我们介绍了ESP32 I2S音频总线的相关知识,简要了解了什么是I2S总线、它的通信格式,以及相关的底层API函数。没有看过上篇文章的可以点击文章进行回顾:

[ESP32 I2S音频总线学习笔记(一):初识I2S通信与配置基础]

这篇文章将介绍一个小案例——ESP32驱动INMP441读取音频数据,它是关于如何使用I2S读取数据的一个应用,主要是将ESP32读取到的音频数据发送到串口上并实时显示波形,这个我们可以通过串口绘图仪来实现。在这之前先来看一下INMP441这个模块吧

INMP441全向麦克风模块

在这里插入图片描述

NMP441是一款高性能、低功耗、数字输出,带底部端口的全向MEMS麦克风。该完整的INMP441解决方案由一个MEMS传感器信号调节模块、数字混合滤波器电源管理和行业标准的24位I²S接口组成。I²S接口允许INMP441直接连接到数字处理器,如DSP微控制器,无需额外的音频解码器。NMP441具有高信噪比,是一种适用于近场应用的理想选择。

产品特性:

具有高精度24位数据的数字I²S接口
高信噪比为61 dBA
高灵敏度-26 dBFS
从60 Hz到15 kHz的稳定频率响应
低功耗:低电流消耗1.4 mA
高PSR:-75 dBFS

功能框图

INMP441模块使用到的芯片内置ADC,用于将采集到的模拟信号转换成数字信号,上面还有滤波器和硬件控制、电源相关的引脚。
在这里插入图片描述

引脚定义

VDD输入电源,1.8V至3.3V
GND电源地
SCKI²S接口的串行数据时钟
WS用于I²S接口的串行数据字选择
SDI²S接口的串行数据输出
L/R左/右声道选择

其中L/R是 左/右声道选择。设置为低电平时,麦克风在I²S帧的左声道输出信号。设置为高电平时,麦克风在右声道输出信号。

安装I2S驱动

上篇文章我们在介绍I2S底层API函数提到,在使用I2S通信时需要加载I2S驱动,不知道小伙伴们还记不记得。这个加载I2S驱动的函数就是:esp_err_t i2s_driver_install(i2s_port_t i2s_num, const i2s_config_t *i2s_config, int queue_size, void *i2s_queue),里面有4个参数需要配置,在上次都有提到每个参数的意义。 其中比较复杂的是i2s_config这个结构体变量,我们需要对结构体的每个参数进行配置,如下:

除了后面几个整型变量,每个结构体成员其实是一个枚举类型

I2S工作模式mode

音频采样率bits_per_sample

通道格式channel_format

通信传输格式communication_format

知道了每个参数的含义以及知道它可以配置哪些参数,就可以调用i2s_driver_install这个函数了。 这里我们举一个安装I2S驱动的例子,就比较容易理解了。同时配置的时候,我们把它放在一个函数里面,起名为i2s_install( )。

配置I2S引脚

I2S通信最重要的三个信号是位时钟BCK、字时钟WS、数据引脚SD,因此我们需要对其引脚进行配置,设置I2S引脚的函数是esp_err_t i2s_set_pin(i2s_port_t i2s_num, const i2s_pin_config_t *pin),第一个参数传入I2S端口,填I2S_NUM_0或I2S_NUM_1, 第二个参数是结构体如下:

其中mck_io_num; bck_io_num,ws_io_num等都是整型变量,data_out_num如果我们没有用到就传入-1,在driver/i2s.h头文件定义了

假设我们要配置的引脚位时钟BCK、字时钟WS、数据引脚SD分别是D13, D12, D14,同样把要配置的参数写入一个函数i2s_setpin()里面,配置I2S引脚示例如下:

安装完I2S驱动和配置好I2S引脚后,我们只要在setup()函数里面调用这两个函数就可以了。

读取I2S数据

上面只是对I2S进行了一下初始化,要通过INMP441读取i2s数据,我们只需要调用esp_err_t i2s_read(i2s_port_t i2s_num, void *dest, size_t size, size_t *bytes_read, TickType_t ticks_to_wait);这个函数。因为前面在初始化I2S时的量化位数是16位,所以每个采样点的数据大小为2字节,我们将读取到的数据放入一个缓存区数组sBuffer,将数组长度bufferLen定义为64,确保每次从I2S接口读取时能获得足够的音频数据。 如果读取成功2s_read这个函数会返回一个ESP_OK,成功后就进入数据处理部分。这里我们将读取到的音频数据求均值然后可以用串口绘图仪观察它的数据波形,代码如下:

完整代码

接线图

写完代码后就可以开始接线了,接线图如下图所示:供电这里接3.3V,L/R接地。

实验效果

一开始接收到的是外界的声音,波形是杂乱无章的。后面用嘴吹气,波形会跟着吹气变化,不吹气波形是平缓不变的,后面大概吹了几次,可以看到波形变化,如下图:

总结

本篇文章介绍了通过ESP32的I2S通信实时读取INMP441麦克风模块的音频数据,并通过串口绘图仪显示音频数据波形。后面我们还会介绍使用INMP441采集音频并实时播放音频,感兴趣的可以先关注收藏一下!

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • I2S
    I2S
    +关注

    关注

    1

    文章

    80

    浏览量

    43884
  • ESP32
    +关注

    关注

    24

    文章

    1085

    浏览量

    20869
  • 音频总线
    +关注

    关注

    0

    文章

    3

    浏览量

    236
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    音频总线I2S协议:I2S收发模块FPGA的仿真设计

    1 概述 I2S(Inter—IC Sound)总线, 又称 集成电路内置音频总线,是飞利浦公司为数字音频设备之间的
    的头像 发表于 12-14 17:34 9742次阅读
    <b class='flag-5'>音频</b><b class='flag-5'>总线</b><b class='flag-5'>I2S</b>协议:<b class='flag-5'>I2S</b>收发模块FPGA的仿真设计

    全面解析I2S、TDM、PCM音频总线

    I2S是比较简单的数字接口协议,没有地址或设备选择机制。在I2S总线上,只能同时存在一个主设备和发送设备。主设备可以是发送设备,也可以是接收设备,或是协调发送设备和接收设备的其它控制设备。
    发表于 09-20 10:58 1.5w次阅读

    请问ESP-WROOM-32 I2S音频信号幅度读取异常怎么解决?

    。 通过以下代码获取ESP32 i2s接口采集的数据最大幅度: #include //I2S音频数据采样率48K #define
    发表于 07-01 07:50

    如何从INMP441 I2S麦克风向ESP32输入音频?

    = I2S_CHANNEL_FMT_ONLY_LEFT, // Ground the L/R pin on the INMP441. .communication_format
    发表于 04-13 07:45

    音频接口I2S实验

    实验目的 1.掌握有关音频处理的实验原理及说明;2.通过实验了解I2S(Inter–ICSound)音频接口的工作原理;3.通过实验掌握对处理器S
    发表于 12-29 00:07 116次下载

    基于FPGA和AD1836的I2S接口设计

    I2S(Inter IC Sound Bus)是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准,它既规定了硬件接口规范,也规定了数字
    发表于 03-29 11:02 7159次阅读
    基于FPGA和AD1836的<b class='flag-5'>I2S</b>接口设计

    i2s音频总线学习

    I2S是飞利浦公司针对数字音频设备(如CD播放器、数码音效处理器、数字电视音响系统)之间的音频数据传输而制定的一种总线标准。它采用了独立的导线传输时钟与
    发表于 01-29 16:29 4819次阅读
    <b class='flag-5'>i2s</b><b class='flag-5'>音频</b><b class='flag-5'>总线</b><b class='flag-5'>学习</b>

    i2si2c的区别

    I2C总线是由Philips公司开发的一种简单、双向线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。
    发表于 01-29 16:47 8w次阅读
    <b class='flag-5'>i2s</b>和<b class='flag-5'>i2</b>c的区别

    I2S接口工作原理_I2S接口介绍

    I2S总线, 又称 集成电路内置音频总线,是飞利浦公司为数字音频设备之间的音频数据传输而制定的一
    发表于 01-29 17:18 11.4w次阅读
    <b class='flag-5'>I2S</b>接口工作原理_<b class='flag-5'>I2S</b>接口介绍

    几种常见的I2S数据格式

    I2S总线简单有效,可以有效提升输出数据的质量,在各种嵌入式音频系统中有广泛应用。但是在嵌入式音频系统设计中,并不是所有的MCU都支持
    发表于 01-29 19:18 1.3w次阅读
    几种常见的<b class='flag-5'>I2S</b><b class='flag-5'>数据</b>格式

    I2S音频总线基本知识科普

    I2S(Inter—IC Sound)总线, 又称集成电路内置音频总线,是飞利浦公司为数字音频设备之间的
    的头像 发表于 04-12 07:48 3.2w次阅读
    <b class='flag-5'>I2S</b><b class='flag-5'>音频</b><b class='flag-5'>总线</b>基本知识科普

    I2S、TDM、PCM音频总线

    I2S包括两个声道(Left/Right)的数据,在主设备发出声道选择/字选择(WS)控制下进行左右声道数据切换。通过增加I2S接口的数目或其它I2
    的头像 发表于 09-20 11:01 7039次阅读

    基于MM32F5270的I2S音频播放

    基于MM32F5270的I2S音频播放
    的头像 发表于 10-30 17:13 2631次阅读
    基于MM32F5270的<b class='flag-5'>I2S</b><b class='flag-5'>音频</b>播放

    基于I2S接口的Linux内核音频技术

    I2S是飞利浦定义的数字音频传输标准,用于数字音频数据在系统内部器件之间传输。
    发表于 02-27 14:00 5408次阅读
    基于<b class='flag-5'>I2S</b>接口的Linux内核<b class='flag-5'>音频</b>技术

    I2S总线的定义和特点

    I2S(Inter-IC Sound)总线,又称为集成电路内置音频总线,是飞利浦公司(现为恩智浦半导体)为了数字音频设备之间的
    的头像 发表于 09-03 14:08 4719次阅读