立创开发板入门第六课 音频-扬声器和麦克风 I2S驱动

音频芯片介绍

开发板上带有一个麦克风,一个扬声器,音频编解码芯片使用ES8311。麦克风直接连接到了ES8311芯片上,ES8311和扬声器之间,还有一个音频驱动放大器。ES8311通过I2S接口与ESP32-C3连接。

ES8311这个芯片不仅使用I2S接口与ESP32连接,还有I2C接口与ESP32连接,I2C接口用于配置,I2S接口用于音频传输。

配置文件example_config.h

I2C引脚相关代码在它24~35行之间,这里使用了条件编译,根据使用的ESP32不同型号,定义I2C引脚。针对我们开发板上ESP32-C3,我们应该修改它的33、34行,我们修改为开发板上使用的GPIO0和GPIO1引脚。

I2C,共四个接线,VCC(正极), SCL,SDA,GND(负极),所以需要定义的只有SCL和SDA。

/* I2C端口和GPIO */
#define I2C端口号         (0)
#define I2C_串行时钟线      (GPIO_NUM_1)
#define I2C_串行数据线      (GPIO_NUM_0)

I2S引脚相,共五个接线,MCK主时钟引脚,BCK时钟引脚,WS左右声道引脚,SDI串行数据输入引脚用于接收音频数据,SDO串行数据输出引脚用于发送音频数据,

例如: 44.1kHz(音频的采样频率)×16(位数据)×2(对于立体声,由WS决定)=1.4112MHz(BCK),然后MCK通常是BCK的整数倍 256 倍或 384 倍等,例如1。4112MHz x 256 ≈361.27MHz

关代码在它的37~48之间。 先修改39~41行。

/* I2S端口和GPIO */
#define I2S端口号         (0)               //I2S_NUM
#define I2S_主时钟线      (GPIO_NUM_10)
#define I2S_位时钟线      (GPIO_NUM_8)
#define I2S_帧同步线       (GPIO_NUM_12)
#define I2S_数据输出线       (GPIO_NUM_11)
#define I2S_数据输入线       (GPIO_NUM_7)

 main文件块区:

1、换VDD_SPI引脚替换成GPIO11。

开发板上只把它用做GPIO11,I2S_DO引脚。把它变成GPIO11,需要调用一个函数即可。

printf("ESP电子熔丝VDD-SPI作为GPIO开始\n-----------------------------\n");
esp_efuse_write_field_bit(ESP_EFUSE_VDD_SPI_AS_GPIO);

第一行语句是提示,第二行代码是把VDD_SPI引脚变成GPIO引脚的函数,只需要运行一次,就可以将上面的两行代码注释起来。

 2、音频放大器芯片配置

