
网络流媒体播放器
简介
在立创学习了很多,制作了一个网络流媒体播放器,使用ESP32-WROOM,实现了SD卡MP3播放,网络电台播放,navidrome服务器连接播放,音乐闹钟,OTA升级等功能,代码使用人工和AI混合编写
简介:在立创学习了很多,制作了一个网络流媒体播放器,使用ESP32-WROOM,实现了SD卡MP3播放,网络电台播放,navidrome服务器连接播放,音乐闹钟,OTA升级等功能,代码使用人工和AI混合编写开源协议
:MIT License
(未经作者授权,禁止转载)描述
# ESP32-MAX98357 网络收音机使用说明书
-----------------------------------------------------------------------
OTA服务器和navidrome服务器录入方式:
configh,h 96-97行
navidrome.h 41行

## 一、项目概述
这是一个ESP32网络收音机和SD卡MP3播放器项目,采用模块化设计,主要特性包括:
**核心功能:**
- ✅ 网络电台流媒体播放(支持MP3/AAC格式)
- ✅ SD卡本地MP3文件播放
- ✅ 128x64 OLED显示屏(中文支持)
- ✅ 旋转编码器控制
- ✅ WiFi配置Portal
- ✅ OTA固件升级
- ✅ 电池电量监测
- ✅ PONG游戏
- ✅ NTP网络时钟同步



