当前位置: 首页 > java >正文

ESP32S3 关于使用INMP441麦克风 和MAX98357AETE功放进行录音和播放

一、接线

INMP441
在这里插入图片描述
SD 接IIS的DIn
SCK 接 BCK
WS 接 WS

接上电源和地
MAX98357
在这里插入图片描述
LRC接 ws
BCLK 接BCLK
DIN接 DOUT
VCC GND 正常接

下面是代码 头文件

#ifndef INMP441_H
#define INMP441_H#include "driver/gpio.h"
#include "driver/i2s_std.h"
#include "esp_check.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "sdkconfig.h"
#include <stdint.h>
#include <stdlib.h>// 麦克风#define INMP441_BCLK_IO 9               // I2S bit clock io number#define INMP441_STD_WS_IO 10            // I2S word select io number#define INMP441_STD_DOUT_IO GPIO_NUM_NC // I2S data out io number#define INMP441_STD_DIO_IO 11           // I2S data in io number//功放
#define MAX98357AETE_STD_WS_IO 12           // I2S word select io number  接LRC
#define MAX98357AETE_BCLK_IO 13             // I2S bit clock io number
#define MAX98357AETE_STD_DOUT_IO 14         // I2S data out io number
#define MAX98357AETE_STD_DIO_IO GPIO_NUM_NC // I2S data in io number// 麦克风
// #define INMP441_BCLK_IO 47              // I2S bit clock io number
// #define INMP441_STD_WS_IO 48            // I2S word select io number
// #define INMP441_STD_DOUT_IO GPIO_NUM_NC // I2S data out io number
// #define INMP441_STD_DIO_IO 19           // I2S data in io number// // 功放
// #define MAX98357AETE_BCLK_IO 2              // I2S bit clock io number
// #define MAX98357AETE_STD_WS_IO 1            // I2S word select io number
// #define MAX98357AETE_STD_DOUT_IO 42         // I2S data out io number
// #define MAX98357AETE_STD_DIO_IO GPIO_NUM_NC // I2S data in io number#define CONFIG_EXAMPLE_BIT_SAMPLE 32
#define CONFIG_EXAMPLE_SAMPLE_RATE 16000
#define NUM_CHANNELS (1) // For mono recording only!
#define SAMPLES_PER_FRAME 1024#define SAMPLE_SIZE (CONFIG_EXAMPLE_BIT_SAMPLE * 32)#define SAMPLE_RATE 16000                            // 16kHz采样率
#define BUFFER_MS 10                                 // 10ms缓冲区
#define BUFFER_SIZE (SAMPLE_RATE * BUFFER_MS / 1000) // 160 samplesvoid i2s_init_std(void);extern i2s_chan_handle_t tx_chan; // I2S tx channel handlerextern i2s_chan_handle_t rx_chan; // I2S rx channel handler
#endif

c文件