gpio_config_t io_conf = {.intr_type = GPIO_INTR_DISABLE, // 禁止中断.mode = GPIO_MODE_OUTPUT,       // 设置为输出模式.pin_bit_mask = 1 << 13,        // 引脚的位掩模.pull_down_en = 0,              // 禁用下拉模式.pull_up_en = 1,                // 启用上拉模式};//使用给定设置配置GPIOgpio_config(&io_conf);gpio_set_level(GPIO_NUM_13, 1); // 输出高电平

3、i2s es8311编解码器

printf("i2s es8311编解码器示例启动\n-----------------------------\n");/* 初始化i2s外设 */if (i2s_driver_init() != ESP_OK) {ESP_LOGE(标签, "i2s驱动初始化失败");abort();} else {ESP_LOGI(标签, "i2s驱动初始化成功");}/* 初始化i2c外设并通过i2c配置es8311编解码器 */if (es8311_codec_init() != ESP_OK) {ESP_LOGE(标签, "es8311编解码器初始化失败");abort();} else {ESP_LOGI(标签, "es8311编解码器初始化成功");}

 4、选择是播音乐,还是测试麦克风的(回声机)。

#if CONFIG_EXAMPLE_MODE_MUSIC/* 在音乐模式下播放一段音乐 */xTaskCreate(i2s_music, "i2s_music", 4096, NULL, 5, NULL);
#else/* 在回声模式下回声来自MIC的声音 */xTaskCreate(i2s_echo, "i2s_echo", 8192, NULL, 5, NULL);
#endif

5、在源码的开头引入的头文件等,接下来是变量命名和导入音乐文件作为缓冲区,然后是对应子程序的设计。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/892985.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pix2pix mmgeneration通用场景黑白图片上色模型训练,Docker

https://www.dong-blog.fun/post/1924 对于机器学习和深度学习感兴趣的读者来说,OpenMMLab 提供的 MMGeneration 库是一个绝佳的选择。最近我在阅读一篇关于 MMGeneration 的博客文章,尤其是在使用 Docker 环境进行模型和算法测试方面,受益匪浅。以下是我对目标博客内容的概…

数据仓库复用性:业务需求复用性设计

数据仓库的业务需求复用性设计是提升数据架构灵活性和扩展性的关键部分。以下是几个关键点&#xff0c;可以帮助实现业务需求复用性的设计&#xff1a; 1. 通用报表的复用 标准化数据模型&#xff1a;设计通用的数据模型&#xff0c;例如通用的事实表和维度表&#xff0c;使得…

Elasticsearch:Jira 连接器教程第二部分 - 6 个优化技巧

作者&#xff1a;来自 Elastic Gustavo Llermaly 将 Jira 连接到 Elasticsearch 后&#xff0c;我们现在将回顾最佳实践以升级此部署。 在本系列的第一部分中&#xff0c;我们配置了 Jira 连接器并将对象索引到 Elasticsearch 中。在第二部分中&#xff0c;我们将回顾一些最佳实…

5 分钟复刻你的声音,一键实现 GPT-Sovits 模型部署

想象一下&#xff0c;只需简单几步操作&#xff0c;就能生成逼真的语音效果&#xff0c;无论是为客户服务还是为游戏角色配音&#xff0c;都能轻松实现。GPT-Sovits 模型&#xff0c;其高效的语音生成能力为实现自然、流畅的语音交互提供了强有力的技术支持。本文将详细介绍如何…

解压必须用tar -zxvf?

答案是必须的哈 tar -zxvf 是一个常用于 Linux/Unix 系统的命令&#xff0c;用来解压 .tar.gz 或 .tgz 格式的文件。命令中的 tar 是一个归档工具&#xff0c;用于创建和处理压缩文件。当你使用 -zxvf 选项时&#xff0c;每个字母都有不同的含义。-z 告诉 tar 使用 gzip 来解压…

nginx 的基础语法学习,零基础学习

学习 Nginx 的主要语法和配置选项对于有效地管理和优化 Web 服务器非常重要。以下是一些关键的 Nginx 语法和概念&#xff0c;涵盖了基本配置、反向代理、负载均衡、缓存等方面。 基本语法 配置文件结构 Nginx 配置文件通常位于 /etc/nginx/nginx.conf 或 /usr/local/nginx/co…

WebSocket实现分布式的不同方案对比

引言 随着实时通信需求的日益增长&#xff0c;WebSocket作为一种基于TCP的全双工通信协议&#xff0c;在实时聊天、在线游戏、数据推送等场景中得到了广泛应用。然而&#xff0c;在分布式环境下&#xff0c;如何实现WebSocket的连接管理和消息推送成为了一个挑战。本文将对比几…

【CSS】---- CSS 实现超过固定高度后出现展开折叠按钮

1. 实现效果 2. 实现方法 使用 JS 获取盒子的高度&#xff0c;来添加对应的按钮和样式&#xff1b;使用 CSS 的浮动效果&#xff0c;参考CSS 实现超过固定高度后出现展开折叠按钮&#xff1b;使用容器查询 – container 语法&#xff1b;使用 clamp 函数进行样式判断。 3. 优…

【matlab】matlab知识点及HTTP、TCP通信

1、矩阵运算 点乘&#xff1a;对于两个同维度的向量&#xff0c;点乘结果是这两个向量对应分量的乘积之和。 点除&#xff1a;是指对两个数组的对应元素进行除法运算。 点幂&#xff1a;表示元素对元素的幂运算。 >> A[1,2,3;4,5,6]; B[1,1,1;2,2,2]>> D1B.*AD…

【git】如何删除本地分支和远程分支?

1.如何在 Git 中删除本地分支 本地分支是您本地机器上的分支&#xff0c;不会影响任何远程分支。 &#xff08;1&#xff09;在 Git 中删除本地分支 git branch -d local_branch_name git branch 是在本地删除分支的命令。-d是一个标志&#xff0c;是命令的一个选项&#x…

如何使用PHP构建IoC容器,实现依赖注入!

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons&#xff1a;JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram&#xff0c;自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 &#xff1f; 5 IDEA必装的插件&…

18. C语言 结构体内存布局分析与优化

本章目录: 结构体的内存布局1. 对齐规则2. 填充与对齐 示例分析代码示例输出结果分析1. debug_size1_t 结构体2. debug_size2_t 结构体 如何优化结构体内存布局1. 成员排序优化2. 使用 #pragma pack 指令注意事项 总结 在C语言中&#xff0c;结构体&#xff08;struct&#xff…

基于微信小程序的摄影竞赛系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

人工智能-机器学习之多分类分析(项目实战二-鸢尾花的多分类分析)

Softmax回归听名字&#xff0c;依然好像是做回归任务的算法&#xff0c;但其实它是去做多分类任务的算法。 篮球比赛胜负是二分类&#xff0c;足球比赛胜平负就是多分类 识别手写数字0和1是二分类&#xff0c;识别手写数字0-9就是多分类 Softmax回归算法是一种用于多分类问题…

Azure 100 学生订阅下,使用 Docker 在 Ubuntu VPS 上部署 Misskey 的详细教程

什么是 Docker 和 Misskey&#xff1f; Docker 是一个开源的应用容器引擎&#xff0c;它可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;包括物理机、虚拟机、云服务等。使用 Docker&#xff0c…

DeepSeek-v3在训练和推理方面的优化

1. 基础架构&#xff1a;MLA&#xff0c;大幅减少了KV cache大小。&#xff08;计算量能不能减少&#xff1f;&#xff09; 2. 基础架构&#xff1a;MoE&#xff0c;同等参数量&#xff08;模型的”能力“&#xff09;下&#xff0c;训练、推理的计算量大幅减少。 3. MoE的load…

python-44-嵌入式数据库SQLite和DuckDB

文章目录 1 SQLite1.1 世界上最流行的数据库1.1 SQLite简介1.2 插入语句1.3 查询数据1.4 更新数据1.5 删除数据2 DuckDB2.1 DuckDB简介2.2 DuckDB与Python结合使用2.2.1 创建表2.2.2 分析语句2.2.3 导出为parquet文件2.3 Windows中使用DuckDB3 参考附录1 SQLite Python的一个特…

MySQL8数据库全攻略:版本特性、下载、安装、卸载与管理工具详解

大家好&#xff0c;我是袁庭新。 MySQL作为企业项目中的主流数据库&#xff0c;其5.x和8.x版本尤为常用。本文将详细介绍MySQL 8.x的特性、下载、安装、服务管理、卸载及管理工具&#xff0c;旨在帮助用户更好地掌握和使用MySQL数据库。 1.MySQL版本及下载 企业项目中使用的…

C 语言运算符的优先级和结合性

运算符的结合性和优先级 优先级运算符描述结合性1()[]->.函数调用、数组下标、结构体 / 联合体成员通过指针访问、结构体 / 联合体成员访问从左到右2!~ (前缀)-- (前缀) (一元)- (一元)* (间接寻址)& (取地址)sizeof(type)逻辑非、按位取反、前缀自增、前缀自减、一元正…

centos 7 Mysql服务

将此服务器配置为 MySQL 服务器&#xff0c;创建数据库为 hubeidatabase&#xff0c;将登录的root密码设置为Qwer1234。在库中创建表为 mytable&#xff0c;在表中创建 2 个用户&#xff0c;分别为&#xff08;xiaoming&#xff0c;2010-4-1&#xff0c;女&#xff0c;male&…