ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

ESP-IDF:如何把 ESP32-S3 和 INMP441 的 I2S 录音一次调通(附完整配置)

ESP-IDF:如何把 ESP32-S3 和 INMP441 的 I2S 录音一次调通(附完整配置) ESP-IDF如何把 ESP32-S3 和 INMP441 的 I2S 录音一次调通附完整配置【免费下载链接】esp-idfEspressif IoT Development Framework. Official development framework for Espressif SoCs.项目地址: https://gitcode.com/GitHub_Trending/es/esp-idf把 INMP441 数字麦克风接到 ESP32-S3 上最常见的翻车现场是采集到的数据在 0、-1 附近乱跳偶尔蹦出一个天文数字波形跟真实声音完全对不上。这篇文章带你从接线一路做到驱动配置用 ESP-IDF 的 I2S 外设跑通 INMP441 采集。跟着做完你的串口监视器里会开始打印出随说话起伏的合理幅值。先把引脚接对ESP32-S3 接线对照表写代码之前先把四根线接好。下表沿用了官方 i2s_std 示例 中 ESP32-S3 的默认映射直接用即可信号引脚ESP32-S3说明VDD3V3供电INMP441 工作电压 1.5V~3.6VGNDGND与开发板共地别悬空SCKGPIO2BCLK由 S3 输出逐位推出麦克风的数据WSGPIO3字时钟像节拍器一样划定每个采样槽的边界SDGPIO5数据线麦克风的 24 位采样从这里出来⚠️ INMP441 只需要 BCLK WS 就能干活不需要 MCLK 线别白占一个 GPIO。每个参数为什么这么设参数取值理由sample_rate_hz48000落在麦克风 8k~48k 的常用采样率里BCLK 由它推导别随意改大mclk_multipleI2S_MCLK_MULTIPLE_256宏默认24 位数据时用它能让时钟分频是整数采样频率才精确data_bit_widthI2S_DATA_BIT_WIDTH_24BIT麦克风实打实输出 24 位设成 16/32 都会让数据错位slot_bit_widthI2S_SLOT_BIT_WIDTH_32BIT硬件按 32 位搬运槽位保持 32 位读出来再右移对齐最省事slot_modeI2S_SLOT_MODE_MONO单声道麦克风只在左槽有有效数据立体声模式会多抓一路空数据slot_maskI2S_STD_SLOT_LEFTINMP441 的有效数据固定走左声道left_aligntrue麦克风默认左对齐格式WS 一变第一个 bit 马上出发ws_polfalseWS 先拉低和 INMP441 默认时序一致bit_shifttrue左对齐下数据从 WS 翻转后的第 1 个 BCLK 起有效需要开启移位补偿直接抄这份模板下面这段是初始化接收通道的完整配置喂给i2s_channel_init_std_mode后S3 就会按上面表格的时序输出 WS 和 BCLK开始收数据i2s_chan_config_t chan_cfg I2S_CHANNEL_DEFAULT_CONFIG(I2S_NUM_0, I2S_ROLE_MASTER); ESP_ERROR_CHECK(i2s_new_channel(chan_cfg, NULL, rx_chan)); i2s_std_config_t std_cfg { .clk_cfg I2S_STD_CLK_DEFAULT_CONFIG(48000), .slot_cfg { .data_bit_width I2S_DATA_BIT_WIDTH_24BIT, .slot_bit_width I2S_SLOT_BIT_WIDTH_32BIT, .slot_mode I2S_SLOT_MODE_MONO, .slot_mask I2S_STD_SLOT_LEFT, .ws_width 32, .ws_pol false, .bit_shift true, .left_align true, .big_endian false, .bit_order_lsb false, }, .gpio_cfg { .mclk I2S_GPIO_UNUSED, .bclk GPIO_NUM_2, .ws GPIO_NUM_3, .din GPIO_NUM_5, .dout I2S_GPIO_UNUSED, }, }; ESP_ERROR_CHECK(i2s_channel_init_std_mode(rx_chan, std_cfg)); ESP_ERROR_CHECK(i2s_channel_enable(rx_chan));几个要按自己硬件微调的地方gpio_cfg里的三个 GPIO 号与上面接线表一一对应你换了引脚就只改这里。想换采样率只动clk_cfg里的 48000其余槽位参数跟着保持不变即可。mclk保持I2S_GPIO_UNUSED麦克风用不到它留默认可能把无关的 GPIO 牵扯进来。数据不对按这张表查3 分钟排错现象可能原因处理办法一直是 0 或 -1WS/BCLK 没接上或引脚映射写错对照接线表逐根量重点查 WS 和 SCK幅值正常但混入巨大野值对齐方式配错数据位没对齐槽位保持left_align true且bit_shift true别单独改一个声音变调变快/变慢采样率与实际 BCLK 不匹配核对sample_rate_hz别中途改mclk_multiple每隔几个点才有一段幅值slot_mode 设了立体声或掩码选错声道改回I2S_SLOT_MODE_MONOI2S_STD_SLOT_LEFTi2s_channel_read超时读数据太慢DMA 缓冲被冲掉加大chan_cfg里的 DMA 缓冲读任务别长时间阻塞读数时别漏了这几步24 位有效数据坐在 32 位字的高位取 16 位时用(int16_t)(sample 8)再送后续处理。采样是有符号二进制补码别当无符号打印否则安静会显示成七八百万。读任务里别塞长vTaskDelayDMA 缓冲溢出丢的是下一段真实声音。想存 WAV 的话参考 i2s_recorder 示例 里的文件封装写法头文件它已经帮你拼好了。 如果此刻串口里已经能打印出随说话起伏的采样值下一步建议顺手把 TX 通道挂上扬声器让录进去的声音放出来你就拥有了一条完整的录音回放链路。【免费下载链接】esp-idfEspressif IoT Development Framework. Official development framework for Espressif SoCs.项目地址: https://gitcode.com/GitHub_Trending/es/esp-idf创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表