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

这篇具有很好参考价值的文章主要介绍了一起玩儿物联网人工智能小车(ESP32)——69 使用INMP441模块采集声音。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

INMP441模块如下图所示:

esp32 inmp441,基于ESP32的物联网人工智能小车,硬件功能模块,单片机,ESP32

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信号是高电平还是低电平的时候有输出。一个双声道声音采集系统,如下图所示:

esp32 inmp441,基于ESP32的物联网人工智能小车,硬件功能模块,单片机,ESP32

在上图中可以看到左声道的441模块L/R为接地,是低电平状态,右声道的L/R为接电源正极,是高电平状态。这样微处理器在读取数据时,通过控制WS的状态,就可以分别读取左右声道的数据了。

前面的MAX98357A模块的使用借助了第三方的库函数,可以说在开发中基本没有涉及到I2S协议的底层操作。这次通过使用微处理器厂家提供的原生驱动来实现INMP441声音采集后由MAX98357A播放出来的程序。

使用微处理器厂家提供的原始库函数来驱动I2S设备工作,通常需要以下几个步骤:

1.引入头文件

#include <driver/i2s.h>

2.I2S控制器初始化

ESP32处理器内置了2个I2S控制器,因此可以同时与两个音频设备之间传输音频数据。每个I2S控制器都具备以下功能,可由I2S驱动进行配置:

  1. 可用作系统主机或从机
  2. 可用作发射器或接收器
  3. DMA控制器支持流数据采样,CPU无需单独复制每个采样数据

在Arduino中,对I2S控制器进行初始化的方法为:i2s_driver_install()。该方法的主要参数为i2s_config_t类型的结构实例,在该数据结构中,定义了I2S通信的基本参数,主要包括了以下这些属性:

mode:I2S的工作模式。

sample_rate:I2S的采样率

bits_per_sample:I2S的采样位数

channel_format:设置左右声道

communication_format:设置交流格式

dma_buf_count:设置DMA缓冲区的数量

dma_buf_len:设置每个DMA缓冲区的大小

use_apll:设置是否使用精确时钟

intr_alloc_flags:设置如何分配中断

3.设置I2S使用的引脚

使用i2s_set_pin()方法可以设置I2S通信所使用的引脚。该方法所使用的参数为i2s_pin_config_t类型的数据结构,在该结构中定义的了I2S通信所使用的引脚。该结构有如下属性:

bck_io_num:设置串行时钟引脚

ws_io_num:设置左右声道的时钟引脚

data_out_num:设置数据输出引脚

data_in_num:设置数据输入引脚

需要注意的是,在驱动MAX98357A模块的时候,使用的是数据输出引脚,而在驱动INMP441模块的时候,则使用的是输入引脚。不使用的引脚可以赋值-1。ESP32微处理器是支持输入和输出引脚同时使用的,也就是可以同时读入音频数据和输出音频数据。但前提条件是由于收发通道共用一个时钟信号,因此要求两者的配置相同。

4.读入或者输出音频数据。

在前面配置完成后,就可以使用i2s_read()方法读入音频数据,i2s_write()方法输出音频数据了。这两个方法的具体使用,请参照下面的例子。

接下来就看一下这个示例的源代码吧,如下所示:

#include "Arduino.h"

#include <driver/i2s.h>

#define INMP441_WS 22

#define INMP441_SCK 21

#define INMP441_SD 32

#define MAX98357_LRC 27

#define MAX98357_BCLK 26

#define MAX98357_DIN 25

#define SAMPLE_RATE 44100

i2s_config_t i2sIn_config = {

  .mode = i2s_mode_t(I2S_MODE_MASTER | I2S_MODE_RX),

  .sample_rate = SAMPLE_RATE,

  .bits_per_sample = i2s_bits_per_sample_t(16),

  .channel_format = I2S_CHANNEL_FMT_ONLY_LEFT,

  .communication_format = i2s_comm_format_t(I2S_COMM_FORMAT_STAND_I2S),

  .intr_alloc_flags = ESP_INTR_FLAG_LEVEL1,

  .dma_buf_count = 8,

  .dma_buf_len = 1024

};

const i2s_pin_config_t i2sIn_pin_config = {

  .bck_io_num = INMP441_SCK,

  .ws_io_num = INMP441_WS,

  .data_out_num = -1,

  .data_in_num = INMP441_SD

};

i2s_config_t i2sOut_config = {

  .mode = i2s_mode_t(I2S_MODE_MASTER | I2S_MODE_TX),

  .sample_rate = SAMPLE_RATE,

  .bits_per_sample = i2s_bits_per_sample_t(16),

  .channel_format = I2S_CHANNEL_FMT_ONLY_RIGHT,

  .communication_format = i2s_comm_format_t(I2S_COMM_FORMAT_STAND_I2S),

  .intr_alloc_flags = ESP_INTR_FLAG_LEVEL1,

  .dma_buf_count = 8,

  .dma_buf_len = 1024

};

const i2s_pin_config_t i2sOut_pin_config = {

  .bck_io_num = MAX98357_BCLK,

  .ws_io_num = MAX98357_LRC,

  .data_out_num = MAX98357_DIN,

  .data_in_num = -1

};

void setup() {

  // put your setup code here, to run once:

  Serial.begin(115200);

  i2s_driver_install(I2S_NUM_0, &i2sIn_config, 0, NULL);

  i2s_set_pin(I2S_NUM_0, &i2sIn_pin_config);

  i2s_driver_install(I2S_NUM_1, &i2sOut_config, 0, NULL);

  i2s_set_pin(I2S_NUM_1, &i2sOut_pin_config);

}

