通过ESP32和INMP441麦克风模块实现音频数据传递
在现代物联网(IoT)项目中,音频数据的采集与传输成为了一个热门的应用领域。通过结合ESP32开发板和INMP441麦克风模块,我们可以实现一个低成本、高效率的音频数据传输系统。本文将详细介绍如何使用这两种硬件组件来构建和测试音频传输系统。
一、所需硬件
- ESP32开发板:ESP32是一款功能强大的微控制器,内置Wi-Fi和蓝牙功能,非常适合物联网应用。
- INMP441麦克风模块:INMP441是一款高性能的驻极体麦克风模块,具有灵敏度高、噪声低的特点,非常适合音频采集。
- 连接线:用于连接ESP32和INMP441模块。
- 电脑:用于接收和播放传输过来的音频数据。
二、硬件连接
硬件连接是构建音频传输系统的关键步骤。以下是连接方式的详细说明:
- INMP441 VCC → ESP32的3.3V
- INMP441 GND → ESP32的GND
- INMP441 SCK → ESP32的GPIO 17
- INMP441 WS → ESP32的GPIO 18
- INMP441 SD → ESP32的GPIO 16
请确保连接正确,以避免因接线错误导致的硬件损坏或传输问题。
三、软件设置与编程
为了实现音频数据的采集与传输,我们需要在ESP32上编写代码,并在电脑上设置接收端。
ESP32端代码
ESP32端代码主要使用Arduino IDE进行编写,并借助I2S(Inter-IC Sound)接口来实现音频数据的采集。以下是一个简单的代码示例:
cpp
#include <Arduino.h> | |
#include <WiFi.h> | |
#include <driver/i2s.h> | |
#include <WiFiUdp.h> | |
#define I2S_WS 18 | |
#define I2S_SD 16 | |
#define I2S_SCK 17 | |
#define I2S_PORT I2S_NUM_0 | |
#define bufferLen 1024 | |
const char* ssid = "你的wifi名称"; | |
const char* password = "你的wifi密码"; | |
const char* host = "接收音频端的IP地址"; // 电脑的IP地址 | |
const int port = 8888; // 监听的端口 | |
WiFiUDP udp; | |
int16_t sBuffer[bufferLen]; | |
void setup() { | |
Serial.begin(115200); | |
Serial.println("Setup I2S ..."); | |
setup_wifi(); | |
delay(1000); | |
i2s_install(); | |
i2s_setpin(); | |
i2s_start(I2S_PORT); | |
delay(500); | |
} | |
void loop() { | |
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) { | |
udp.beginPacket(host, port); | |
udp.write((uint8_t*)sBuffer, bytesIn); | |
udp.endPacket(); | |
} | |
} | |
// 其他函数定义,如setup_wifi(), i2s_install(), i2s_setpin()等,在此省略以保持简洁。 |
电脑端代码
电脑端代码使用Python编写,并借助socket库和pyaudio库来实现UDP接收和音频播放。以下是一个简单的代码示例:
python
import socket | |
import pyaudio | |
CHUNK = 1024 # 每个数据包的大小 | |
FORMAT = pyaudio.paInt16 # 数据格式为16位整型 | |
CHANNELS = 1 # 单声道 | |
RATE = 16000 # 采样率16kHz | |
p = pyaudio.PyAudio() | |
stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, output=True) | |
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) | |
server_socket.bind(('0.0.0.0', 8888)) | |
print("等待音频数据流...") | |
try: | |
while True: | |
data, addr = server_socket.recvfrom(CHUNK * 2) # 接收数据包(每个int16占用2个字节) | |
if not data: | |
break | |
stream.write(data) | |
except KeyboardInterrupt: | |
pass | |
finally: | |
stream.stop_stream() | |
stream.close() | |
p.terminate() | |
server_socket.close() |
四、测试与调试
在硬件连接和软件设置完成后,我们可以开始测试音频传输系统。请确保ESP32和电脑连接在同一个Wi-Fi网络下,以便成功传输数据。
- 将ESP32开发板通过USB线连接到电脑,并上传代码到ESP32。
- 在电脑上运行Python接收端代码。
- 对着INMP441麦克风说话,观察电脑端是否能够实时接收到并播放音频数据。
如果在测试过程中遇到问题,可以检查以下几个方面:
- 硬件连接是否正确。
- ESP32和电脑的Wi-Fi连接是否稳定。
- 代码中的Wi-Fi名称、密码、IP地址和端口号是否正确。
- 麦克风模块是否工作正常(可以通过测试其他音频输入设备来验证)。
五、总结
通过结合ESP32开发板和INMP441麦克风模块,我们可以实现一个简单而高效的音频数据传输系统。该系统不仅适用于物联网项目中的音频采集与传输需求,还可以作为学习嵌入式系统和网络通信知识的一个有趣实践。希望本文能够帮助你更好地理解和实现这一应用。
相关文章:
通过ESP32和INMP441麦克风模块实现音频数据传递
在现代物联网(IoT)项目中,音频数据的采集与传输成为了一个热门的应用领域。通过结合ESP32开发板和INMP441麦克风模块,我们可以实现一个低成本、高效率的音频数据传输系统。本文将详细介绍如何使用这两种硬件组件来构建和测试音频传…...
Vue中nextTick实现原理
源码实现思路(面试高分回答) 面试官问我 Vue 的 nextTick 原理是怎么实现的,我这样回答: 在调用 this.$nextTick(cb) 之前: 存在一个 callbacks 数组,用于存放所有的 cb 回调函数。存在一个 flushCallbac…...
数据仓库基础常见面试题
1.数据仓库是什么 数据仓库(Data Warehouse)是一个面向主题的、集成的、非易失的、随时间变化的数据集合,用于支持企业的管理决策。它不同于传统的操作型数据库,后者主要用于处理日常业务交易和实时查询,而数据仓库…...
Java设计模式——单例模式(特性、各种实现、懒汉式、饿汉式、内部类实现、枚举方式、双重校验+锁)
文章目录 单例模式1️⃣特性💪单例模式的类型与实现:类型懒汉式实现(线程不安全)懒汉式实现(线程安全)双重锁校验懒汉式(线程安全)饿汉式实现(线程安全)使用类的内部类实现⭐枚举方式实现单例(推荐)👍 单例…...
数字普惠金融对新质生产力的影响研究(2015-2023年)
基于2015—2023年中国制造业上市公司数据,探讨了数字普惠金融对制造业企业新质生产力的影响及作用机理。研究发现,数字普惠金融有助于促进制造业企业新质生产力的发展,尤其是在数字普惠金融的使用深度较大的情况下,其对新质生产力…...
国产编辑器EverEdit - 扩展脚本:新建同类型文件(避免编程学习者反复新建保存练习文件)
1 扩展脚本:在当前文件目录下新建同类型文件 1.1 应用场景 用户在进行编程语言学习时,比如:Python,经常做完一个小练习后,又需要新建一个文件,在新建文件的时候,不但要选择文件类型,…...
jupyter notebook练手项目:线性回归——学习时间与成绩的关系
线性回归——学习时间与学习成绩的关系 第1步:导入工具库 pandas——数据分析库,提供了数据结构(如DataFrame和Series)和数据操作方法,方便对数据集进行读取、清洗、转换等操作。 matplotlib——绘图库,p…...
dockerfile2.0
dockerfile实现lnmp nginx centos7 mysql centos7 php centos7 自定义镜像来实现整个架构 cd /opt mkdir nginx mysql php cd nginx 拖入nginx和wordpress vim Dockerfile vim nginx.conf ↓ worker_processes 1; events {worker_connections 1024; } http {include …...
【spring mvc】文件上传、下载
文件上传,存储至本地目录中 一、代码1、工具类(敏感后缀过滤)2、文件上传,存储至本地3、文件下载 二、效果演示1、上传1.1、postMan 请求1.2、上传效果 2、下载2.1、下载效果 一、代码 1、工具类(敏感后缀过滤&#x…...
FPGA工程师成长四阶段
朋友,你有入行三年、五年、十年的职业规划吗?你知道你所做的岗位未来该如何成长吗? FPGA行业的发展近几年是蓬勃发展,有越来越多的人才想要或已经踏进了FPGA行业的大门。很多同学在入行FPGA之前,都会抱着满腹对职业发…...
java fastjson2 解析JSON用法解析
Fastjson2 是 Fastjson 的升级版本,提供了更好的性能和扩展性,同时也在 API 和功能上做了很多改进。使用 Fastjson2 解析 JSON 数据非常简单,支持多种方式来解析 JSON 字符串、嵌套 JSON 对象和数组、以及转换成 Java 对象。下面详细介绍 Fas…...
计算机视觉算法实战——步态识别(主页有源码)
✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ 1. 步态识别简介✨✨ 步态识别(Gait Recognition)是计算机视觉领域中的一个…...
LabVIEW水位监控系统
LabVIEW开发智能水位监控系统通过集成先进的传感技术与控制算法,为工业液体存储提供精确的水位调控,保证了生产过程的连续性与安全性。 项目背景 在化工和饮料生产等行业中,水位控制的准确性对保证生产安全和提高产品质量至关重要。传统的水…...
网络层协议-----IP协议
目录 1.认识IP地址 2.IP地址的分类 3.子网划分 4.公网IP和私网IP 5.IP协议 6.如何解决IP地址不够用 1.认识IP地址 IP 地址(Internet Protocol Address)是指互联网协议地址。 它是分配给连接到互联网的设备(如计算机、服务器、智能手机…...
计算机网络八股文学习笔记
总结来自于javaguide,本文章仅供个人学习复习 javaguide计算机网络八股 文章目录 计算机网络基础网络分层模型OSI七层模型TCP/IP四层模型 HTTP从输入URL到页面展示到底发生了什么?(非常重要)HTTP状态码HTTP Header中常见的字段有哪些?HTTP和HTTPS有什么区别?(重要)HTTP/1.0和…...
IntelliJ IDEA中Maven项目的配置、创建与导入全攻略
大家好,我是袁庭新。 IntelliJ IDEA是当前最流行的Java IDE(集成开发环境)之一,也是业界公认最好用的Java开发工具之一。IntelliJ IDEA支持Maven的全部功能,通过它我们可以很轻松地实现创建Maven项目、导入Maven项目、…...
如何在Jupyter中快速切换Anaconda里不同的虚拟环境
目录 介绍 操作步骤 1. 选择环境,安装内核 2. 注册内核 3. 完工。 视频教程 介绍 很多网友在使用Jupyter的时候会遇到各种各样的问题,其中一个比较麻烦的问题就是我在Anaconda有多个Python的环境里面,如何让jupyter快速切换不同的Pyt…...
stack和queue专题
文章目录 stack最小栈题目解析代码 栈的压入弹出序列题目解析代码 queue二叉树的层序遍历题目解析代码 stack stack和queue都是空间适配器 最小栈 最小栈的题目链接 题目解析 minst是空就进栈,或者是val < minst.top()就进栈 代码 class MinStack { public:M…...
【Vue】点击侧边导航栏,右侧main对应显示
需求:点击侧边导航栏,右侧main对应显示 通过v-if或v-show等指令来控制不同内容的显示隐藏来实现 注意: 使用v-if时候进行导航栏切换,右侧显示区域可能会出现样式错乱;使用v-show则不会出现此错误 <template>&…...
【Debug】django.db.utils.OperationalError: (1040, ‘Too many connections‘)
报错: django.db.utils.OperationalError: (1040, ‘Too many connections‘) 排查 可能是Mysql的连接数量超过了允许的最大连接数量; 查看Mysql允许最大连接数量: -- 查看允许连接的最大数量 SHOW VARIABLES LIKE %max_connections%;-- 查…...
零基础封神!10行代码写渗透专用爬虫,一键扫遍靶场敏感资产
零基础封神!10行代码写渗透专用爬虫,一键扫遍靶场敏感资产 上一篇我们一起打破了认知壁垒,焊死了合规红线,用3行代码跑通了第一个渗透型爬虫。 很多粉丝后台私信我说,第一次跑通代码,看到命令行里打印出靶场…...
第 2 章 控制流 知识点精讲
2.1 布尔值核心知识点布尔值是表示真假的两种状态,是控制流的基础。True:表示真、成立、肯定。False:表示假、不成立、否定。关键特性布尔值是 Python 的基本数据类型之一,类型为 bool。它们是关键字,必须大写。在数值…...
阿里通义实验室FunAudioLLM实战:如何用SenseVoice快速搭建多语言语音识别系统(附代码)
基于SenseVoice构建多语言语音识别系统的工程实践指南 语音识别技术正在重塑人机交互的边界,而阿里通义实验室开源的FunAudioLLM项目中的SenseVoice模型,为开发者提供了一把打开多语言语音世界的钥匙。不同于传统ASR系统需要针对不同语言单独训练模型的繁…...
效率倍增:用快马AI生成服务器批量管理工具,告别重复劳动
最近在团队里负责服务器运维工作,经常需要同时管理几十台服务器。每次登录、执行重复命令、检查状态都要耗费大量时间,直到发现了用InsCode(快马)平台快速搭建批量管理工具的方法,效率直接翻倍。今天就把这个自动化管理方案分享给大家。 痛点…...
STM32CubeMX + EG2131预驱芯片:搞定无刷电机六步换向的硬件配置避坑指南
STM32CubeMX与EG2131预驱芯片的无刷电机六步换向实战解析 引言 在嵌入式电机控制领域,无刷直流电机(BLDC)因其高效率、长寿命和低维护成本等优势,正逐步取代传统有刷电机。然而,当工程师们从理论转向实践时,…...
深入Linuxptp:ptp4l与E2E模式下的状态机与报文处理流程剖析
1. Linuxptp与ptp4l基础认知 第一次接触PTP协议时,我被那些专业术语搞得晕头转向。直到在实验室里用示波器抓到实际报文,才真正理解这个时间同步协议的精妙之处。Linuxptp作为开源实现,其中的ptp4l守护进程就像个尽职的交通警察,协…...
像素剧本圣殿保姆级教程:从零配置到输出标准格式剧本的5步详解
像素剧本圣殿保姆级教程:从零配置到输出标准格式剧本的5步详解 1. 认识像素剧本圣殿 像素剧本圣殿是一款专为剧本创作者设计的AI辅助工具,它基于强大的Qwen2.5-14B-Instruct模型进行深度优化,特别适合需要快速生成专业格式剧本的创作者。与…...
AutoGLM沉思版 vs OpenAI DeepResearch:免费国产AI Agent能否替代200美元/月的服务?
AutoGLM沉思版与OpenAI DeepResearch深度对比:企业级AI研究工具如何选择? 当企业研发团队需要处理海量文献综述时,当投资机构需要快速生成行业分析报告时,技术决策者往往面临一个关键选择:是选择国际知名但价格高昂的O…...
不止于上传预览:在若依框架中构建一个轻量级企业文档管理模块
若依框架下的企业级文档中心设计与实战 在数字化转型浪潮中,企业文档管理正从简单的文件存储向智能化协作平台演进。基于若依微服务框架构建文档中心模块,不仅能满足基础的PDF上传预览需求,更能为企业提供版本控制、权限管理、全文检索等进阶…...
探索汽车LAR LQG半主动/主动悬架:基于Simulink的奇妙之旅
汽车lar lqg 半主动/主动悬架 simulink在汽车工程领域,悬架系统犹如车辆的“脚”,直接影响着行驶的平顺性和安全性。今天咱们就来唠唠汽车的LAR LQG半主动/主动悬架,顺便用Simulink来比划比划。 LAR LQG悬架原理简述 LAR(Linear …...
