Files
V2_micropython/README.md
jeremygan2021 c0882a93a9 first commit
2026-03-02 21:16:03 +08:00

209 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 社区提供优秀的开发平台
- 开源硬件社区的支持