纯前端上位机界面 + esp32_server.py 静态服务/桌面窗口外壳, 不含固件、 不直接访问硬件; 业务 API 由 ESP32_COMM 固件 80 端口跨域提供。 - tabs.html 单窗口多标签外壳, iframe 承载各功能页 - index.html OTA 中继(ESP32 WiFi / GD32 relay / BLE), js/ota + js/ble - can.html / can_monitor.html CAN 通信与接收监控, js/can - motor.html 电机 CAN FD 控制台, js/motor - continuity_test.html LAN9252 通断测试, spi_test.html SPI 测速(临时, 自包含) - 三入口: esp32_app.vbs 桌面窗口 / esp32_web.vbs 浏览器 / serve.bat 控制台调试 - 补 README(页面与目录约定、?v= 缓存版本等改动须知)、.gitignore、 .gitattributes(* -text 保持 Windows 换行原样)
64 lines
3.7 KiB
Markdown
64 lines
3.7 KiB
Markdown
# DCU ESP32 调试控制台(Web 前端 + 本地页面服务)
|
||
|
||
`G:\Robot_v2\DCU\tools\ESP32` —— ESP32-C3(`DCU/ESP32_COMM` 固件)的上位机调试界面。
|
||
|
||
本目录**不含固件代码,也不直接访问硬件**:HTML/CSS/JS 是纯前端,页面本体由
|
||
`esp32_server.py` 以静态文件方式提供(同源相对路径),而所有业务 API 由 ESP32
|
||
固件的 80 端口跨域提供。设备 IP 存在浏览器 `localStorage` 的 `dcu_esp_ip`
|
||
(默认 `192.168.31.127`,见 `js/common/base-url.js`)。
|
||
|
||
## 启动方式
|
||
|
||
| 入口 | 形态 | 说明 |
|
||
|------|------|------|
|
||
| `esp32_app.vbs` | 桌面窗口 | pywebview + WebView2,无控制台窗口;服务跑在独立子进程 |
|
||
| `esp32_web.vbs` | 默认浏览器标签页 | 无控制台窗口 |
|
||
| `serve.bat` | 控制台模式 | 端口 8080,窗口内可见服务器日志,用于调试 |
|
||
|
||
窗口模式为何拆两个进程:`pythonw` + `pythonnet`(pywebview 依赖)环境下 Python
|
||
后台线程会被静默杀死,把 HTTP 服务放进独立子进程可规避,与 `tools/ecat/ecat_server.py`
|
||
同款结构。pywebview 窗口没有地址栏与刷新按钮,因此服务器会向 HTML 响应注入
|
||
`_reload.html`(右下角 ⟳ 悬浮按钮 + F5/Ctrl+R 拦截)。
|
||
|
||
`build_mem.bat` 是从 Git Bash 调用 ESP-IDF 构建 `DCU/ESP32_COMM` 的辅助脚本
|
||
(会先清掉 MSYS 环境变量绕过 IDF 的 MSys 检测)。
|
||
|
||
## 页面
|
||
|
||
`tabs.html` 是单窗口多标签外壳,用 iframe 承载下列功能页,激活标签记忆在
|
||
`localStorage` 的 `dcu_tab`:
|
||
|
||
| 页面 | 用途 | 主要脚本 |
|
||
|------|------|----------|
|
||
| `index.html` | OTA 中继控制台(ESP32 WiFi OTA / GD32 relay / BLE OTA) | `js/app.js`、`js/ota/*`、`js/ble_ota.js`、`js/ble/*` |
|
||
| `can.html` | CAN 通信(DBC 解析、消息编辑与批量发送) | `js/can.js`、`js/can/*` |
|
||
| `can_monitor.html` | CAN 接收监控 | `js/can_monitor.js` |
|
||
| `motor.html` | 电机控制台(CAN FD) | `js/motor/main.js`、`js/motor/tick.worker.js` |
|
||
| `continuity_test.html` | LAN9252 通断测试(自包含,含 WebGL 液态玻璃效果) | 内联 |
|
||
| `spi_test.html` | 【临时功能 SPI-SPEEDTEST】SPI 链路测速,完全自包含,删文件即可移除 | 内联 |
|
||
|
||
## 目录约定
|
||
|
||
- `css/` —— `base`(变量/基础)、`layout`、`components`、`can`、`motor`、`responsive`。
|
||
- `js/common/` —— 跨页公用:`base-url`(设备 IP)、`connection`、`polling`、`log`、`toast`、`utils`、`heap-low-history`。
|
||
- `js/ota/`、`js/ble/`、`js/can/`、`js/motor/` —— 按功能域拆分的 ES module。
|
||
- 子系统配色:ESP32 = 青绿 · GD32 = 琥珀 · BLE = 蓝 · CAN = 绿 · 内存/调试 = 紫。
|
||
|
||
## 改动须知
|
||
|
||
- **改 CSS/JS 后必须 bump 引用处的 `?v=` 缓存版本**,否则浏览器会加载旧代码。
|
||
- OTA 流程以设备端为真相来源:WiFi OTA 由设备回读分区算 SHA-256 后自动重启;
|
||
BLE OTA 由前端发 `0xF8 + 32B SHA-256`、设备端比较并通过 FINISH 事件报结果
|
||
(前端不做 SHA 预比较);GD32 relay 状态以 `/system/status` 为准。
|
||
- 监控 UI 需区分 `valid`(通信是否成功)与 `count > 0`(是否有数据),
|
||
以便分辨「正常空闲」和「真实通信错误」。
|
||
- 响应式 grid 表隐藏列用 `0fr` 宽度实现,不要改变 grid track 数量。
|
||
- 新增 CAN 工作模式时,需在页面上显式补按钮与说明文字。
|
||
- DBC 文件常为 GBK/GB2312:先按 UTF-8(`{fatal: true}`)尝试,失败回退 GB18030,并去 BOM。
|
||
|
||
## 相关仓库
|
||
|
||
- `DCU/ESP32_COMM` —— ESP32-C3 固件(OTA、SPI Link v2、CAN FD bridge)。
|
||
- `DCU/DCU_APP`、`DCU/GD32E50X_BOOT` —— GD32 侧应用与 bootloader。
|
||
- `DCU/tools/ecat` —— LAN9252 EtherCAT 主站工具集(同类结构的姊妹工具)。
|