void loop() {

  // put your main code here, to run repeatedly:

  size_t bytes_read;

  int16_t data[512];

  esp_err_t result = i2s_read(I2S_NUM_0, &data, sizeof(data), &bytes_read, portMAX_DELAY);

  result = i2s_write(I2S_NUM_1, &data, sizeof(data), &bytes_read, portMAX_DELAY);

}

好了,I2S通信协议的使用方法就介绍到这里了。文章来源地址https://www.toymoban.com/news/detail-840085.html

到了这里,关于一起玩儿物联网人工智能小车(ESP32)——69 使用INMP441模块采集声音的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

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

    摘要:本文介绍如何使用INMP441模块采集声音 前边介绍了第一个基于I2S通信协议的MAX98357A模块,利用该模块可以播放各种声音文件。今天来介绍如何使用INMP441模块实现声音的采集功能,也就是如何将声音转变成数字信号。 INMP441是一款高性能,低功耗,数字输出的全向MEMS(微

    2024年03月15日
    浏览(34)
  • 一起玩儿物联网人工智能小车(ESP32)——63 SD和TF卡模块的使用

    摘要:本文介绍SD和TF卡模块的使用方法 前面介绍了非易失性存储的使用方法,由于空间和本身只支持键值对的限制,非易失性存储只适用于少量数据的记录。而不适用于各种声音、图片、大量数据等情况的使用。这时候就需要有文件系统或者更大容量存储空间的支持。SD卡(

    2024年02月22日
    浏览(23)
  • 一起玩儿物联网人工智能小车(ESP32)——71 姿态传感器MPU6050的使用方法

    摘要:本文介绍姿态传感器MPU6050的使用方法 姿态传感器是一种用于测量物体姿态的传感器,它可以检测物体的加速度和角速度,并计算出物体的方向和角度。前边介绍的RPI-1031只能定性的得到物体的倾斜情况,而姿态传感器则可以定量的得到物体倾斜的方向和角度。 MPU6050是

    2024年04月28日
    浏览(15)
  • 一起玩儿物联网人工智能小车(ESP32)——12. 组装L298N驱动马达和供电电路

    摘要:本文介绍L298N模块与TT马达以及电源模块的接线方法,并进行初始测试。 在前面完成了第一个ESP32程序。接下来要继续组装我们的智能物联网小车了。今天要完成的工作就是完成智能小车电机驱动和ESP32开发板的控制电路连接。在具体的动手之前,先要进行一些准备工作

    2024年02月02日
    浏览(17)
  • 一起玩儿物联网人工智能小车(ESP32)——59. 基于TFT_eSPI库的1.3寸SPI彩色显示屏的使用(ST7789)

    摘要:本文是TFT液晶屏的基本知识和TFT_eSPI库的简单介绍 在前边已经介绍过0.96寸OLED显示屏的使用方法,那是一个单色屏,显示效果很是一般,因此,本篇来介绍彩色TFT(Thin Film Transistor:薄膜晶体管)显示屏的使用方法。 TFT屏幕和OLED屏幕是两种不同的显示器件。TFT屏幕和

    2024年02月21日
    浏览(20)
  • 一起玩儿物联网人工智能小车(ESP32)——61 基于TFT_eSPI库的1.3寸SPI彩色显示屏的使用(ST7789)(三)

    摘要:本文介绍TFT_eSPI中文字库的制作方法 前面已经介绍了TFT_eSPI库的基本使用方法,如果你可以将英文显示到液晶屏幕上了,那么就可以尝试本文的制作中文字库,并显示中文到液晶屏幕了,否则还是要先完成上一篇文章的学习。 接下来就开始制作中文字库。TFT_eSPI自带了

    2024年02月21日
    浏览(21)
  • 一起玩儿物联网人工智能小车(ESP32)——41. 直流有刷电机驱动模块——L9110S、TB6612FNG和DRV8833简介

    摘要:本文介绍如何使用直流有刷电机驱动模块——L9110S、TB6612FNG和DRV8833 在前边很详细的介绍了直流有刷电机驱动模块L298N,该模块性能良好,输出功率大。但体积也是偏大,本篇文章介绍一下市场上另外几个常见的小型直流有刷电机驱动模块L9110S、TB6612FNG和DRV8833的使用方

    2024年02月21日
    浏览(18)
  • 一起玩儿物联网人工智能小车——04. TT马达的基本介绍

    马达和电机在英语中是两个词,但在我们汉语中感觉差别不大,大概是电机专指电能转与机械能的相互转换的装置,而马达可能包含其他形式的能量与机械能的转换装置。在本文中马达就是特指将电能转化为机械能的电动机。 日常使用的电动机在作用上通常可以分为两种,一

    2024年02月20日
    浏览(22)
  • 物联网毕设 -- 智能图像小车(ESP32+STM32+APP)

    目录 前言  小车拓展 一 连线图 1. 原理图 2. 流程图 3. 实物效果 4. 功能概括 (1)硬件端: (2)APP端: 演示视频 二 底层代码使用方式 1. 使用说明 2. 下载程序 三 APP使用方式 1.下载APP (1)操作方式: (2)使用说明 2. APP界面 🫡若需要,请咨询博主🫡 这个项目的硬件端是

    2024年02月15日
    浏览(19)
  • 走进人工智能| 智能物联网 AIoT的魅力交织

    前言: AI+IoT是指人工智能(AI)与物联网(IoT)的结合。智能物联网是一种技术体系,通过连接和集成物理设备、传感器和互联网,实现设备之间的智能交互和数据共享,为人们提供智能化、自动化和高效化的生活和工作体验。 智能物联网 (Internet of Things,IoT)是指 通过物

    2024年02月14日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包