ARevoy/oms150s-control

GitHub: ARevoy/oms150s-control

基于 ESP32 和 nRF24L01+ 的 VEVOR OMS150S 拖曳马达备用无线控制器,通过逆向原生 2.4GHz 通信协议实现完整的配对与驾驶功能。

Stars: 1 | Forks: 0

# OMS150S 控制 **一个冗余的 ESP32 控制器,专为 VEVOR OMS150S 拖曳马达设计 —— 在关闭原装遥控器的情况下进行配对、连接和驱动。** [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) ![Platform](https://img.shields.io/badge/platform-ESP32%20%2B%20nRF24L01%2B-blue) ![Protocol](https://img.shields.io/badge/protocol-MAVLink%20v1-6aa84f) ![Status](https://img.shields.io/badge/status-bench--proven-brightgreen)
原装遥控器是一个没有备用零件的单点故障源——一旦丢失,价值约 1000 美元的马达就成了废铁。这是一个极简、独立的备用控制器:一个便宜的 ESP32 + nRF24,可以在马达原生的 2.4 GHz 链路上**从零开始配对、连接并控制转向/油门**。完全通过 RF 抓包构建——没有拆解任何设备。 本仓库是**精简的功能性 MVP**。复现控制所需的所有内容都在同一个文件夹中。(另一个仓库包含了完整的逆向工程故事、死胡同和分析——这里只提供可用的成果。) ## 包含内容 ``` README.md you are here PROTOCOL.md self-contained protocol reference (RF, framing, CRC, pairing, drive) AGENTS.md rules for writing your own parsers / injectors / sims schemas/packets.ksy Kaitai Struct byte-map of every frame (the machine-readable schema of record) diagrams/state-machine.md link lifecycle + connect & two-packet-mode sequence diagrams (Mermaid) DISCLAIMER.md safety & scope — read before transmitting firmware/ mvp_control/mvp_control.ino ⭐ the MVP: pair -> connect -> drive + native modes, clean & commented op_control_full/op_control.ino the full proven sketch (heading readout, capture tools, all pairing modes) ``` ## 硬件 一个 **ESP32 (WROOM)** + **nRF24L01+PA+LNA** 模块。 | nRF24 引脚 | ESP32 引脚 | |---|---| | CE | GPIO 4 | | CSN | GPIO 17 | | SCK | GPIO 18 (VSPI) | | MISO | GPIO 19 (VSPI) | | MOSI | GPIO 23 (VSPI) | | VCC | 3V3 — **在 VCC/GND 之间并联一个 10 µF 电容** | | GND | GND |

ESP32 to nRF24L01+PA+LNA wiring: GPIO4→CE, GPIO17→CSN, GPIO18→SCK, GPIO19→MISO, GPIO23→MOSI, 3V3→VCC (with 10µF cap), GND→GND

## 五步复现 1. 按照上文连接电路。烧录 `firmware/mvp_control`(使用 Arduino IDE 或 `arduino-cli compile/upload --fqbn esp32:esp32:esp32`)。它不需要任何外部库——通过原生 SPI 直接驱动 nRF24。**在烧录前关闭 Serial Monitor**(否则会提示“Resource busy”)。 2. 打开串口监视器,波特率设为 **921600**。(在 macOS 上,打开端口会重置 ESP32——连接时出现短暂的开机瞬态是正常的。) 3. **建立连接** —— 有两种方式: - `g` — **从零开始单独配对:** 将*马达*置于配对模式(按住其按钮);马达会为您分配一个全新的链接。不需要原装遥控器。 - `P` — **旁路配对:** 嗅探真实的遥控器↔马达配对过程并接管该链接。 4. `H` — **连接**并确认接管(您需要链接状态为 `0x03` 并且 ACK 中有实时的遥测数据)。 5. `L` / `R` **转向**,`+` / `-` **油门**,`O`/`F` 解除/激活保险,`S`/`B`/`Y` 用于定点锁定/航向/巡航。**请确保螺旋桨离开水面。** ``` flowchart TD A["Flash mvp_control
serial @ 921600"] --> B{"Get a link"} B -->|"g · motor in pair mode"| C["SOLO-PAIR
motor mints a link to us"] B -->|"P · trigger a real pairing"| D["SIDE-PAIR
sniff & adopt the assignment"] C --> E["H · connect
status 07 → 03"] D --> E E --> F["Drive: L / R / + / -"] E --> G["Modes: O·F arm · S·B·Y hold"] style C fill:#2b6cb0,color:#fff style D fill:#2b6cb0,color:#fff style E fill:#2f855a,color:#fff ```
所有串口命令 | 按键 | 操作 | |---|---| | `g` | 从零开始单独配对(马达处于配对模式) | | `P` | 旁路配对(嗅探实时配对过程) | | `H` | 仅连接 —— 验证接管 + 打印遥测数据 | | `L` / `R` | 连接 + 向左 / 向右转向 | | `+` / `-` | 连接 + 油门加大 / 减小 | | `O` / `F` | 原生模式:马达开启 (arm) / 关闭 | | `S` / `B` / `Y` | 原生模式:定点锁定 / 航向 / 巡航(触发 → 保持 20 秒 → 取消) | | `A b,b,b,b,b` | 设置 op-link 地址 (hex) | | `C nn` | 设置 op-link 基础通道 | | `?` | 状态 |
## 工作原理(简述) 马达的链接是 nRF24 Enhanced ShockBurst,在轻薄的 `5A ` 包装器内部承载着 **MAVLink v1**。**建立连接**的方式是流式传输(带有*递增*序列号的)心跳包(msgid 0),直到马达的状态翻转为 `07 → 03`;**驱动**则使用 command_short(msgid 183)。破解黑盒分析的关键校验和是 **CRC-16/MCRF4XX + 每个消息的 `CRC_EXTRA` 字节**。从零开始配对之所以有效,是因为马达**会自行分配链接,并在 ACK 中将其传回**——因此完全不需要伪造其不可伪造的 keyed-MAC 尾部。完整的字节级细节请参阅 [`PROTOCOL.md`](PROTOCOL.md)。 ## 安全与范围 仅限您自己的设备。**在发射之前先接收并观察。进行任何油门测试时,请确保螺旋桨离开水面。** 马达在失去所有遥控器连接时会停止——这是一种死人开关(dead-man)安全特性,您的心跳包维持了它的运作。完整文本请参阅 [`DISCLAIMER.md`](DISCLAIMER.md)。 ## 许可证 [MIT](LICENSE) —— 使用它,fork 它,在它的基础上构建,随心所欲地重新授权您的更改。感谢注明来源,但非必须。
标签:ESP32, nRF24L01, UML, 云资产清单, 无人机协议, 无线通信, 物联网, 硬件控制, 逆向工程