**硬件配置:**
- 主控:ESP32-WROOM-32
- 功放:MAX98357A I2S D类放大器
- 显示:SSD1306 128x64 OLED
- 存储:TF卡(SPI接口)
- 输入:EC11旋转编码器
## 二、硬件连接说明
### 2.1 引脚定义
| ESP32引脚 | 连接模块 | 说明 |
|-----------|----------|------|
| GPIO5 | SD_CS | SD卡片选 |
| GPIO18 | SPI_SCK | SD卡时钟 |
| GPIO19 | SPI_MISO | SD卡数据输入 |
| GPIO23 | SPI_MOSI | SD卡数据输出 |
| GPIO4 | OLED_SDA | OLED I2C数据 |
| GPIO14 | OLED_SCL | OLED I2C时钟 |
| GPIO25 | I2S_DOUT | I2S音频输出 |
| GPIO26 | I2S_LRC | I2S左右声道时钟 |
| GPIO27 | I2S_BCLK | I2S位时钟 |
| GPIO21 | I2S_SD_MODE | MAX98357A使能 |
| GPIO32 | ENCODER_CLK | 编码器时钟 |
| GPIO16 | ENCODER_DT | 编码器数据 |
| GPIO17 | ENCODER_SW | 编码器按钮 |
| GPIO36 | BAT_DAC | 电池检测 |
| GPIO33 | LED_BLUE | 状态LED |
### 2.2 硬件清单
- ESP32-WROOM-32E *1
- MAX98357A I2S x2
- SSD1306 128x64 OLED显示屏 x1
- SD卡模块(SPI接口)x1
- TF卡 x1
- EC11旋转编码器 x1
- 锂电池(3.7V)602535P 600mah x1
- 充电管理模块 x1
- 扬声器(4Ω 3W)x2
- 若干电阻电容和杜邦线
## 三、首次使用指南
### 3.1 烧录固件
#### 使用PlatformIO编译和上传
### 3.2 WiFi配置
首次上电后设备会自动进入配网模式:
1. **连接WiFi热点**
- 在手机或电脑WiFi列表中找到 `ESP32_Radio`
- 连接该热点(无密码)
2. **打开配置页面**
- 在浏览器中访问:`http://192.168.3.3`
- 会看到配置界面
3. **输入WiFi信息**
- 输入你的WiFi名称(SSID)
- 输入WiFi密码
- 点击"添加WiFi"按钮
- 可以添加最多5个WiFi账号
4. **保存并重启**
- 点击底部的"保存并重启"按钮
- 设备会自动重启并连接WiFi
### 3.3 测试播放
重启后设备会自动:
- 连接WiFi
- 播放默认电台(默认为第8个电台:Radio Paradise)
**基本操作:**
- 旋转编码器:调节音量(0-21级)
- 按下编码器按钮:进入主菜单
## 四、功能使用说明
### 4.1 主菜单操作
按下编码器按钮进入主菜单,包含以下功能:
1. **选择电台** - 选择网络电台播放
2. **SD卡播放器** - 播放SD卡MP3文件
3. **时钟显示** - 显示NTP网络时间
4. **PONG游戏** - 弹球游戏
5. **WiFi设置** - 重新配置WiFi
6. **恢复出厂设置** - 恢复默认电台列表
7. **内存分配** - 查看内存使用情况
**菜单操作:**
- 旋转编码器:上下移动选择项
- 按下按钮:确认选择
- 10秒无操作自动返回
### 4.2 网络电台播放
**选择电台:**
1. 在主菜单选择"1.选择电台"
2. 旋转选择电台
3. 按下确认播放
**电台管理:**
- 通过Web界面管理电台
- 访问设备IP地址
- 可以添加、编辑、删除电台
- 最多保存20个电台
**默认电台列表:**
1. 德意志广播电台 WDR Einslive
2. 经典欧美 181.FM - Awesome 80's
3. 法国广播电台
4. 俄罗斯 PADNO
5. 德国 Hit-Radio FFH
6. 马来西亚 RTM Radio
7. 新加坡 88.3jia
8. 天堂电台 Radio Paradise
9. 芝加哥 WZRD The Wizard 88.3 FM
10. 苏腊巴亚 smart FM88.9
11. AFN Daegu - Korea
12. Swiss Jazz (瑞士爵士乐)
### 4.3 SD卡播放器
**准备工作:**
1. 将TF卡格式化为FAT32
2. 将MP3文件复制到卡中(支持子目录)
3. 将TF卡插入SD卡模块
**使用SD卡播放器:**
1. 在主菜单选择"2.SD卡播放器"
2. 首次使用会自动扫描SD卡
3. 扫描完成后自动开始播放
**播放控制:**
- 进入SD播放器控制菜单
- 旋转选择控制选项
1. 下一首
2. 上一首
3. 播放/暂停
4. 播放模式
5. PONG游戏
6. 切换效果图
7. 退出
**播放模式:**
1. 单曲循环 - 当前曲目循环播放
2. 顺序播放 - 按列表顺序播放
3. 随机播放 - 随机选择曲目
**播放动画:**
- 12种播放动画可选
- 在"切换效果图"菜单中设置
- 动画效果包括:九宫格、圆环、五分割圆环、三角形切换、旋转圆弧、音频指示器、正弦频谱、爱心跳动、方块滚动、日月旋转、斜线下雨、气泡上升
**退出SD播放:**
- 选择"7.退出"选项
- 设备会自动释放资源并重启
### 4.4 时钟显示
1. 在主菜单选择"3.时钟显示"
2. 设备会自动从NTP服务器同步时间
3. 显示当前网络时间
4. 按下按钮返回主菜单
### 4.5 PONG游戏
1. 在主菜单选择"4.PONG游戏"
2. 游戏规则:
- 控制左侧挡板
- 击球到对方得一分
- 先得5分获胜
3. 操作:
- 旋转编码器控制挡板上下移动
- 按下按钮返回主菜单
### 4.6 WiFi设置
**重新配置WiFi:**
1. 在主菜单选择"5.WiFi设置"
2. 设备会进入配网模式
3. 按照首次使用配置WiFi的步骤操作
**WiFi多账号管理:**
- 最多保存5个WiFi账号
- 设备启动时自动选择信号最强的连接
- 可以通过Web界面添加或删除WiFi
### 4.7 恢复出厂设置
1. 在主菜单选择"6.恢复出厂设置"
2. 设备会恢复默认电台列表
3. 恢复默认设置
4. 自动重启
### 4.8 内存分配查看
1. 在主菜单选择"7.内存分配"
2. 显示当前内存使用情况
3. 信息包括:
- 总内存
- 空闲内存
- WiFi占用
- SSL占用
- 音频占用
### 4.9 OTA固件升级
**检查更新:**
1. 在主菜单→播放器选择→选择"OTA"选项
2. 设备会自动检查服务器版本
3. 如果有新版本,会提示升级
**执行升级:**
1. 选择"1.升级"开始升级
2. 升级过程中不要断电
3. 升级完成后自动重启
## 五、串口命令
通过串口终端可以输入以下命令:
### 5.1 可用命令
```
help - 显示帮助信息
refresh - 刷新SD卡数据库
refreshsd - 刷新SD卡数据库(同上)
dbinfo - 显示数据库信息
<URL> - 直接播放网络流(输入URL)
## 六、Web管理界面
### 6.1 访问Web界面
1. 确保设备已连接WiFi
2. 在串口输出中查看设备IP地址
3. 在浏览器中访问该IP地址
### 6.2 电台管理
**查看电台列表:**
- 页面显示所有已保存的电台
- 显示电台名称和URL
**添加电台:**
1. 在"添加新电台"区域输入电台名称
2. 输入电台URL
3. 点击"添加电台"按钮
**编辑电台:**
1. 直接在列表中修改电台名称和URL
2. 点击"保存"按钮
**删除电台:**
1. 点击电台右侧的"删除"按钮
2. 确认删除
### 6.3 WiFi管理
**查看WiFi列表:**
- 显示所有已保存的WiFi账号
- 显示SSID(不显示密码)
**添加WiFi:**
1. 在"新增 WiFi 名称"输入SSID
2. 在"密码"输入WiFi密码(无密码留空)
3. 点击"添加 WiFi"按钮
**删除WiFi:**
1. 点击WiFi右侧的"删除"按钮
2. 确认删除
## 七、常见问题解答
### 7.1 连接问题
**Q: WiFi连接失败?**
A:
- 检查WiFi密码是否正确
- 尝试重启设备
- 检查WiFi信号强度
- 尝试删除后重新添加WiFi账号
**Q: SD卡无法识别?**
A:
- 确保SD卡格式化为FAT32
- 使用Class 10或更高速的SD卡
- 检查SD卡是否损坏
- 重新插拔SD卡
**Q: 播放无声音?**
A:
- 检查I2S接线是否正确
- 确保MAX98357A供电正常(3.3V-5V)
- 检查扬声器连接
- 确认音量已调节
### 7.2 播放问题
**Q: 电台播放卡顿?**
A:
- 检查网络连接质量
- 尝试更换其他电台
- 检查WiFi信号强度
- 重启设备
**Q: SD播放失败?**
A:
- 确认MP3文件格式正确
- 检查文件是否损坏
- 确认SD卡容量未满
- 重新扫描SD卡
**Q: 频繁自动重启?**
A:
- 可能是内存不足
- 减少SD卡MP3数量
- 优化播放列表
- 检查是否超过最大曲目数(500首)
### 7.3 内存问题
**Q: 如何查看内存使用?**
A:
- 进入主菜单→内存分配
- 查看详细的内存信息
- 监控内存变化
**Q: 内存不足怎么办?**
A:
- 减少SD卡MP3数量
- 优化电台列表
- 避免频繁切换电台
- 重启设备释放内存
### 7.4 其他问题
**Q: 电池电量显示不准?**
A:
- 电池检测基于ADC值,需要校准
- 根据实际电池特性调整参数
- 查看电池.h文件中的ADC阈值
**Q: 如何更新固件?**
A:
- 通过OTA升级(见4.9节)
- 或通过USB重新烧录固件
**Q: 串口波特率是多少?**
A: 115200
## 八、技术规格
### 8.1 硬件参数
| 参数 | 数值 |
|------|------|
| 工作电压 | 3.3V / 5V (USB供电) |
| 锂电池电压 | 3.7V |
| 音频输出 | 3W @ 4Ω |
| 显示屏 | 128x64 OLED |
| 存储卡支持 | 最大32GB FAT32 |
| 音频格式 | MP3, AAC, FLAC, WAV |
| 串口波特率 | 115200 |
| WiFi频段 | 2.4GHz |
## 九、开发说明
### 9.1 项目结构src/
├── main.cpp # 主程序入口、全局变量定义
├── config.h # 硬件配置和常量定义
├── globals.h # 全局变量声明
├── display.h # OLED显示驱动、菜单、滚动
├── oled_task.h # OLED显示任务
├── wifi_config.h # WiFi连接、配网portal、Web服务器
├── stations.h # 网络电台管理、预设电台列表
├── sd_player.h # SD卡MP3播放、文件扫描
├── encoder.h # 旋转编码器驱动、按钮事件
├── audio_manager.h # 音频管理、内存清理
├── menu.h # 菜单处理、状态管理
├── battery.h # 电池检测
├── ota.h # OTA升级功能
├── boot_animation.h # 开机动画
├── icons.h # 图标定义
└── 使用说明书.md # 本文件
## 十一、许可协议
MIT License
设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程工程成员
知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。


评论