# 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`) - 支持多硬件版本配置 - 引脚定义集中管理 - 音频参数可配置 ## 使用说明 ### 基本操作 1. **启动**: 系统上电后自动初始化屏幕、音频和麦克风 2. **音频测试**: 启动时会自动播放马里奥主题曲 3. **实时监测**: 屏幕显示实时音频电平柱状图 4. **录音功能**: - 按住 Boot 按键开始录音 - 释放按键停止录音并自动播放 ### 屏幕显示 - **左上角**: 按键状态指示(红色=按下,蓝色=释放) - **右上角**: 心跳指示器(每 100ms 翻转,证明程序运行正常) - **中央**: 音频电平柱状图 - 绿色: 低电平(安静环境) - 黄色: 中等电平(正常说话) - 红色: 高电平(大声说话/噪音) ### 串口输出 系统通过串口输出调试信息: - 初始化状态 - 音频电平数值(每秒更新) - 录音/播放状态 - 错误信息 ## 技术细节 ### 音频处理 #### 麦克风数据处理 - 32-bit 采样数据右移 8 位转换为 24-bit 有效数据 - RMS(均方根)计算用于音频电平评估 - 峰值检测用于可视化显示 #### 录音播放 - 录音时保存原始字节数据 - 播放时提取高 16-bit 数据 - 动态重配置 I2S 参数匹配录音格式 ### 显示优化 #### 柱状图更新策略 - 高度变化时只重绘变化部分 - 颜色变化时重绘整个柱状图 - 黑色背景清除多余部分 #### 性能考虑 - 最小化屏幕刷新区域 - 使用内存缓冲区减少分配 - 定期垃圾回收防止内存溢出 ## 故障排除 ### 常见问题 1. **屏幕无显示** - 检查背光引脚连接 - 确认 SPI 引脚配置正确 - 验证屏幕供电电压 2. **无音频输出** - 检查 I2S 引脚连接 - 确认 MAX98357A 供电正常 - 验证扬声器连接 3. **麦克风无响应** - 检查 I2S 引脚连接 - 确认 ICS-43434 供电正常 - 验证麦克风数据格式配置 4. **录音播放有噪音** - 调整音频电平阈值 - 检查电源稳定性 - 验证 I2S 时钟配置 ### 调试建议 - 使用串口监视器查看详细日志 - 检查 `config.py` 中的引脚配置 - 验证硬件连接与配置匹配 - 逐步测试各个模块功能 ## 扩展开发 ### 功能扩展 - 添加更多音频效果 - 实现频谱分析显示 - 增加存储功能(SD 卡) - 添加无线控制(WiFi/蓝牙) ### 代码优化 - 实现更高效的音频算法 - 优化内存使用 - 添加错误恢复机制 - 改进用户界面 ## 许可证 本项目基于开源协议发布,详见 LICENSE 文件。 ## 致谢 - Otto DIY 社区提供原始 C++ 代码 - MicroPython 社区提供优秀的开发平台 - 开源硬件社区的支持