基于I2S和esp-now协议制作esp32对讲机

news2024/11/26 10:43:04

基于I2S和esp-now协议制作esp32对讲机

1.概述

这篇文章介绍基于I2S和esp-now协议制作对讲机,他的实现需要在ESP32开发环境的2.0.10版本号下才能成功,高版本号的源码有改动会导致编译失败。
安装ESP32 2.0.10版本:
https://brucelong.blog.csdn.net/article/details/141426671

2.硬件介绍

2.1.材料准备

名称型号数量
esp32开发板ESP-WROOM-322
麦克风INMP4412
音频放大器MAX983572
喇叭3w2

2.2.测试麦克风

首先测试下我们的麦克风是否能接收到音频信号,下面是测试方法。

1.搭建麦克风电路
麦克风ESP32
SCKIO4
WSIO15
SDIO13
GNDGND
VCC3.3V
2.测试程序
//调用I2S驱动
#include <driver/i2s.h>

//定义INMP441管脚
#define I2S_WS 15
#define I2S_SD 13
#define I2S_SCK 4
// I2S端口号
#define I2S_PORT I2S_NUM_0

//I2S读取到数据的缓存区
#define bufferLen 64
int16_t sBuffer[bufferLen];

void i2s_install() {
  // 按照以下配置来启动I2S端口
  const i2s_config_t i2s_config = {
    .mode = i2s_mode_t(I2S_MODE_MASTER | I2S_MODE_RX),
    .sample_rate = 44100,
    .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_I2S | I2S_COMM_FORMAT_I2S_MSB),
    .intr_alloc_flags = 0,
    .dma_buf_count = 8,
    .dma_buf_len = bufferLen,
   // .use_apll = false
  };

  i2s_driver_install(I2S_PORT, &i2s_config, 0, NULL);
}

void i2s_setpin() {
  // 设置I2S
  const i2s_pin_config_t pin_config = {
    .bck_io_num = I2S_SCK,
    .ws_io_num = I2S_WS,
    .data_out_num = -1,
    .data_in_num = I2S_SD
  };

  i2s_set_pin(I2S_PORT, &pin_config);
}

void setup() {

  // 打开串口
  Serial.begin(115200);
  Serial.println(" ");

  delay(1000);

  // 启动I2S端口
  i2s_install();
  i2s_setpin();
  i2s_start(I2S_PORT);


  delay(500);
}

void loop() {

  //持续打印两条参考线
  int rangelimit = 3000;
  Serial.print(rangelimit * -1);
  Serial.print(" ");
  Serial.print(rangelimit);
  Serial.print(" ");

  // 获取I2S读取的数据
  size_t bytesIn = 0;
  esp_err_t result = i2s_read(I2S_PORT, &sBuffer, bufferLen, &bytesIn, portMAX_DELAY);

  if (result == ESP_OK)
  {
    // 读取缓存区
    int16_t muestras = bytesIn / 8;
    if (muestras > 0) {
      float promedio = 0;
      for (int16_t i = 0; i < muestras; ++i) {
        promedio += (sBuffer[i]);
      }
      promedio /= muestras;
      // 串口打印出获取到的数据曲线
      Serial.println(promedio);
    }
  }
}

3.测试麦克风

上传程序后在ArduinoIDE上打开窗口绘图仪,然后放出一些声音让麦克风采集,在监视器上能看到音频信号的跳动说明麦克风采集到了信号。
在这里插入图片描述

在这里插入图片描述

2.3.搭建对讲机电路

1.搭建麦克风电路
麦克风ESP32
SCKIO4
WSIO15
SDIO13
GNDGND
VCC3.3V
2.搭建音频放大器电路
MAX98357ESP32
LRC22
BCLK26
DIN25
GNDGND
VINVIN

3.程序介绍

通过百度网盘分享的文件:esp32对讲机I2S_ESP-NOW协议
链接:https://pan.baidu.com/s/1Jvx-XWG0ejYKe6ORIhqrCQ?pwd=21zz
提取码:21zz

3.1.对讲机项目介绍

打开下载后的文件能够看到如下6个文件,他们作用如下

  • esp32-audio-communication:项目主程序
  • Audioi2s:封装I2S协议的对讲机函数,主要包含麦克风和音频放大器引脚的定义
  • transport:封装esp-now协议的功能函数,主要用来传输音频信息。
    在这里插入图片描述

