first commit

This commit is contained in:
jeremygan2021
2026-03-02 21:16:03 +08:00
parent 252a430466
commit c0882a93a9

222
README.md
View File

@@ -1,23 +1,209 @@
Slow ST7789 driver for MicroPython # ESP32-S3 音频可视化项目
==================================
This is a slow MicroPython driver for 240x240 ST7789 display without CS pin 这是一个基于 ESP32-S3 和 MicroPython 的音频可视化项目,使用 ST7789 方形屏幕和 I2S 音频接口,实现了音频播放、麦克风录音和实时音频可视化功能。
from Ali Express. It also supports 135x240 TTGO Display
Version: 0.1.4 ## 项目概述
The performance is quite low due to python function call overhead. 本项目将原有的 C++ Otto 机器人代码移植到 MicroPython 平台,专注于音频处理和可视化功能。主要特性包括:
If you have a chance to build firmware and you are using
ESP8266/ESP32 controllers, you should try the fast driver
https://github.com/devbis/st7789_mpy
Examples - 🎵 **音频播放**: 支持 I2S 接口的音频输出,内置马里奥主题曲
-------- - 🎤 **麦克风录音**: 支持 I2S 接口的数字麦克风ICS-43434
- 📊 **实时可视化**: 在 240x240 ST7789 屏幕上显示音频电平柱状图
- 🎯 **按键交互**: 使用 Boot 按键控制录音和播放
- 🔧 **模块化设计**: 清晰的代码结构,易于扩展和维护
# ESP8266 ## 硬件要求
import machine
import st7789py ### 核心硬件
spi = machine.SPI(1, baudrate=40000000, polarity=1) - **ESP32-S3 开发板**
display = st7789py.ST7789(spi, 240, 240, reset=machine.Pin(5, machine.Pin.OUT), dc=machine.Pin(4, machine.Pin.OUT)) - **ST7789 240x240 方形屏幕**
display.init() - **MAX98357A I2S 音频放大器**
display.pixel(120, 120, st7789py.YELLOW) - **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 社区提供优秀的开发平台
- 开源硬件社区的支持