feat(esp32): 添加多电机OTA中继功能并优化调试日志系统
- 新增多电机状态、版本和OTA中继监控模块(monitor/motor_state.cpp, monitor/motor_version.cpp, monitor/motor_ota_relay.cpp) - 在CAN反馈任务中添加0xC5/0xC6/0xD2类型消息处理,支持多电机状态推送 - 重构调试日志系统,将一次性JSON分配改为512B栈缓冲流式发送,降低内存峰值 - 调试UART波特率从115200提升至30000 - 修改版本管理方式,从自动生version.h改为手动维护 - 更新VSCode设置以支持ESP-IDF开发环境配置 - 在OTA协调器中添加电机OTA互斥机制,防止并发冲突 - 完善中继状态机异常处理,添加远程取消通知机制
This commit is contained in:
+65
-20
@@ -1,7 +1,8 @@
|
||||
<!--
|
||||
index.html - ESP32 OTA 中继控制台主页面
|
||||
index.html - ESP32 OTA 中继控制台主页面(DCU Mission Control · 美化版)
|
||||
支持 WiFi OTA(ESP32 本机 + GD32 中继)和 BLE OTA 双通道固件升级。
|
||||
配套脚本:app.js (WiFi OTA), ble_ota.js (BLE OTA), style.css (UI 样式)
|
||||
配套脚本:app.js (WiFi OTA), ble_ota.js (BLE OTA)
|
||||
子系统配色:ESP32=青绿 · GD32=琥珀 · BLE=蓝 · CAN=绿 · 内存/调试=紫
|
||||
-->
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
@@ -9,20 +10,29 @@
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>ESP32 OTA 中继控制台</title>
|
||||
<link rel="stylesheet" href="css/base.css?v=7d5f4eef">
|
||||
<link rel="stylesheet" href="css/layout.css?v=a3e0b7e2">
|
||||
<link rel="stylesheet" href="css/components.css?v=475fa1ac">
|
||||
<link rel="stylesheet" href="css/can.css?v=8a9342b7">
|
||||
<link rel="stylesheet" href="css/responsive.css?v=61b66182">
|
||||
<link rel="stylesheet" href="css/base.css?v=857f83a5">
|
||||
<link rel="stylesheet" href="css/layout.css?v=acd17001">
|
||||
<link rel="stylesheet" href="css/components.css?v=7bc7d5db">
|
||||
<link rel="stylesheet" href="css/can.css?v=c06f5688">
|
||||
<link rel="stylesheet" href="css/responsive.css?v=46449483">
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
|
||||
<!-- ====== HEADER: compact status bar ====== -->
|
||||
<!-- ====== HEADER: 命令栏 ====== -->
|
||||
<header class="header-bar">
|
||||
<div class="header-brand">
|
||||
<span class="dot-mark"></span>
|
||||
<strong>ESP32 OTA 中继控制台</strong>
|
||||
<span class="brand-logo" aria-hidden="true">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round">
|
||||
<rect x="6" y="6" width="12" height="12" rx="2.5"/>
|
||||
<rect x="9.5" y="9.5" width="5" height="5" rx="1" fill="currentColor" stroke="none" opacity=".85"/>
|
||||
<path d="M9 2v3M15 2v3M9 19v3M15 19v3M2 9h3M2 15h3M19 9h3M19 15h3"/>
|
||||
</svg>
|
||||
</span>
|
||||
<div class="brand-text">
|
||||
<strong>ESP32 OTA 中继控制台</strong>
|
||||
<span class="brand-sub">DCU · Robot_v2 · Relay</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="header-status">
|
||||
<span class="pill offline" id="pillConn"><span class="indicator"></span><span id="pillConnTxt">未连接</span></span>
|
||||
@@ -44,7 +54,7 @@
|
||||
<div>
|
||||
|
||||
<!-- 1. Connection -->
|
||||
<div class="card">
|
||||
<div class="card card--ble">
|
||||
<div class="card-head"><span class="ico">🔗</span> 设备连接
|
||||
<span id="bleHeadActions" style="display:none;margin-left:auto;">
|
||||
<button id="connectBtn" class="btn btn-sm btn-primary">连接设备</button>
|
||||
@@ -70,7 +80,7 @@
|
||||
</div>
|
||||
|
||||
<!-- ====== Shared Target + Firmware + Actions ====== -->
|
||||
<div class="card">
|
||||
<div class="card card--gd32">
|
||||
<div class="card-head"><span class="ico">🎯</span> 升级目标、固件文件与执行操作</div>
|
||||
<div class="card-body">
|
||||
<div style="display:flex;gap:6px;margin-bottom:14px;">
|
||||
@@ -172,7 +182,7 @@
|
||||
</div>
|
||||
|
||||
<!-- 4. Flash Progress + Stage Flow -->
|
||||
<div class="card">
|
||||
<div class="card card--esp32">
|
||||
<div class="card-head"><span class="ico">⚡</span> 刷写进度与流程阶段</div>
|
||||
<div class="card-body">
|
||||
<!-- Phase step indicators -->
|
||||
@@ -237,7 +247,7 @@
|
||||
<div>
|
||||
|
||||
<!-- Primary status -->
|
||||
<div class="card">
|
||||
<div class="card card--status">
|
||||
<div class="card-head"><span class="ico">📡</span> 设备状态</div>
|
||||
<div class="card-body">
|
||||
<div class="badge-grid">
|
||||
@@ -273,7 +283,7 @@
|
||||
</div>
|
||||
|
||||
<!-- Secondary metrics -->
|
||||
<div class="card">
|
||||
<div class="card card--mem">
|
||||
<div class="card-head"><span class="ico">📊</span> 运行指标</div>
|
||||
<div class="card-body">
|
||||
<div class="metric-grid">
|
||||
@@ -287,7 +297,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card" style="display:none">
|
||||
<div class="card card--mem" style="display:none">
|
||||
<div class="card-head">
|
||||
<span class="ico">🧾</span> 系统状态 (/system/status)
|
||||
<button class="btn btn-ghost btn-sm card-head-btn" onclick="refreshSystemStatusNow(event)">刷新</button>
|
||||
@@ -302,7 +312,7 @@
|
||||
</div>
|
||||
|
||||
<!-- CAN workspace entry -->
|
||||
<div class="card collapsed">
|
||||
<div class="card card--can collapsed">
|
||||
<div class="card-head" onclick="toggleCollapse(this)">
|
||||
<span class="ico">📨</span> CAN 通信页
|
||||
<span class="collapse-arrow">▼</span>
|
||||
@@ -338,11 +348,46 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Motor workspace entry -->
|
||||
<div class="card card--motor collapsed">
|
||||
<div class="card-head" onclick="toggleCollapse(this)">
|
||||
<span class="ico">⚙️</span> 电机控制页
|
||||
<span class="collapse-arrow">▼</span>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="can-launch-card motor-launch-card">
|
||||
<div class="can-launch-copy">
|
||||
<div class="can-launch-top">
|
||||
<div>
|
||||
<div class="can-launch-kicker">Motor Workspace</div>
|
||||
<h3>电机 CAN FD 控制台</h3>
|
||||
</div>
|
||||
<span class="can-launch-badge">CMD / STATUS</span>
|
||||
</div>
|
||||
<p class="can-launch-desc">节点总览、CMD 控制、CONFIG/VERSION、电机 OTA。与主页共用设备 IP(<code>dcu_esp_ip</code>),本页不提供连接配置,进入后自动探测并轮询 <code>/motor/state</code>。</p>
|
||||
<div class="can-launch-points">
|
||||
<span class="can-launch-point">多节点在线状态</span>
|
||||
<span class="can-launch-point">周期/单次 CMD</span>
|
||||
<span class="can-launch-point">共用主页连接</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="can-launch-actions">
|
||||
<a class="btn btn-primary can-launch-primary motor-launch-primary" href="motor.html">进入电机控制</a>
|
||||
<button class="btn btn-outline can-launch-secondary" type="button" onclick="window.open('motor.html','_blank','noopener')">新窗口打开</button>
|
||||
</div>
|
||||
<div class="can-launch-foot">
|
||||
<span class="can-launch-foot-label">说明</span>
|
||||
<span>请先在上方「设备连接」配置并测试 ESP32 IP;电机页只消费同一连接,不单独建连。</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Log panel -->
|
||||
<div class="card log-panel">
|
||||
<div class="card card--mem log-panel">
|
||||
<div class="card-head" style="justify-content:space-between;">
|
||||
<span><span class="ico">🖥️</span> 调试日志</span>
|
||||
<span style="font-size:11px;font-weight:400;color:var(--text-label);text-transform:none;letter-spacing:0;">UDP :6666</span>
|
||||
<span style="font-size:11px;font-weight:400;color:var(--text-label);text-transform:none;letter-spacing:0;font-family:var(--font-mono);">UDP :6666</span>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="log-toolbar">
|
||||
@@ -374,7 +419,7 @@
|
||||
<span class="sys-drawer-rail-ico">🧠</span>
|
||||
<span class="sys-drawer-rail-text">堆与任务栈</span>
|
||||
</div>
|
||||
<div class="sys-drawer-panel card">
|
||||
<div class="sys-drawer-panel card card--mem">
|
||||
<div class="card-head sys-drawer-head">
|
||||
<span class="ico">🧠</span> 堆与任务栈
|
||||
<button class="btn btn-ghost btn-sm card-head-btn" type="button" onclick="refreshSystemStatusNow(event)">刷新</button>
|
||||
|
||||
Reference in New Issue
Block a user