#include "INMP441.h"
#include "esp_log.h"static const char *TAG = "INMP441";
i2s_chan_handle_t tx_chan; // I2S tx channel handler
i2s_chan_handle_t rx_chan; // I2S rx channel handler// 定义独立控制器
#define RX_I2S_NUM I2S_NUM_0
#define TX_I2S_NUM I2S_NUM_1void i2s_init_std(void)
{i2s_chan_config_t tx_chan_cfg = I2S_CHANNEL_DEFAULT_CONFIG(TX_I2S_NUM, I2S_ROLE_MASTER);tx_chan_cfg.dma_desc_num = 8;    // 增大缓冲区数量tx_chan_cfg.dma_frame_num = 512; // 每帧 256 个样本ESP_ERROR_CHECK(i2s_new_channel(&tx_chan_cfg, &tx_chan, NULL));i2s_chan_config_t chan_cfg = I2S_CHANNEL_DEFAULT_CONFIG(RX_I2S_NUM, I2S_ROLE_MASTER);// 1. 配置 DMA 参数chan_cfg.dma_desc_num = 8;    // 增大缓冲区数量chan_cfg.dma_frame_num = 256; // 每帧 256 个样本ESP_ERROR_CHECK(i2s_new_channel(&chan_cfg, NULL, &rx_chan));i2s_std_config_t tx_std_cfg = {.clk_cfg = I2S_STD_CLK_DEFAULT_CONFIG(CONFIG_EXAMPLE_SAMPLE_RATE),.slot_cfg = I2S_STD_MSB_SLOT_DEFAULT_CONFIG(I2S_DATA_BIT_WIDTH_32BIT, I2S_SLOT_MODE_MONO),.gpio_cfg = {.mclk = I2S_GPIO_UNUSED, // some codecs may require mclk signal, this example doesn't need it.bclk = MAX98357AETE_BCLK_IO,.ws = MAX98357AETE_STD_WS_IO,.dout = MAX98357AETE_STD_DOUT_IO,.din = I2S_GPIO_UNUSED,.invert_flags = {.mclk_inv = false,.bclk_inv = false,.ws_inv = false,},},.slot_cfg.slot_mask = I2S_STD_SLOT_LEFT,};tx_std_cfg.slot_cfg.slot_mask = I2S_STD_SLOT_LEFT;ESP_ERROR_CHECK(i2s_channel_init_std_mode(tx_chan, &tx_std_cfg));i2s_std_config_t std_cfg = {.clk_cfg = I2S_STD_CLK_DEFAULT_CONFIG(CONFIG_EXAMPLE_SAMPLE_RATE),.slot_cfg = I2S_STD_PHILIPS_SLOT_DEFAULT_CONFIG(I2S_DATA_BIT_WIDTH_32BIT, I2S_SLOT_MODE_MONO),.gpio_cfg ={.mclk = I2S_GPIO_UNUSED, // some codecs may require mclk signal, this example doesn't need it.bclk = INMP441_BCLK_IO,.ws = INMP441_STD_WS_IO,.dout = I2S_GPIO_UNUSED,.din = INMP441_STD_DIO_IO, // In duplex mode, bind output and input to a same gpio can loopback// internally.invert_flags ={.mclk_inv = false,.bclk_inv = false,.ws_inv = false,},},.slot_cfg.slot_mask = I2S_STD_SLOT_LEFT,};// std_cfg.slot_cfg.slot_mask = I2S_STD_SLOT_LEFT;ESP_ERROR_CHECK(i2s_channel_init_std_mode(rx_chan, &std_cfg));
}

使用示例

   i2s_channel_enable(tx_chan);esp_err_t err = i2s_channel_write(tx_chan, converted_buffer, bytes_to_send, &bytes_written, portMAX_DELAY);i2s_channel_disable(tx_chan);

使能 发生数据 失能

http://www.xdnf.cn/news/13763.html

相关文章:

  • 复现论文报错解决
  • 新手速学:在线投票制作系统操作详细步骤
  • centos clamav 扫描及告警配置
  • 内网渗透测试技巧与利用操作手册(SMB / MSSQL / LDAP)
  • 全志A33安卓6.0添加支持usb摄像头动态热插拔
  • 换颜色 算法笔记
  • 新能源知识库(46)EMS与协控装置
  • 【深度学习-Day 27】模型调优利器:掌握早停、数据增强与批量归一化
  • 使用 C/C++的OpenCV 将多张图片合成为视频
  • 从零开始学Python(3)——函数
  • 第十三节:第七部分:Stream流的中间方法、Stream流的终结方法
  • 4、程序的固化和下载(一)
  • 《TCP/IP协议卷1》第11章 UDP:用户数据报协议
  • Error:Cannot find module ‘body-parser‘ | Require stack
  • 基于LQR控制算法的Simulink仿真
  • Harbor 2.12.2 and 2.12.3 初始化密码错误
  • 深度学习的分布式训练与集合通信(三)
  • 解决IntelliJ IDEA配置文件application.properties乱码的问题
  • 模型后处理可能包含的内容
  • Docker Docker Compose 一键安装
  • Ubuntu apt-get安装-报错:尝试“apt --fix-broken install”有未能满足的依赖关系,几种解决办法
  • 406. Queue Reconstruction by Height
  • 安装 Poppler(Windows)
  • Actix-web 中的权限中间件实现
  • 论文略读:Large Language Models Assume People are More Rational than We Really are
  • SQL进阶之旅 Day 27:存储过程与函数高级应用
  • 自检该如何写
  • 哈医大团队利用网络药理学+PPI分析+分子对接三联策略,解码灵芝孢子调控AKI凋亡的精准机制
  • 按关键字批量合并 Excel 多工作簿工作表攻略-Excel易用宝
  • FramePack 与其他视频生成工具的横向对比:优势、短板与差异化竞争