ESP32S3读取数字麦克风INMP441的音频数据

ops/2025/3/13 21:28:19/

ESP32S3 与 INMP441 麦克风模块的集成通常涉及使用 I2S 接口进行数字音频数据的传输。INMP441 是一款高性能的数字麦克风,它通过 I2S 接口输出音频数据。在 Arduino 环境中,ESP32S3 的开发通常使用 ESP-IDF(Espressif IoT Development Framework)或兼容的 Arduino Core for ESP32,后者允许你使用类似于 Arduino 的编程模型。

由于 Arduino Core for ESP32 对 I2S 的直接支持可能不如 ESP-IDF 那么全面,但你可以使用已有的库或编写自己的代码来与 INMP441 通信。以下是一个简化的步骤指南和示例代码,用于在 Arduino 环境中使用 ESP32S3 读取 INMP441 的数据信号。

软件编程(Arduino 语言风格)

在 Arduino Core for ESP32 中,I2S 的支持可能不如 ESP-IDF 那么直接,但你可以使用现有的库或自己编写代码来配置和使用 I2S 接口。以下是一个简化的示例代码框架,用于初始化 I2S 接口并尝试读取 INMP441 的数据。请注意,这个示例可能需要根据你的具体硬件连接进行调整。

硬件连接

1、电源和地线连接

  • INMP441 VCC → ESP32的3.3V:为麦克风模块提供工作电压,确保其正常运行。
  • INMP441 GND → ESP32的GND:完成电路的接地连接,确保电路的稳定性和可靠性。

2、I2S 信号线连接

  • INMP441 SCK(时钟)→ ESP32的GPIO 17:SCK是I2S通信的时钟信号,用于同步数据传输。ESP32的GPIO 17被配置为I2S的时钟引脚,以接收来自麦克风的时钟信号。
  • INMP441 WS(帧选择)→ ESP32的GPIO 18:WS用于选择左声道或右声道的数据帧。ESP32的GPIO 18被配置为I2S的帧选择引脚,以识别当前数据帧的声道信息。
  • INMP441 SD(数据)→ ESP32的GPIO 16:SD是传输数字音频数据的信号线。ESP32的GPIO 16被配置为I2S的数据引脚,以接收麦克风采集到的数字音频信号。

连线依据总结

这种连线方式是基于I2S协议的标准连接方法,确保了ESP32S3能够正确地与INMP441麦克风进行通信,实现音频数据的采集和处理。通过将麦克风的I2S信号引脚连接到ESP32的相应GPIO引脚,并配置ESP32的I2S接口,可以实现高质量的音频数据传输。

引脚名称功能描述
VDD电源引脚,连接1.8V至3.3V的电源
GND地引脚,连接电源地
SD串行数据输出引脚,通过I2S接口传输数字音频数据
SCK串行时钟输入引脚,用于I2S接口的时钟信号
WS字选择输入引脚,用于I2S接口的帧同步信号(也称为LRCK)
L/R左/右声道选择引脚。当该引脚设置为低电平时,麦克风在I²S帧中输出其信号到左声道;当该引脚设置为高电平时,麦克风在I²S帧中输出其信号到右声道

这些引脚通过I2S协议实现音频数据的传输,其中SCK、WS和SD是I2S通信的关键引脚,L/R引脚用于选择声道。

Arduino代码

#include <Arduino.h>
#include <driver/i2s.h>// 定义I2S引脚
#define I2S_WS 18
#define I2S_SD 16
#define I2S_SCK 17
#define I2S_PORT I2S_NUM_0
#define bufferLen 1024  // 缓冲区大小int16_t sBuffer[bufferLen];  // 存储音频数据的缓冲区void setup() {Serial.begin(115200);Serial.println("Setup I2S...");// 初始化I2Si2s_config_t i2s_config = {.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_RX),.sample_rate = 48000,  // 采样率.bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT,.channel_format = I2S_CHANNEL_FMT_ONLY_LEFT,.communication_format = (i2s_comm_format_t)(I2S_COMM_FORMAT_STAND_I2S),.intr_alloc_flags = 0,.dma_buf_count = 16,.dma_buf_len = bufferLen,.use_apll = false};i2s_driver_install(I2S_PORT, &i2s_config, 0, NULL);i2s_pin_config_t pin_config = {.bck_io_num = I2S_SCK,.ws_io_num = I2S_WS,.data_out_num = I2S_PIN_NO_CHANGE,.data_in_num = I2S_SD};i2s_set_pin(I2S_PORT, &pin_config);i2s_start(I2S_PORT);
}void loop() {// 从INMP441读取数据size_t bytesIn = 0;esp_err_t result = i2s_read(I2S_PORT, &sBuffer, bufferLen * sizeof(int16_t), &bytesIn, portMAX_DELAY);if (result == ESP_OK && bytesIn > 0) {// 通过串口输出数据Serial.print("[");for (int i = 0; i < bufferLen; i++) {Serial.print(sBuffer[i]);if (i < bufferLen - 1) {Serial.print(", ");}}Serial.println("]");}
}

