e728cd107506e1c2a21a83774fcae4f796d48a7f
All checks were successful
Deploy WebSocket Server / deploy (push) Successful in 18s
ESP32-S3 音频可视化项目
这是一个基于 ESP32-S3 和 MicroPython 的音频可视化项目,使用 ST7789 方形屏幕和 I2S 音频接口,实现了音频播放、麦克风录音和实时音频可视化功能。
项目概述
本项目将原有的 C++ Otto 机器人代码移植到 MicroPython 平台,专注于音频处理和可视化功能。主要特性包括:
- 🎵 音频播放: 支持 I2S 接口的音频输出,内置马里奥主题曲
- 🎤 麦克风录音: 支持 I2S 接口的数字麦克风(ICS-43434)
- 📊 实时可视化: 在 240x240 ST7789 屏幕上显示音频电平柱状图
- 🎯 按键交互: 使用 Boot 按键控制录音和播放
- 🔧 模块化设计: 清晰的代码结构,易于扩展和维护
硬件要求
核心硬件
- ESP32-S3 开发板
- ST7789 240x240 方形屏幕
- MAX98357A I2S 音频放大器
- ICS-43434 I2S 数字麦克风
硬件连接
项目支持两种硬件配置版本:
非摄像头版本(默认)
屏幕连接:
- BL (背光): GPIO 3
- MOSI: GPIO 10
- SCK: GPIO 9
- DC: GPIO 46
- RST: GPIO 11
- CS: GPIO 12
音频输出 (MAX98357A):
- BCK: GPIO 15
- WS: GPIO 16
- SD: GPIO 7
麦克风输入 (ICS-43434):
- SCK: GPIO 5
- WS: GPIO 4
- SD: GPIO 6
摄像头版本
屏幕连接:
- BL: GPIO 38
- MOSI: GPIO 45
- SCK: GPIO 48
- DC: GPIO 47
- RST: GPIO 1
- CS: 无
音频 (Duplex I2S):
- BCK: GPIO 42
- WS: GPIO 40
- 输出 SD: GPIO 39
- 输入 SD: GPIO 41
软件架构
文件结构
main.py # 主程序,包含核心逻辑循环
config.py # 硬件配置管理
audio.py # 音频播放器和麦克风类
display.py # 屏幕显示管理
st7789py.py # ST7789 驱动
boot.py # 启动脚本
核心功能
1. 音频播放 (audio.py)
AudioPlayer类:管理 I2S 音频输出- 支持立体声输出(MAX98357A 自动混合 L+R)
- 内置马里奥主题曲播放功能
- 可播放指定频率和时长的音调
2. 麦克风录音 (audio.py)
Microphone类:管理 I2S 音频输入- 支持 32-bit 单声道录音(ICS-43434)
- 实时音频电平监测
- 按键触发的录音功能
3. 屏幕显示 (display.py)
Display类:管理 ST7789 屏幕- 音频电平实时柱状图显示
- 颜色分级(绿色→黄色→红色)
- 按键状态和心跳指示器
4. 配置管理 (config.py)
- 支持多硬件版本配置
- 引脚定义集中管理
- 音频参数可配置
使用说明
基本操作
- 启动: 系统上电后自动初始化屏幕、音频和麦克风
- 音频测试: 启动时会自动播放马里奥主题曲
- 实时监测: 屏幕显示实时音频电平柱状图
- 录音功能:
- 按住 Boot 按键开始录音
- 释放按键停止录音并自动播放
屏幕显示
- 左上角: 按键状态指示(红色=按下,蓝色=释放)
- 右上角: 心跳指示器(每 100ms 翻转,证明程序运行正常)
- 中央: 音频电平柱状图
- 绿色: 低电平(安静环境)
- 黄色: 中等电平(正常说话)
- 红色: 高电平(大声说话/噪音)
串口输出
系统通过串口输出调试信息:
- 初始化状态
- 音频电平数值(每秒更新)
- 录音/播放状态
- 错误信息
技术细节
音频处理
麦克风数据处理
- 32-bit 采样数据右移 8 位转换为 24-bit 有效数据
- RMS(均方根)计算用于音频电平评估
- 峰值检测用于可视化显示
录音播放
- 录音时保存原始字节数据
- 播放时提取高 16-bit 数据
- 动态重配置 I2S 参数匹配录音格式
显示优化
柱状图更新策略
- 高度变化时只重绘变化部分
- 颜色变化时重绘整个柱状图
- 黑色背景清除多余部分
性能考虑
- 最小化屏幕刷新区域
- 使用内存缓冲区减少分配
- 定期垃圾回收防止内存溢出
故障排除
常见问题
-
屏幕无显示
- 检查背光引脚连接
- 确认 SPI 引脚配置正确
- 验证屏幕供电电压
-
无音频输出
- 检查 I2S 引脚连接
- 确认 MAX98357A 供电正常
- 验证扬声器连接
-
麦克风无响应
- 检查 I2S 引脚连接
- 确认 ICS-43434 供电正常
- 验证麦克风数据格式配置
-
录音播放有噪音
- 调整音频电平阈值
- 检查电源稳定性
- 验证 I2S 时钟配置
调试建议
- 使用串口监视器查看详细日志
- 检查
config.py中的引脚配置 - 验证硬件连接与配置匹配
- 逐步测试各个模块功能
扩展开发
功能扩展
- 添加更多音频效果
- 实现频谱分析显示
- 增加存储功能(SD 卡)
- 添加无线控制(WiFi/蓝牙)
代码优化
- 实现更高效的音频算法
- 优化内存使用
- 添加错误恢复机制
- 改进用户界面
许可证
本项目基于开源协议发布,详见 LICENSE 文件。
致谢
- Otto DIY 社区提供原始 C++ 代码
- MicroPython 社区提供优秀的开发平台
- 开源硬件社区的支持
Description
Languages
Python
57.6%
C++
41%
C
1.3%
Dockerfile
0.1%