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

5.1 KiB
Raw Permalink Blame History

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 社区提供优秀的开发平台
  • 开源硬件社区的支持