ESP 多设备识别 / 擦除 / 烧录 / eFuse 桌面工具 · v0.2.0
OTool Esptool UI 是一个面向 Windows 串口量产场景的 PyQt6 桌面工具,提供 ESP32 系列芯片的自动识别、批量擦除、批量烧录、eFuse 读取与批量烧写能力,并内置 PyInstaller 单文件 EXE 打包方案。
- 自动扫描串口并识别芯片信息(型号、MAC、Flash 大小、晶振频率)
- 多设备卡片并排显示,实时烧录进度条
- 单台 / 全部 擦除、烧录、停止操作
- 自动烧录模式:新设备接入后自动触发烧录
- 多条目烧录:工具栏支持添加 / 删除多组地址+固件,一次烧录写入多个分区
- 地址自动从文件名末尾解析(如
firmware_0x10000.bin),每行独立解析 - 清空设备:一键移除所有设备卡片并重置 NEW 状态,下次刷新全部视为新设备
- 固件目录自动扫描,启动时自动选中最新固件
- 芯片型号下拉:从 esptool 动态读取支持列表,选定型号的设备才会被纳入烧写流程,不匹配自动跳过
- 批量状态机:每台设备独立执行 WAITING → READING → PRE-CHECK → BURNING → VERIFYING 完整流程
- 热插拔轮询:可开启自动检测,每 1.5 s 扫描串口,新设备自动加入队列
- 预检逻辑:读取当前 eFuse JSON,已满足的字段跳过,存在写保护冲突时标记失败
- 强制写入:跳过状态下可点击黄色"开始"按钮忽略预检,强制再烧一次
- 字段配置表:可手动添加/删除字段,或从 YAML 文件导入(支持
burn_efuse_fields与efuse_presets两种格式) - 设备队列操作按钮:按状态显示 开始 / 停止 / 重试 / 烧录 / 跳过(黄)
- 操作日志带时间戳,可清空
- 提供
esp32p4_burn_efuse_config_example.yaml字段配置示例
- 默认可视化编排:优先提供“积木式”步骤编辑器,可直接添加 / 删除 / 调整顺序,不必先手写 YAML
- 多步骤脚本:支持
reset/wait/wait_silence/send_text/expect/capture/set_result/pass/fail/clear_buffer十类步骤 - 步骤可折叠:每个步骤块都可双击折叠 / 展开,复杂脚本也能保持清爽,不至于变成“意大利面 UI”
- 启动日志判定:可在设备复位后等待串口输出,并按多个关键字段做
all / any / none匹配 - 串口交互检验:支持等待若干时间后向串口发送文本,再继续等待并判断回显内容
- 步骤级失败重试:
expect/capture/wait_silence等步骤可配置重试次数和重试间隔,适合设备响应不稳定场景 - 静默等待与流程收口:
wait_silence适合等待日志喷完,pass/fail适合在脚本中主动结束流程 - 参数读取与结果展示:
capture可用正则读取版本号 / SN / MAC / 测量值,set_result可将其组合展示到设备结果列 - 匹配方式可选:
contains与regex两种匹配方式,适合固定字段与正则表达式场景 - 多设备队列:支持手动扫描、自动校验、双击单台开始 / 停止、勾选后“全部开始”、全选 / 全不选
- 更适合量产视角的布局:日志下移到设备队列下方,为左侧脚本区留出更多编排空间,最大化窗口时更均衡
- 摘要统计更直观:脚本区显示当前配置摘要,设备区显示总数 / 勾选 / 执行中 / 通过 / 失败状态胶囊
- YAML 高级视图:保留 YAML 编辑器,可从
config.yaml加载默认脚本,也可导入 / 导出独立 YAML 文件 - 统一日志区:脚本步骤日志、串口输出、失败原因统一带时间戳记录
- 内置 eFuse 对话框,支持 JSON 格式 summary 读取与预设字段烧写
- eFuse 表格列:状态 / 读写权限 / 字段名 / 当前值 / 描述,支持双击填入字段名
- 右键设备卡片 eFuse 按钮可快速烧录预设 eFuse 字段
- 多页签切换:烧录台 / 熔丝台 / 校验台(各页 toolbar 控件独立)
- Windows 11 任务栏 / 开始菜单显示自定义图标
- 单文件 EXE:通过
otool_esptool_ui.spec+ PyInstaller 构建
- 最低要求:Python 3.10
- 推荐版本:Python 3.12.x
otool_esptool_ui/
├─ .gitignore
├─ .gitmodules
├─ LICENSE
├─ README.md
├─ THIRD_PARTY_NOTICES.md
├─ __init__.py # 包入口,供 python -m otool_esptool_ui 使用
├─ __main__.py
├─ otool_esptool_ui.py # 版本号单一来源(__version__)
├─ otool_esptool_ui.spec # PyInstaller 打包规格
├─ pyproject.toml
├─ requirements.txt
├─ config.yaml # 运行时配置(efuse_presets / verify_profiles)
├─ esp32p4_burn_efuse_config_example.yaml # eFuse 字段配置示例(不打包)
├─ logo_all_size.ico # 应用图标(含 16–256px 全尺寸帧)
├─ assets/
│ └─ onexs_avatar.png
├─ firmware/ # 放置待烧录 .bin 固件,启动时自动识别
├─ src/
│ ├─ bootstrap.py # 启动分发:冻结模式/工作进程/Qt DLL 路径
│ ├─ constants.py # 路径、版本、工具命令等常量
│ ├─ main_window.py # 主窗口 + main() 入口
│ ├─ device_card.py # 设备卡片控件
│ ├─ efuse_dialog.py # eFuse 对话框(单设备)
│ ├─ efuse_batch_dialog.py # 熔丝台批量烧写控件
│ ├─ verify_plan.py # 校验台脚本解析 / 匹配逻辑
│ ├─ verify_visual_editor.py # 校验台可视化积木编辑器
│ ├─ verify_widget.py # 校验台批量检验控件
│ ├─ models.py # 数据模型
│ ├─ helpers.py # 头像下载等辅助函数
│ ├─ styles.py # 共享样式表
│ ├─ flow_layout.py # 自适应流式布局
│ └─ assets/
│ └─ chevron_down.svg
└─ esptool/ # Git 子模块(espressif/esptool)
# 1. 克隆并初始化子模块
git clone --recurse-submodules <repo_url>
cd otool_esptool_ui
# 2. 创建并激活虚拟环境
python -m venv .venv
.\.venv\Scripts\Activate.ps1
# 3. 安装依赖
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
# 4. 运行
python otool_esptool_ui.pyWindows 下运行 ./management_tools.ps1 可打开管理界面,支持选择 Python 版本、自动下载 Python zip 并初始化 .venv、删除环境、运行程序,以及执行打包生成单文件 dist/otool_esptool_ui.exe。
- 新增「校验台」页:支持复位后启动日志校验、串口发送文本、分步骤等待与多字段匹配
- 新增
verify_profilesYAML 脚本格式,可在config.yaml中维护默认检验脚本 - 校验台新增可视化积木编辑器、步骤折叠、参数读取(
capture)与结果展示(set_result) - 校验台设备队列支持勾选批量开始、全选 / 全不选、双击单台开始 / 停止,日志下移优化排版
- 校验台新增
wait_silence/pass/fail高级步骤,以及步骤级失败重试能力 - 校验台新增脚本摘要 / 设备状态统计胶囊,复杂脚本和多设备并跑时更易读
- 新增「熔丝台」页:批量 eFuse 烧写,支持多设备并联、热插拔、芯片型号校验
- 熔丝台字段配置:手动添加 / YAML 文件导入(burn_efuse_fields / efuse_presets 双格式)
- 强制烧写(黄色按钮):跳过预检、对已满足字段再次执行烧录
- 各页签 toolbar 控件独立分离(烧录台/熔丝台互不干扰)
- 多条目烧录(多组地址+固件)
- 清空设备按钮
- eFuse 对话框 JSON 解析 + 5 列布局优化
- 默认窗口尺寸 ×1.2
- 提供
esp32p4_burn_efuse_config_example.yaml配置示例
- 初始版本:多设备识别、擦除、烧录、自动烧录