在ArduinoIDE中打开 esp32-audio-communication主程序,然后上传到两个ESP-32开发板

3.2.对讲机使用

将两个ESP32通电,然后按下其中一个开发板的BOOT按键开始说话,在另一个ESP32开发板上就能听到声音。

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

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

相关文章

2 nestjs 设计模式

回顾 MVC MVC&#xff08;Model-View-Controller&#xff09;设计模式是一种常用于软件开发的架构模式&#xff0c;旨在分离应用程序的不同部分&#xff0c;使得它们可以独立地开发、测试和维护。它将应用程序分为三个主要组件&#xff1a; Model&#xff08;模型&#xff09;…

什么牌子的开放式耳机性价比高?五款高口碑精品推荐!

由于传统入耳式耳机可能对耳道健康造成长期影响&#xff0c;许多人开始偏好选择开放式耳机的非侵入式设计。这种耳机有助于减少耳内湿润、细菌增长&#xff0c;以及耳道闷热的不适感。为了帮助大家在众多产品中挑选合适的开放式耳机&#xff0c;我将列举一些市场反馈良好的款式…

C#中的WebClient与XPath:实现精准高效的Screen Scraping

在现代互联网中&#xff0c;Screen Scraping&#xff08;屏幕抓取&#xff09;已成为从网页中提取信息的重要技术。对于C#开发者来说&#xff0c;WebClient和XPath是实现高效抓取的重要工具。本文将概述如何使用C#中的WebClient类结合XPath技术&#xff0c;实现精准高效的Scree…

探索科技潮流新领地厦门凯酷全科技有限公司抖音小店

在这个日新月异的数字时代&#xff0c;科技不仅深刻改变了我们的生活方式&#xff0c;更成为连接消费者与未来生活的桥梁。今天&#xff0c;就让我们一起走进厦门凯酷全科技有限公司的抖音小店&#xff0c;感受一场科技与时尚的完美碰撞&#xff0c;体验未来生活触手可及的魅力…

Python 和 PyCharm 安装(傻瓜式)

为什么要安装Python&#xff1f; 当我们写 python 代码的时候&#xff0c;需要有环境的支持&#xff0c;才可以运行代码。而 python 的安装支持了两个主要部分&#xff0c;分别是解释器和标准库。当我们安装完成&#xff0c;就可以使用python里面的标准库来写代码&#xff0c;而…

Linux 内核源码分析---netfilter 框架

iptables是用户用来管理和配置防火墙规则的一种策略&#xff0c;但是实际解析规则并按照规则实施产生作用的是Netfilter。 iptables 与协议栈内有包过滤功能的 hook 交互来完成工作&#xff0c;这些内核 hook 构成了 netfilter 框架。每个进入网络系统的包&#xff08;接收和发…

Java Web —— 第七天(Mybatis案例 员工管理2)

新增员工 EmpController类 PostMappingpublic Result save(RequestBody Emp emp){log.info("新增员工操作,emp:{}",emp);empService.save(emp);return Result.success();} EmpServiceImpl实现类 //新增员工Overridepublic void save(Emp emp) {//补充基础属性 创…

jmeter中添加ip欺骗

1、首先在本机电脑中通过配置文件创建添加ip的配置文件&#xff0c;先创建一个txt格式的&#xff0c;直接修改文件名以及后缀为ips.bat 2、编辑该ips.bat文件&#xff0c;在文件中输入如下内容&#xff0c;用于快速给本机添加ip地址&#xff0c;&#xff08;2&#xff0c;1&…

今年奥运会的场馆设计,竟然藏着这样的黑科技!

随着奥运会的盛大开幕&#xff0c;全球观众不仅关注运动员的精彩表现&#xff0c;也被奥运场馆的壮丽设计所吸引。这些场馆不仅外观炫酷&#xff0c;功能齐全&#xff0c;更重要的是背后应用了一系列先进的技术和材料&#xff0c;其中最为亮眼的就是巴黎奥运会永久性体育场馆之…

“救命快刊”:升到2区,IF3.1,水平低也无俱,专家意见中肯不难为人

1、期刊简介&#xff1a; International Journal of Green Energy • 出版社&#xff1a;Taylor and Francis • 影响因子&#xff1a;3.1 • 期刊分区&#xff1a;JCR2/3区&#xff0c;中科院4区 • 检索数据库&#xff1a;SCI&EI 2、研究领域&#xff1a; 分享了能源…

