Files
ESP32_COMM/README.md
T
小龙虾 478e5e5a31 feat(ota-relay): 更新ESP32-C3 OTA中继固件配置和功能增强
- 修改WiFi配置默认为STA模式连接路由器,并调整相关参数
- 优化调试日志系统,添加环形缓冲区支持HTTP日志拉取功能
- 重构健康监控,提高温度监控频率至1秒并添加电压监控定时器
- 更新分区表配置以适应4MB Flash布局
- 添加OTA更新组件依赖和蓝牙支持
- 修复UDP socket延迟创建时机,确保网络接口初始化正确
- 调整WiFi信号强度告警阈值,提升连接稳定性
- 更新README文档中的IP地址配置示例
- 修改VSCode端口配置为COM13
2026-05-05 03:28:44 +08:00

3.9 KiB
Raw Blame History

ESP32-C3 OTA Relay

ESP32-C3FH4 OTA 中继固件,通过 WiFi 接收上位机 OTA 固件包,通过 SPI 转发给下位机(GD32)。

硬件平台

  • 芯片: ESP32-C3FH4 (RISC-V, 单核)
  • Flash: 4MB
  • 编译工具链: ESP-IDF v6.0, riscv32-esp-elf

功能模块

模块 描述
health_monitor 温度 + 电压 + WiFi RSSI 监控
ota_relay OTA 数据包接收与转发
wifi_ota WiFi OTA HTTP 服务器 + CAN 帧转发
spi_master SPI 主站,与 GD32 通信
protocol CRC16 校验 + AES-128-CBC 解密(硬件加速)

目录结构

ESP32_COMM/
├── CMakeLists.txt
├── 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 配置:

// AP 模式(ESP32 当热点)
CONFIG_WIFI_MODE_IS_STA = 0
WIFI_AP_SSID = "ESP32_OTA_RELAY"   // 默认热点名称
WIFI_AP_PASSWORD = "12345678"      // 默认密码
// 上位机连接热点后访问: http://192.168.31.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 帧发送示例

curl -X POST http://192.168.31.1/can/send \
  -H "Content-Type: application/json" \
  -d '{"ch": 0, "id": 12345678, "dlc": 8, "data": "0102030405060708"}'

任务配置 (单核 ESP32-C3)

所有任务固定运行在 CPU 核 0:

任务 优先级 栈大小 说明
health_mon configMAX_PRIORITIES - 4 4096 健康监控
ota_relay configMAX_PRIORITIES - 2 8192 OTA 中继
wifi_ota configMAX_PRIORITIES - 3 8192 WiFi OTA

调试日志

UDP 输出到上位机,端口 6666。上位机 WebUI 自动监听并显示。

编译

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 侧协商)