RTKConfig-32C3

基于 ESP32-C3 的 RTK 差分转发设备工程,支持 BASE 和 ROVER 两种工作模式。

  • BASE 模式:读取 UM982 输出的 RTCM 差分数据,并上传到服务器。
  • ROVER 模式:连接 NTRIP caster 获取差分数据,写入 UM982,同时回传 GGA。

当前固件版本:v2.1.5

1. 项目概述

这个工程用于把 ESP32-C3 做成一台小型 RTK 差分接入设备,核心能力包括:

  • 同时工作在 AP + STA 模式
  • 提供本地 Web 配置页面
  • 保存配置到 Preferences / NVS
  • 支持 BASE / ROVER 双模式切换
  • 支持 OTA 检查、下载和升级
  • 支持路由器、服务器、NTRIP、串口等状态可视化

项目当前主要服务于 UM982 模块接入场景。

2. 工作模式

2.1 BASE 模式

BASE 模式下,设备会:

  1. 从 UM982 串口读取 RTCM 原始字节流
  2. 通过 STA 连上外部路由器
  3. 连接目标 TCP 服务器
  4. 先发送:
BASE <station_id>\n
  1. 再持续上传 RTCM 数据

适用于“基站把差分上传到上位服务器”的场景。

2.2 ROVER 模式

ROVER 模式下,设备会:

  1. 从 Web 配置里读取 NTRIP caster 地址、端口、挂载点、账号和密码
  2. 通过 STA 连上外部路由器
  3. 以 NTRIP Client 方式连接 caster
  4. 从服务器接收差分数据并写入 UM982
  5. 从 UM982 串口读取 NMEA,并只回传 GGA

适用于“流动站通过 NTRIP 获取差分修正”的场景。

3. 主要功能

  • 支持 BASE / ROVER 一键切换
  • 支持 SoftAP 本地热点配置
  • 支持 STA 自动重连和退避重试
  • 支持 TCP / NTRIP 自动重连
  • 支持串口状态、网络状态、差分状态可视化
  • 支持 OTA 在线检查和升级
  • 支持分页面配置保存

4. 硬件与串口

4.1 默认硬串口引脚

  • UART1
  • RX = GPIO1
  • TX = GPIO0

4.2 默认串口参数

  • 波特率:115200

4.3 调试串口

  • UART0 / Serial
    • 用于下载、调试和启动日志输出
  • UART1 / UM982
    • 固定用于连接 UM982
    • 固定引脚为 RX = GPIO1、TX = GPIO0
    • 不提供用户修改入口

5. 默认参数

5.1 SoftAP

  • SSID:ClearRTKConfig-xxxxxx
    • 后缀由芯片 MAC 后 24 bit 自动生成
  • Password:Bone1644

5.2 BASE 默认值

  • 站点编号:GD_SZ_001
  • 服务器地址:107.173.157.41:9000

5.3 ROVER 默认值

  • NTRIP port 默认值:2101
  • 其余 NTRIP 项默认留空,需用户自行配置

6. Web 页面结构

当前 Web 页面主要分为以下区域:

  • 运行状态
    • 显示 Wi‑Fi、服务器、GNSS 串口、差分数据四张状态卡
    • 支持在这里执行“重启设备”
  • 基础设置
    • BASE:站点编号、服务器地址
    • ROVER:NTRIP 地址、挂载点、账号、密码
  • 网络设置
    • 路由器名称、路由器密码
  • 串口设置
    • 波特率、RX、TX
  • 固件升级
    • 检查更新、开始升级、查看升级状态

右上角模式标识可直接点击切换 BASE / ROVER,切换后设备会立即重启。

7. 状态语义

首页重点展示四类状态:

  • Wi‑Fi
  • 服务器 / NTRIP
  • GNSS 串口
  • 差分数据

状态颜色语义:

  • 绿色:当前正常
  • 黄色:等待中、未配置或短暂过渡
  • 红色:明确失败、长期无数据或链路异常

7.1 Rover 特殊判断

ROVER 模式下,如果:

  • GGA 正在正常回传
  • 但长时间没有收到 RTCM 下发

页面会明确提示:

GGA 正常回传,但没有收到差分

并将差分状态判为红色。

8. 配置保存逻辑

当前固件已经针对分页面保存做了防误清空处理:

  • 后端不会先直接覆盖整份 config
  • 本次请求未提交的字段会保留旧值
  • 所有字段校验通过后,才会整体写回并保存

这意味着:

  • 在“基础设置”页保存,不会误清空网络和串口参数
  • 在“网络设置”页保存,不会误清空基础和串口参数
  • 在“串口设置”页保存,不会误清空基础和网络参数

9. 网络与重连策略

9.1 Wi‑Fi 重连

STA 断线后会按原因退避重试:

  • 找不到 AP:更长重试间隔
  • 鉴权失败:更长重试间隔
  • 连接失败:中等重试间隔

这样可以尽量减少 AP + STA 共存时对热点侧稳定性的影响。

9.2 TCP / NTRIP 重连

  • BASE 通过 TCP 连接服务器
  • ROVER 通过 NTRIP 连接 caster
  • 如果长时间没有有效差分数据,会主动断开并交给重连逻辑接管

9.3 前端轮询退避

Web 页面默认每 2s 轮询一次状态。

如果连续失败 3 次:

  • 会临时退避到每 5s 轮询一次
  • 一旦恢复成功,再回到 2s

10. OTA 升级

固件支持通过 release 方式在线检查和升级。

升级流程:

  1. 通过 Gitea API 获取最新 release
  2. 找到 .bin 资产
  3. 下载固件
  4. 写入 flash
  5. 自动重启

当前 OTA 相关地址:

  • Gitea Base URL:http://107.173.157.41:3000
  • Latest Release API:http://107.173.157.41:3000/api/v1/repos/clear/RTKConfig-32C3/releases/latest

11. 构建与烧录

11.1 编译

platformio run

11.2 烧录

platformio run -t upload

如果要指定端口,例如:

platformio run -t upload --upload-port COM12

12. 目录说明

  • src/main.cpp
    • 主程序逻辑
  • platformio.ini
    • PlatformIO 工程配置

13. 现场使用建议

  • 先确认 UM982 的输出模式和串口参数已经配置正确
  • BASE 模式重点检查:
    • 是否有 RTCM 输出
    • 是否成功连上目标服务器
  • ROVER 模式重点检查:
    • NTRIP 地址、端口、挂载点、账号密码
    • 是否有 GGA 回传
    • 是否持续收到差分下发
  • 升级期间不要断电
  • 模式切换后设备会自动重启,页面需要重新连接

14. 品牌信息

Web 页面底部当前显示:

Powered By Clear492@数字植物实验室

Release 通过 API 发布,不保留本地 JSON 模板。
S
Description
RTKConfig-32C3 firmware for UM982 base/rover
Readme
280 KiB
0 Stars 1 Watchers 0 Forks
v2.1.5
Latest
2026-05-28 18:14:10 +08:00
Languages
C++ 100%