开源好用的堡垒机工具Jumpserver

Jumpserver是一个由杭州飞致云信息科技有限公司&#xff08;FIT2CLOUD飞致云&#xff09;开发的开源堡垒机系统&#xff0c;旨在帮助企业构建和强化运维安全审计能力。 以下是关于Jumpserver的详细介绍&#xff1a; 一、基本概述 定义&#xff1a;Jumpserver是一个开源的堡垒…

CTFshow之RCE代码命令远程执行第53关到第64关详细讲解。可私信!

手眼通天和大人。 --真锅和 引言&#xff1a;今天继续ctf之旅&#xff01;&#xff01;解决53关到64关 ps&#xff1a;今天是8.22&#xff0c;重新回归开始填坑&#xff0c;先发个废品 一、实验准备 1、ctf网址&#xff1a;ctf.show 2、工具&#xff1a;fi…

cmd发送邮件:如何通过命令提示符发邮件?

cmd发送邮件的安全性考量&#xff1f;如何设置cmd发送邮件&#xff1f; 通过命令提示符发送邮件则提供了一种便捷且高效的方法&#xff0c;特别是在自动化任务和脚本化工作流程中。AokSend将介绍如何通过命令提示符实现发送邮件&#xff0c;并讨论其应用场景和注意事项。 cmd…

上线一天销售额超15亿!《黑神话:悟空》火爆全网的技术秘诀!

昨日&#xff08;8月20日&#xff09;上午&#xff0c;国产游戏《黑神话&#xff1a;悟空》正式发售&#xff0c;在全球游戏市场掀起巨大狂潮&#xff01;上线第一天在Steam的PCCU&#xff08;同时在线用户数峰值&#xff09;排名已成为第三&#xff01; 此款游戏上线即回本。…

Stable Diffusion【应用篇】【艺术写真】:超高相似度人物换脸写真,IP-Adapter与InstantID完美结合

艺术写真&#xff0c;以其独特的魅力&#xff0c;吸引了无数艺术爱好者和摄影爱好者。如今&#xff0c;借助Stable Diffusion的IP-Adapter和InstantID技术&#xff0c;你只需一键操作&#xff0c;就能轻松实现超高相似度的人物换脸写真。本文将带你深入了解Stable Diffusion的I…

如何建立Pod

文章目录 一、Pod的生命周期建立pod1. 提交 Pod 定义2. API 服务器处理3. 调度4. 节点准备5. 容器初始化6. 启动应用容器7. 持续管理 Pod结束Pod的探针1. 存活探针&#xff08;Liveness Probe&#xff09;2. 就绪探针&#xff08;Readiness Probe&#xff09;3. 启动探针&#…

Transformer微调实战:通过低秩分解(LoRA)对T5模型进行微调(LoRA Fine Tune)

scient scient一个用python实现科学计算相关算法的包&#xff0c;包括自然语言、图像、神经网络、优化算法、机器学习、图计算等模块。 scient源码和编译安装包可以在Python package index获取。 The source code and binary installers for the latest released version ar…

思博伦仪表打流测试使用总结

下载安装包: 打开浏览器地址:http://192.168.6.244欢迎来到思博伦TestCenterhttp://192.168.6.244 点击下图中红框中的链接: 打开安装包,并按照提示按照即可。 1,仪表口使用 选择并占用测试仪端口在客户端软件的初始界面,点击红框中的链接:

智慧公厕系统在旅游景区的应用前景

在科技飞速发展的当今时代&#xff0c;智慧公厕系统正逐渐成为旅游景区提升服务品质的新亮点。它以先进的技术和创新的理念&#xff0c;为游客带来全新的如厕体验&#xff0c;同时也为景区的管理带来了诸多便利&#xff0c;展现出广阔的应用前景。 一、智慧公厕系统为游客带来的…

CompletableFuture.allOf().get()引起的线程池死锁

CompletableFuture<Void> voidCompletableFuture CompletableFuture.allOf(completableFutures);可以同步等待一组异步请求都返回结果后&#xff0c;再往下执行。voidCompletableFuture.get()会同步等待所有结果返回&#xff0c;并且不会超时。就因为没有设置超时时间&a…