ELRS USB

ESP32-S3 firmware that turns any ExpressLRS receiver into a USB game controller. No drivers. No software. Just plug and fly.

Download Latest View on GitHub

Features

Everything you need to go from receiver to game controller.

1000 Hz USB polling

SOF-driven HID reports at 1 kHz with change-only transmission for minimal latency.

16-channel CRSF decoder

Full ExpressLRS CRSF protocol support at 420 kbaud with CRC validation and link statistics.

Dynamic HID descriptor

Up to 8 axes, 32 buttons, and 4 multi-position switches. Descriptor rebuilds on profile switch; USB re-enumerates automatically.

Web configurator

Built-in WiFi AP with captive portal. Configure channel mappings, device settings, and OTA updates from any browser.

Named radio profiles

Store up to 10 radio configs in NVS flash. Switch between profiles and the HID device adapts instantly.

No drivers needed

Standard USB HID joystick. Works out of the box on Windows, macOS, Linux, and Android.

Web Interface

Configure everything from your browser. Connect to the built-in WiFi AP and you're in.

10.0.0.1
Radio configuration view showing 16 channels with type selection, live values, and enabled/disabled panes
Firmware update view showing version, build hash, and upload button
Device settings view with WiFi, UART, and LED configuration fields
Joystick Monitor application showing the device recognized as a USB HID gamepad

Radio Configuration

Map each of the 16 CRSF channels to axes, buttons, or switches. Live values update in real time via SSE.

Hardware

Two tiny boards, four wires, and an optional 3D-printed case.

What You Need

ESP32-S3 Super Mini development board

ESP32-S3 (super mini, waveshare zero, ...)

Compact dev board with USB-C, built-in antenna, and all the required GPIO.

ExpressLRS 2.4 GHz mini receiver

ELRS 2.4 GHz Mini RX

Any ExpressLRS-compatible 2.4 GHz receiver in the mini form factor.

Wiring

Just four connections between the ESP32-S3 and the ELRS receiver.

Wiring diagram showing connections between ESP32-S3 and ELRS receiver
ESP32-S3ELRS RX
5V 5V
GND GND
GPIO 13 RX
GPIO 12 TX

3D-Printed Enclosure

A compact snap-fit case with a honeycomb ventilation lid.

3D-printed enclosure, showing honeycomb lids
3D-printed enclosure open, showing ESP32-S3 and ELRS receiver mounted inside

Status LED

A single WS2812 LED shows the device state. The diagram below maps every state and transition.

boot RC data link lost WiFi init WiFi init client joins timeout off upload done auto-resume ELRS any state can transition to Error Initializing ELRS Waiting ELRS Connected WiFi Waiting WiFi Connected WiFi Stopped OTA Update Error

How It Works

Three steps from zero to flying.

1

Flash

Download the firmware and flash it to any ESP32-S3 board using the ESP-IDF tool or the web flasher.

Get the firmware →
2

Bind

Wire an ExpressLRS receiver to the UART pins, power it up, and bind it to your radio transmitter.

3

Fly

Plug the USB into your PC. The device appears as a native joystick. Open your sim and go.

Tech Specs

The numbers behind the performance.

USB Polling Rate
1000 Hz
CRSF Baud Rate
420,000
Channels
16
Axes
Up to 8
Buttons
Up to 32
Radio Profiles
Up to 10
OTA Updates
Dual-partition
Platform
ESP32-S3
Compatibility
Win / Mac / Linux
Protocol
CRSF v3

Performance

Measured with GamepadLA at 1000 Hz polling rate.

=== Polling Rate ===
Average: 1000.85 Hz
Median:  999.00 Hz

=== Refresh intervals ===
Minimal interval:   0.96 ms
Median interval:    1.00 ms
Average interval:   1.00 ms
Maximum interval:   4.00 ms
Jitter (StdDev):    0.47 ms

=== Outliers Report ===
Transition Artifacts (isolated spikes) removed: 132
Jitter Outliers (quantile filter) removed: 146