From c0882a93a93227145a8003b630778a361d1c01cc Mon Sep 17 00:00:00 2001 From: jeremygan2021 Date: Mon, 2 Mar 2026 21:16:03 +0800 Subject: [PATCH] first commit --- README.md | 222 +++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 204 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index bd1b493..f7c438c 100644 --- a/README.md +++ b/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 -from Ali Express. It also supports 135x240 TTGO Display +这是一个基于 ESP32-S3 和 MicroPython 的音频可视化项目,使用 ST7789 方形屏幕和 I2S 音频接口,实现了音频播放、麦克风录音和实时音频可视化功能。 -Version: 0.1.4 +## 项目概述 -The performance is quite low due to python function call overhead. -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 +本项目将原有的 C++ Otto 机器人代码移植到 MicroPython 平台,专注于音频处理和可视化功能。主要特性包括: -Examples --------- +- 🎵 **音频播放**: 支持 I2S 接口的音频输出,内置马里奥主题曲 +- 🎤 **麦克风录音**: 支持 I2S 接口的数字麦克风(ICS-43434) +- 📊 **实时可视化**: 在 240x240 ST7789 屏幕上显示音频电平柱状图 +- 🎯 **按键交互**: 使用 Boot 按键控制录音和播放 +- 🔧 **模块化设计**: 清晰的代码结构,易于扩展和维护 - # ESP8266 - import machine - import st7789py - spi = machine.SPI(1, baudrate=40000000, polarity=1) - display = st7789py.ST7789(spi, 240, 240, reset=machine.Pin(5, machine.Pin.OUT), dc=machine.Pin(4, machine.Pin.OUT)) - display.init() - display.pixel(120, 120, st7789py.YELLOW) +## 硬件要求 + +### 核心硬件 +- **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 社区提供优秀的开发平台 +- 开源硬件社区的支持 \ No newline at end of file