feat(ota_relay): 实现WiFi/AP双模式和CANFD 3通道SPI协议
- 新增AP/STA双工作模式,通过app_config.h配置切换 - 实现CANFD 3通道SPI协议,支持主通信通道和备用通道 - 添加GD32命令ID定义和HTTP API接口 - 集成上位机WebUI,支持固件上传和CAN帧发送 refactor(debug_log): 支持UDP+UART双通道调试输出 - 新增UART0串口调试功能,TX=GPIO21, RX=GPIO20, 115200波特率 - 实现UDP socket延迟创建机制,避免网络初始化冲突 - 调试日志同时输出到UDP和UART双通道 docs(README): 更新项目文档和目录结构说明 - 更新硬件平台和模块功能描述 - 添加WiFi工作模式配置说明 - 补充CANFD协议和GD32命令定义 - 增加HTTP API和上位机WebUI使用指南 fix(health_monitor): 优化健康监控和系统状态报告 - 增强温度和电压监控的警告提示信息 - 添加WiFi RSSI监控和健康状态更新 - 修复安全关机触发条件和状态变更日志 style(main): 优化程序入口和任务创建流程 - 修复网络接口初始化顺序问题 - 添加任务创建结果检查和错误处理 - 增加系统启动信息和CPU频率显示 - 新增周期性状态监控任务,每10秒打印系统状态
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# ESP32-C3 OTA Relay
|
||||
|
||||
ESP32-C3FH4 OTA 中继固件,通过 WiFi / BLE 接收上位机 OTA 固件包,通过 SPI 转发给下位机(GD32)。
|
||||
ESP32-C3FH4 OTA 中继固件,通过 WiFi 接收上位机 OTA 固件包,通过 SPI 转发给下位机(GD32)。
|
||||
|
||||
## 硬件平台
|
||||
|
||||
@@ -14,27 +14,93 @@ ESP32-C3FH4 OTA 中继固件,通过 WiFi / BLE 接收上位机 OTA 固件包
|
||||
|------|------|
|
||||
| `health_monitor` | 温度 + 电压 + WiFi RSSI 监控 |
|
||||
| `ota_relay` | OTA 数据包接收与转发 |
|
||||
| `wifi_ota` | WiFi OTA 服务器 (HTTP) |
|
||||
| `ble_ota` | BLE OTA 服务器 (GATT) |
|
||||
| `spi_master` | SPI 主站,与下位机通信 |
|
||||
| `protocol` | CRC 校验 + AES 解密 |
|
||||
| `wifi_ota` | WiFi OTA HTTP 服务器 + CAN 帧转发 |
|
||||
| `spi_master` | SPI 主站,与 GD32 通信 |
|
||||
| `protocol` | CRC16 校验 + AES-128-CBC 解密(硬件加速) |
|
||||
|
||||
## 目录结构
|
||||
|
||||
```
|
||||
main/
|
||||
ESP32_COMM/
|
||||
├── CMakeLists.txt
|
||||
├── core/main.cpp # 任务创建入口
|
||||
├── relay/ota_relay.cpp # OTA 中继逻辑
|
||||
├── transport/
|
||||
│ ├── spi_master.cpp # SPI 主站
|
||||
│ └── protocol.cpp # 协议层 (CRC/AES)
|
||||
├── server/
|
||||
│ ├── wifi_ota.cpp # WiFi OTA HTTP 服务器
|
||||
│ └── ble_ota.cpp # BLE OTA GATT 服务器
|
||||
└── monitor/
|
||||
├── health_monitor.cpp # 健康监控
|
||||
└── debug_log.cpp # UDP 调试日志
|
||||
├── main/
|
||||
│ ├── CMakeLists.txt
|
||||
│ ├── include/
|
||||
│ │ └── app_config.h # WiFi / OTA 参数配置
|
||||
│ ├── core/main.cpp # 任务创建入口
|
||||
│ ├── relay/ota_relay.cpp # OTA 中继逻辑
|
||||
│ ├── transport/
|
||||
│ │ ├── spi_master.cpp # SPI 主站 + CANFD 3通道发送
|
||||
│ │ └── protocol.cpp # 协议层 (CRC16 / AES-128-CBC)
|
||||
│ ├── server/
|
||||
│ │ └── wifi_ota.cpp # WiFi OTA HTTP 服务器
|
||||
│ └── monitor/
|
||||
│ ├── health_monitor.cpp # 健康监控
|
||||
│ └── debug_log.cpp # UDP 调试日志
|
||||
└── tools/
|
||||
└── ota_host_web.html # 上位机 WebUI(CAN 发送 + OTA 上传)
|
||||
```
|
||||
|
||||
## WiFi 工作模式
|
||||
|
||||
支持 AP / STA 两种模式,通过 `app_config.h` 配置:
|
||||
|
||||
```c
|
||||
// AP 模式(ESP32 当热点)
|
||||
CONFIG_WIFI_MODE_IS_STA = 0
|
||||
WIFI_AP_SSID = "ESP32_OTA_RELAY" // 默认热点名称
|
||||
WIFI_AP_PASSWORD = "12345678" // 默认密码
|
||||
// 上位机连接热点后访问: http://192.168.4.1
|
||||
|
||||
// STA 模式(连接路由器)
|
||||
CONFIG_WIFI_MODE_IS_STA = 1
|
||||
WIFI_STA_SSID = "004舰桥" // 路由器名称
|
||||
WIFI_STA_PASSWORD = "q13362875622" // 路由器密码
|
||||
// 上位机和 ESP32 在同一局域网,通过 DHCP 分配的 IP 访问
|
||||
```
|
||||
|
||||
## CANFD 3通道 SPI 协议
|
||||
|
||||
GD32 通信帧格式:`[通道编号: 1B] [扩展帧ID: 4B BE] [数据: 1~64B]`
|
||||
|
||||
| 通道 | 用途 |
|
||||
|------|------|
|
||||
| CH0 | 主通信通道 |
|
||||
| CH1 | 备用通道 1 |
|
||||
| CH2 | 备用通道 2 |
|
||||
|
||||
### GD32 命令 ID 定义
|
||||
|
||||
| 域 | 命令 | ID |
|
||||
|---|---|---|
|
||||
| 系统 | PING / RESET / GET_VERSION / GET_STATUS / SET_STATUS | 0x0001~0x0005 |
|
||||
| Flash | ERASE / WRITE / READ / VERIFY | 0x1001~0x1004 |
|
||||
| OTA | START / DATA / END / ABORT | 0x2001~0x2004 |
|
||||
| 传感器 | READ / CONFIG | 0x3001~0x3002 |
|
||||
| Bootloader | ENTER / JUMP_APP | 0xF001~0xF002 |
|
||||
|
||||
## 上位机 WebUI
|
||||
|
||||
`tools/ota_host_web.html` — 浏览器打开即可使用,无需安装。
|
||||
|
||||
### HTTP API
|
||||
|
||||
| 方法 | 路径 | 功能 |
|
||||
|------|------|------|
|
||||
| POST | `/ota/upload` | 上传固件 (.bin) |
|
||||
| POST | `/ota/relay` | 触发 OTA 中继 |
|
||||
| GET | `/ota/status` | 查询 OTA 状态 |
|
||||
| POST | `/can/send` | 发送 CAN 帧到 GD32 |
|
||||
| GET | `/can/status` | CAN 通道状态 |
|
||||
| GET | `/health` | ESP32 健康状态 |
|
||||
| GET | `/wifi/status` | WiFi 连接状态 |
|
||||
|
||||
### CAN 帧发送示例
|
||||
|
||||
```bash
|
||||
curl -X POST http://192.168.4.1/can/send \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"ch": 0, "id": 12345678, "dlc": 8, "data": "0102030405060708"}'
|
||||
```
|
||||
|
||||
## 任务配置 (单核 ESP32-C3)
|
||||
@@ -46,23 +112,23 @@ main/
|
||||
| health_mon | configMAX_PRIORITIES - 4 | 4096 | 健康监控 |
|
||||
| ota_relay | configMAX_PRIORITIES - 2 | 8192 | OTA 中继 |
|
||||
| wifi_ota | configMAX_PRIORITIES - 3 | 8192 | WiFi OTA |
|
||||
| ble_ota | configMAX_PRIORITIES - 3 | 8192 | BLE OTA |
|
||||
|
||||
## 调试日志
|
||||
|
||||
UDP 输出到上位机,端口 6666。上位机 WebUI 自动监听并显示。
|
||||
|
||||
## 编译
|
||||
|
||||
```bash
|
||||
idf.py set-target esp32c3
|
||||
idf.py fullclean
|
||||
idf.py build
|
||||
idf.py flash monitor
|
||||
```
|
||||
|
||||
## 待确认参数
|
||||
|
||||
- AES-128 主密钥 (MASTER_KEY_HERE)
|
||||
- 搅伴算法种子 (SCRAMBLE_CONST_HERE)
|
||||
- 芯片唯一码 (CHIP_UID_HERE)
|
||||
- OTA Service UUID (需与 APP 侧协商)
|
||||
|
||||
## 编译
|
||||
|
||||
```bash
|
||||
idf.py set-target esp32c3
|
||||
idf.py build
|
||||
idf.py flash monitor
|
||||
```
|
||||
|
||||
## 调试日志
|
||||
|
||||
UDP 输出到上位机,默认 IP: `DEBUG_LOG_IP`,端口: `DEBUG_LOG_PORT`。
|
||||
- OTA Service UUID (需与 APP 侧协商)
|
||||
Reference in New Issue
Block a user