前面我们学了蜂鸣器播放旋律,但那只是单音调。今天,我们要让ESP32真正“播放音乐”——从本地WAV文件到网络在线音乐,统统拿下!
无论是播放一段语音提示、一首完整的歌曲,还是做一个网络收音机,ESP32都能轻松胜任。
今天这节课,我们就从本地播放开始,再到网络播放,一步步让ESP32变身音乐播放器!
第一步:找到课程,看看成品效果
打开逗脑IDE,点击顶部 “文档”,在 “课程” → “ESP32 + MicroPython” 分类下,找到播放音乐。
打开课件,你会看到本节课的最终效果:ESP32连接音频模块后,先播放本地存储的WAV音频,再通过WiFi播放网络上的音乐,声音从耳机或小喇叭中清晰传出。
第二步:播放音频的原理
整体架构:
ESP32读取音频数据(本地/网络) → 通过I2S接口发送 → 音频DAC芯片 → 耳机/喇叭发出声音
两个关键概念:
1. I2S(Inter-IC Sound)
I2S是一种专门用于音频数据传输的通信协议。
三根核心信号线:
|
信号线 |
名称 |
作用 |
|---|---|---|
| BCLK |
位时钟 |
控制数据传输节奏 |
| LRC |
左右声道时钟 |
区分左右声道数据 |
| DIN |
数据输入 |
传输音频数据本身 |
2. WAV文件格式
WAV文件的前44个字节存储了文件头信息(采样率、声道数、位深等),从第44字节开始才是真正的音频数据。
第三步:动手接线
I2S音频模块通常有5个引脚,接线如下:
|
模块引脚 |
功能 |
连接ESP32 |
说明 |
|---|---|---|---|
| VCC |
电源正极 |
3.3V
或 5V |
按模块要求 |
| GND |
电源地 |
GND |
公共地 |
| DIN |
数据输入 |
GPIO13 |
接SD(串行数据) |
| BCLK |
位时钟 |
GPIO12 |
接SCK(串行时钟) |
| LRC |
左右声道时钟 |
GPIO14 |
接WS(字选择) |
第四步:I2S驱动——MicroPython内置支持!
MicroPython内置了I2S库,直接导入即可使用:
第一部分:播放本地WAV文件
第五步:准备音频文件
先下载
test.wav音频文件,上传到ESP32:📌 注意: WAV文件要放在ESP32的根目录下,与代码文件在同一级。
第六步:本地播放代码
本地播放代码逻辑:
|
步骤 |
操作 |
说明 |
|---|---|---|
|
1 |
f.seek(44) |
跳过WAV文件头 |
|
2 |
f.readinto(buffer) |
每次读取1024字节到缓冲区 |
|
3 |
audio_out.write() |
将数据写入I2S播放 |
|
4 |
循环直到文件结束 |
整首歌完整播放 |
第二部分:播放网络音乐
第七步:网络播放——边下边播!
本地播放学会了,接下来升级到网络播放。只需要把数据来源从本地文件换成网络请求,其他逻辑完全相同!
网络播放的关键区别:
|
步骤 |
本地播放 |
网络播放 |
|---|---|---|
| 获取数据 | f.readinto(buffer) |
response.raw.read(1024) |
| 跳过文件头 | f.seek(44) |
response.raw.read(44) |
| 数据来源 |
本地存储 |
网络服务器 |
| 需要WiFi |
❌ 不需要 |
✅ 必须联网 |
第八步:保存运行,听效果!
本地播放运行流程:
-
上传test.wav到ESP32
-
保存并运行本地播放代码
-
终端打印“开始播放本地音频…”
-
耳机/喇叭传出音乐!
网络播放运行流程:
-
修改WiFi名称和密码
-
修改音频文件的网络URL
-
保存并运行网络播放代码
-
终端显示“连接成功…”和“开始播放网络音频…”
-
耳机/喇叭传出网络音乐! ### 两种播放方式对比总结
|
对比项 |
本地播放 |
网络播放 |
|---|---|---|
| 数据来源 |
本地WAV文件 |
HTTP网络请求 |
| 需要WiFi |
❌ 不需要 |
✅ 需要 |
| 音频存储 |
ESP32存储 |
网络服务器 |
| 歌曲数量 |
受存储限制 |
几乎无限 |
| 播放方式 |
读完即播 |
边下边播 |
| 适用场景 |
固定语音提示 |
在线音乐、网络电台 |
播放音乐能做什么?
|
应用场景 |
推荐方式 |
用途 |
|---|---|---|
| 语音提示器 |
本地 |
“欢迎光临”、“温度过高”等提示 |
| 门铃/警报器 |
本地 |
播放自定义门铃声 |
| 在线音乐播放器 |
网络 |
播放云端音乐库 |
| 网络收音机 |
网络 |
播放网络电台流媒体 |
| 智能语音播报 |
网络 |
从服务器获取语音并播放 |
| 远程音频推送 |
网络 |
手机/电脑推送音频到ESP32 |
全程回顾
|
步骤 |
操作 |
效果 |
|---|---|---|
| 找到课程 |
文档→课程→ESP32+MicroPython→播放音乐 |
了解I2S音频播放 |
| 认识原理 |
I2S协议 + WAV文件格式 |
理解音频播放原理 |
| 动手接线 |
VCC→3.3V, GND→GND, DIN→GPIO13, BCLK→GPIO12, LRC→GPIO14 |
硬件就位 |
| 本地播放 |
上传test.wav → 运行本地音频代码 |
播放本地音乐 |
| 网络播放 |
修改WiFi和URL → 运行网络音频代码 |
播放网络音乐 |
如果你对本节课感兴趣,去官网(www.dounao.cn)下载逗脑IDE,准备好相关配件,跟着课件走一遍。
有任何问题或建议,欢迎在评论区留言告诉我们。