English Title: Intelligent ESP32 Drone Racing Gate System
本项目是一套面向无人机竞速与遥控赛车赛事的智能穿越环控制系统。系统以赛场中央高功率 WiFi 接入点为网络核心,将 32 个穿越环节点接入同一局域网,由本地控制中心统一完成事件接收、计时记录、状态监控与联动控制。
系统采用本地判定优先的设计思路:穿越事件在节点侧完成采集与时间记录,控制中心负责汇总、展示和赛事逻辑处理。这样即使现场网络存在抖动,关键判定链路仍然保持稳定可控。
- 已完成 32 个环节点的集中式部署
- 架构支持百级节点扩展
- 同时适用于无人机竞速与遥控赛车通行判定
- 支持激光对管、
RFID、金属探测线圈的复合传感器判定 - 控制中心基于
Django + Django Ninja + Template构建 - 节点侧基于
ESP32 + Arduino实现
- 多节点统一接入:所有节点通过中央 AP 接入同一局域网
- 本地高速触发:激光对管中断记录穿越事件时间
- 复合传感器判定:结合
RFID与金属探测信号提升复杂赛况解释能力 - 集中式控制:本地控制中心统一接收事件并下发状态控制命令
- 即插即用:节点一次预部署后,上电自动联网、自动接入控制中心
- 安全接入:节点首次上线需通过 6 位配对码完成后台绑定,之后使用独立 token 通信
- 自愈恢复:节点具备断线重连、心跳保活、异常重启与降级运行能力
系统采用集中式无线局域网架构。中央 WiFi 设备负责全场覆盖,上位机控制中心作为固定服务地址存在,各个穿越环节点通过 DHCP 动态获取网络地址并主动接入控制中心。
┌──────────────────────────────┐
│ 本地控制中心(Django) │
│ 固定地址:192.168.10.2 │
└──────────────┬───────────────┘
│
┌──────────────▼───────────────┐
│ 中央高功率 WiFi / AP │
│ 网关地址:192.168.10.1 │
└───────┬───────────────┬──────┘
│ │
┌───────▼───────┐ ┌─────▼────────┐
│ 穿越环节点 #01 │ │ 穿越环节点 #32│
│ ESP32 + 传感器 │ │ ESP32 + 传感器 │
│ 灯光 + 音频反馈 │ │ 灯光 + 音频反馈 │
└───────────────┘ └──────────────┘
每个穿越环节点都不是单一触发器,而是完整的赛事终端。节点侧统一接入以下传感器:
- 激光对管:负责高速穿越触发
RFID:负责辅助识别目标身份或区分并发目标- 金属探测线圈:负责感知金属机体经过时的附加信号
节点侧完成事件初判与时间记录,控制中心结合 gate_id、事件时间和复合传感器信息完成进一步归并和赛事逻辑处理。
节点侧程序位于 esp32/gate_node,采用 Arduino 工程结构组织,核心实现包括:
- 激光对管外部中断采集
- 节点身份
gate_id管理 - 固定上位机地址接入
- DHCP 动态获取节点 IP
- 心跳上报与触发事件上报
LCD2004本地状态显示UP / DOWN / OK / BACK四键本地交互WS2812B灯带状态效果MAX98357A + I2S本地音效输出- 激光发射端继电器控制
- Django 控制命令拉取
- 本地状态灯反馈
- 自动重连与异常重启
节点身份不依赖动态 IP,而是依赖固定 gate_id。这使系统在大规模节点部署下仍然便于维护和替换硬件。
详细文档已单独整理:
控制中心基于 Django + Django Ninja + Template 构建,承担以下职责:
- 接收所有节点的心跳与触发事件
- 维护节点在线状态与基础诊断信息
- 执行本地赛事计时与判定逻辑
- 提供裁判席控制页面
- 负责局域网内的指令下发与状态联动
控制中心运行在本地局域网内,作为实时判定的主控入口。云端平台可以承担数据同步、远程查看和历史记录管理,但不参与现场实时判定闭环。
本系统采用“上位机固定地址、节点动态接入”的网络策略:
- 控制中心使用固定 IP:
192.168.10.2 - 中央 AP 负责 DHCP 地址分配
- ESP32 节点自动获取本地地址
- 每个节点通过固定
gate_id上报身份
这种组织方式解决了大规模节点的维护问题。节点不需要逐个手工配置静态地址,只需要一次预烧录并写入 gate_id,之后即可上电自动运行。
为了避免节点侧长期硬编码共享口令,系统在正式通信前增加了配对流程:
- 节点首次启动时基于
gate_id和配对种子生成 6 位配对码 - 裁判席在 Django 控制台录入该配对码后,节点获得独立 API token
- 节点把 token 持久化到本地
NVS,后续重启直接恢复正式连接
- 本地判定优先:事件时间在节点侧记录,不依赖云端时间
- 即插即用:节点通电后自动接入局域网和控制中心
- 自动恢复:网络异常后自动重连,长时间异常时自动重启
- 降级运行:控制中心暂时失联时,节点保留本地声光反馈能力
- 可扩展部署:适合几十到上百个环节点的集中管理
详细的接口、接线、GPIO 和实现约束统一收口在 docs/:
intelligent-esp32-drone-racing-gate-system/
├── README.md
├── esp32/
│ ├── README.md
│ └── gate_node/
│ ├── gate_node.ino
│ └── src/
│ ├── audio.cpp
│ ├── audio.h
│ ├── buttons.cpp
│ ├── buttons.h
│ ├── config.h
│ ├── control.cpp
│ ├── control.h
│ ├── display.cpp
│ ├── display.h
│ ├── diagnostics.cpp
│ ├── diagnostics.h
│ ├── led_effects.cpp
│ ├── led_effects.h
│ ├── network.cpp
│ ├── network.h
│ ├── sensors.cpp
│ └── sensors.h
├── django/
├── docs/
│ ├── api.md
│ └── gpio.md
└── assets/
└── esp32-pinout.jpg
这个项目的价值不在于单个传感器或单块开发板,而在于它把嵌入式节点、局域网通信、赛事控制、复合传感器判定和现场运维组织成了一套可部署系统。
从作品集角度看,它能够清晰体现以下能力:
- 嵌入式节点开发能力
- 多传感器融合与中断驱动能力
- 局域网多节点系统设计能力
- 本地控制中心与 Web 管理界面设计能力
- 面向真实赛事环境的稳定性与容错能力
本项目围绕“高速触发、集中控制、复合判定、稳定运行”四个核心目标展开,形成了一套适合赛事现场部署的智能穿越环控制系统。它既覆盖了节点侧的硬件与固件设计,也覆盖了控制中心的联网组织与赛事控制逻辑,具备明确的工程深度和展示价值。