Open-source antweight / beetleweight combat-robot all-in-one controller — an
ExpressLRS receiver, a 6-axis IMU, and a triple brushed-DC ESC on one tiny
board, in the spirit of the Malenki Nano. Built on
the OpenRX-Lite ELRS core (ESP32-C3 + SX1281, 2.4 GHz) and forked from
incutec-hw/OpenRX.
Warning
Prototype — not validated, not fab-ready. This board has open safety-critical issues (uncommanded drive-motor motion at power-up, and the programming interface shares pins with the motor outputs). It drives combat-robot motors including a weapon — do not build or power it without reading the review first. See hardware/REVIEW.md (full design review) and CHANGELIST.md (verified to-do list).
A single 10.00 × 21.50 mm, 6-layer board that replaces the usual RX + 2 drive ESCs + weapon ESC + gyro stack of an antweight robot with one MCU-driven combo:
- Radio link — ExpressLRS 2.4 GHz (Semtech SX1281) for RC control + telemetry, plus the ESP32-C3's own Wi-Fi for OTA config.
- Motion sensing — LSM6DS3TR-C 6-axis IMU (gyro + accel) for heading-hold / self-right / melty-style control in firmware.
- Three brushed-DC motor channels — two drive + one weapon, each a TI DRV8212 H-bridge fed directly from the battery.
- Single-cell-friendly power — buck-boost holds a 5 V rail as the pack sags under weapon load, with a linear 3.3 V logic rail and reverse-polarity protection.
Everything is controlled by the ESP32-C3: RC decode, mixing, gyro stabilization, and the three motor PWM outputs all run on-chip.
+BATT (1–2S LiPo)
│
Q2 AON7407 ── reverse-polarity P-FET
├─────────────► VM ─► DRV8212 ×3 ─► LEFT / RIGHT drive + WEAPON motors
│
U8 TPS63070 buck-boost ─► +5V ─► U4 TLV75533 LDO ─► +3V3 (logic)
│
┌──────────────────────────────────────────────────────────┤
│ │
U1 ESP32-C3 ──SPI──► U3 SX1281 (2.4 GHz ELRS) ─► FL1 BPF ─► link antenna
│ └────► U2 LSM6DS3TR-C IMU ESP Wi-Fi ─► AE1
├── 3× PWM ─► DRV8212 IN/EN (U6 LEFT, U10 RIGHT, U11 WEAPON)
├── ADC ──── VSENSE (battery voltage divider)
└── GPIO ──► WS2812B status LED (D1)
| Block | Part | Notes |
|---|---|---|
| MCU | Espressif ESP32-C3FH4 (U1, QFN-32) | RISC-V, 4 MB embedded flash, 2.4 GHz Wi-Fi |
| Link radio | Semtech SX1281 (U3) | 2.4 GHz, internal DC-DC, 52 MHz TCXO (OSC1), BPF FL1 (2450FM07D0034T) → link antenna |
| IMU | LSM6DS3TR-C (U2) | 6-axis accel+gyro, 4-wire SPI on the shared radio bus, dedicated CS |
| Motor drivers | 3× TI DRV8212DSGR | U6 = LEFT drive, U10 = RIGHT drive, U11 = WEAPON; PH/EN mode; VM = +BATT |
| Buck-boost | TI TPS63070 (U8) | +BATT → 5 V; holds the rail across the 1S–2S sag range |
| LDO | TLV75533PDQNR (U4) | 5 V → 3.3 V logic rail |
| Reverse protection | AON7407 P-FET (Q2) | on +BATT |
| Status LED | WS2812B (D1) | addressable RGB |
| Battery | 1–2S LiPo (≤ 8.4 V) | DRV8212 VM is 12 V abs-max — 2S is the hard ceiling; 3S destroys the drivers |
| Board | 10.00 × 21.50 mm, 6-layer | components both sides |
Solder pads carry the external interface (silk in parentheses):
| Pad | Net | Function |
|---|---|---|
+ / – |
+BATT / GND |
Battery in (1–2S) |
5U |
+5V |
5 V buck-boost output (servo / accessory) |
GND |
GND |
Ground |
S |
GPIO | Signal / spare control pad |
BOOT |
GPIO 9 | Hold low at power-up for UART download mode |
R / T |
UART0 RX / TX | Flashing & serial console (also the right-drive lines — flash with motor battery OFF) |
Motor outputs (OUT1/OUT2 of each DRV8212) and the weapon channel land on the large copper pads along the board edge.
| GPIO | Pin | Function | GPIO | Pin | Function |
|---|---|---|---|---|---|
| 0 | 4 | VSENSE (battery ADC) | 8 | 14 | WS2812 LED (strap) |
| 1 | 5 | Radio DIO1 | 9 | 15 | BOOT (strap) |
| 2 | 6 | IMU CS (strap) | 10 | 16 | WEAPON_EN |
| 3 | 8 | Radio BUSY | 18 | 25 | LEFT_PH (USB D−) |
| 4 | 9 | SPI MOSI | 19 | 26 | LEFT_EN (USB D+) |
| 5 | 10 | SPI MISO | U0RXD | 27 | RIGHT_PH |
| 6 | 12 | SPI SCK | U0TXD | 28 | RIGHT_EN |
| 7 | 13 | Radio NSS | GND/EP | 33 | GND |
Important
The drive-motor enables currently sit on the USB (GPIO18/19) and UART0 (U0RXD/U0TXD) pins, which are driven high at reset — enabling both drive motors before firmware runs. The planned fix re-maps PH↔EN onto reset-quiet pins and gates the H-bridges behind a default-off arm switch. Do not treat this pin map as final — track it in CHANGELIST.md.
- UART: hold
BOOTlow, power-cycle, flash over theR/T(U0RXD/U0TXD) pads with the motor battery disconnected (these pins also drive the right motor). - Wi-Fi OTA: ExpressLRS SoftAP, after an initial wired flash.
The ELRS link runs upstream ExpressLRS (Unified_ESP32C3_2400_RX, ≥ 3.5.0).
The combat-robot mixing, IMU stabilization, and motor-PWM control are application
firmware layered on top (separate; not in this hardware repo).
AntAIO began as a fork of incutec-hw/OpenRX
— the OpenRX-Lite ELRS core (ESP32-C3 + SX1281) extended into a combat-robot
all-in-one. The other OpenRX receiver variants are not part of this repo.
AntAIO/
├── hardware/ AntAIO board: ELRS RX + IMU + triple brushed ESC
│ ├── AntAIO.kicad_{pro,sch,pcb}
│ ├── esp32c3_sx1281_lite.kicad_sch ELRS core sub-sheet
│ ├── REVIEW.md full design review (pin/datasheet/electrical)
│ └── DESIGN.md
├── shared/libs/ project-local KiCad symbols / footprints / 3D models
├── shared/elrs-targets/ ExpressLRS hardware-target JSON
├── images/ board renders
└── CHANGELIST.md verified open / done items
KiCad 9/10; project-local libraries only (no global dependencies). Board renders
are produced with the shared render_board.py tool (vias + solder paste stripped,
transparent square).
Hardware: CERN Open Hardware Licence Version 2 — Strongly Reciprocal (CERN-OHL-S-2.0). See LICENSE. Firmware: MIT.

