first commit
This commit is contained in:
222
README.md
222
README.md
@@ -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 社区提供优秀的开发平台
|
||||||
|
- 开源硬件社区的支持
|
||||||
Reference in New Issue
Block a user