代码说明

  1. I2S配置

    • 使用I2S接口读取INMP441的音频数据。
    • 配置采样率为48000Hz,16位深度,单声道。
  2. 音频数据读取

    • 使用i2s_read函数从I2S接口读取音频数据。
    • 将数据通过UDP发送到接收端。

注意事项

  • 如果需要本地处理音频数据,可以将数据存储到文件或进行实时分析。

通过上述代码,你可以成功读取INMP441麦克风的数据信号,并通过ESP32S3进行处理或传输。

实验结果

在这里插入图片描述


http://www.ppmy.cn/ops/165515.html

相关文章

【深入解析Inception网络:从V1到V3的理论演进与对比,包含pytorch实现Inception模块的代码】

深入解析Inception网络&#xff1a;从V1到V3的理论演进与对比 1. Inception网络的背景与动机 在深度学习领域&#xff0c;卷积神经网络&#xff08;CNN&#xff09;通过堆叠卷积层提取图像特征&#xff0c;但传统架构存在两个核心问题&#xff1a; 计算效率低&#xff1a;随着…

二进制安装指定版本的MariaDBv10.11.6

一、官网下载mariadb安装包 Download MariaDB Server - MariaDB.org 找到对应的版本 下载安装包后上传到服务器这里不再赘述。 二、安装二进制包 1、解压安装包 2、查看安装包内的安装提示文档根据提示文档进行安装 # 解压安装包 tar xf mariadb-10.11.6-linux-systemd-x8…

解锁DeepSpeek-R1大模型微调:从训练到部署,打造定制化AI会话系统

目录 1. 前言 2.大模型微调概念简述 2.1. 按学习范式分类 2.2. 按参数更新范围分类 2.3. 大模型微调框架简介 3. DeepSpeek R1大模型微调实战 3.1.LLaMA-Factory基础环境安装 3.1大模型下载 3.2. 大模型训练 3.3. 大模型部署 3.4. 微调大模型融合基于SpirngBootVue2…

conda常用指令整理(持续更新...)

conda常用指令整理 此笔记涵盖conda常用指令&#xff0c;pip、命令行等常用指令。 1.查看conda版本 在Anaconda PowerShell Prompt中输入 conda --version2.创建新python虚拟环境 此python虚拟环境会存储在conda的envs中名为project_name的文件夹下 conda create --name …

SpringBoot实现文件上传

1. 配置文件上传限制 application.yml spring:servlet:multipart:max-file-size: 10MBmax-request-size: 10MB2. 创建文件上传控制器 import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; import…

【spring】springAOP

1.基本概念 AOP即面向切面编程&#xff0c;它利用的是一种横切技术&#xff0c;解剖开封装的对象内部&#xff0c;并将那些影响多个类的公共行为封装到一个可重 用模块&#xff0c;这就是所谓的Aspect方面/切面。所谓的切面&#xff0c;简单点所说&#xff0c;就是将哪些与业务…

蓝桥杯省赛真题C++B组-裁纸刀2022

一、题目 问题描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 小蓝有一个裁纸刀&#xff0c;每次可以将一张纸沿一条直线裁成两半。 小蓝用一张纸打印出两行三列共 6 个二维码&#xff0c;至少使用九次裁出来&#x…

解锁数据结构分享图:高效知识传播的关键

解锁数据结构分享图&#xff1a;高效知识传播的关键 在信息如洪流般涌来的时代&#xff0c;数据结构作为计算机科学的核心基石&#xff0c;其复杂性与重要性不言而喻。而数据结构分享图&#xff0c;则宛如一把神奇的钥匙&#xff0c;能够高效地打开理解数据结构知识宝库的大门…