Rotorflight dongle

The phone app on any Rotorflight helicopter, whatever receiver flies it

The LDRC Rotorflight (and simulator) dongle

This very tiny dongle gives you easy control of a Rotorflight helicopter's configuration without the official configurator — everything except flashing Rotorflight itself. Everything is done from your phone, over Bluetooth or WiFi. Android now, and iPhone and iPad through Apple’s TestFlight — join the beta here. It is with Apple for App Store review.

It vastly simplifies the initial set-up and the tuning, and puts the tasks into a logical sequence that is checked off as you complete each one. It replaces rather baffling jargon with plain English that ordinary people can understand, underlines the important terms so that a finger on one brings up an explanation, and every screen has its own help.

Two jobs, one small board. Besides the Rotorflight app on any helicopter, the dongle is also the interface between a receiver and a flight simulator on your computer: it appears as a USB joystick, and it works out for itself whether the receiver speaks CRSF, SBUS, IBUS or PPM. You choose which job it does on one card in the app.

In a hurry? The whole thing fits on one page: the one-page guide, or print it as a PDF to keep with the model.

The dongle: a bare XIAO ESP32-S3 with its antenna, wired by a four-wire lead to a RadioMaster Nexus-X, with the USB-C cable in the Nexus
The dongle wired to a Nexus-X: the four-wire lead into a port, and the USB-C cable from the flight controller
The app's home page on a dongle
What the app shows when it is on a dongle

What it does

One app, one firmware. The same board with a radio fitted is the LockDown receiver, which does all of this and flies the model. The dongle knows it is a dongle because it finds no radio when it starts.

What you need

How to use it

Blades off, or motor unplugged, before you touch anything in the app. Setting up is done on the bench, never with the rotor turning.

Power. The dongle takes its 5 V from the flight controller through its lead — never from the USB cable, and never from a phone charger, power bank or computer. The dongle drives the USB cable, so it puts 5 V down it, and most flight controllers feed USB power into their own 5 V rail: a second supply would meet the flight controller's head-on.

  1. Plug the lead into a spare UART on the flight controller — on a Nexus, port B or C, not A.
  2. If you have one, add the USB cable from the flight controller's USB socket to the dongle's. Short, and one that carries data. By USB there is nothing to set, and the app can do everything the computer program can.
  3. No USB cable? Most things still work by the lead alone; a few need USB (the black box, the command line, factory reset). Rotorflight has to be told where the dongle is: once, set that port to MSP 115200 — in the official configurator, or in the app's own Ports page if you can borrow a USB cable for the first visit.
  4. Open the RXV2 app. It searches for dongles and receivers nearby and switched on; tap yours and follow what the screen says. If it finds none, it offers a demonstration, so you can see the whole thing before you buy a single part.
  5. At home, give it your WiFi (Setup → WiFi). Everything is quicker over WiFi. At the field it uses Bluetooth alone, and needs nothing else.

Safety. The dongle asks the flight controller, several times a second, whether the model is armed. The moment it is, the app refuses to change anything and the dongle switches its Bluetooth and WiFi off, so nothing can interfere with the radio link. (A LockDown receiver watches its own arming channel and does the same.) Only with the model disarmed can the dongle and the transmitter be used at the same time.

On a Nexus the Ports page names the sockets as printed on the board: Port A, Port B, Port C, TELEM and S.BUS. Other boards show the socket numbers printed on them (UART 1, UART 2 and so on).

The app's Ports page on a Nexus-X, with Port A set to receiver and TELEM to ESC telemetry
The Ports page on a Nexus-X: Port A the receiver, TELEM the ESC's telemetry

Simulator interface

Surprisingly perhaps, the same dongle is also the interface between one of your receivers and a simulator on the computer, Windows or Mac. Choose Simulator interface on the dongle’s Role card in the app, then use the same four-wire lead with the flight-controller end moved to the receiver: the receiver’s signal output to D5, its 5 V to the dongle’s 5V pin, ground to ground. A USB cable to the computer powers the whole rig — no battery, no flight controller — and the computer sees a joystick.

It recognises CRSF, SBUS, IBUS and PPM by itself; the app says which it found and how many channels arrived. Which stick drives which axis, reversing, the spool-up realism and the camera keys are all on the app’s Simulator pages.

A LockDown receiver needs none of this: it plugs into the computer on its own and flies the simulator from your own transmitter. This role is for someone else’s receiver — or for when all your own are in helicopters and the spare board is a dongle.

Like it? The receiver needs no dongle

The dongle is the little brother of the LockDown receiver: the same brain with the radio fitted. The receiver does everything on this page and flies the model, so with a LockDown receiver and transmitter there is no dongle to fit at all, and no spare flight-controller port used up. It also updates itself over the air, and the same receiver flies a PC simulator from your own transmitter. The whole system is free and open source — roughly £35 of parts for a receiver and £120 for a transmitter — and the V2 receiver works with the original V1 transmitter, which is on GitHub too.

The port and its pins

The dongle's lead carries the same four pins as the Nexus port, in the same order, so it plugs straight in. Building your own? This is the order, printed on the Nexus-X left to right with EXT-V on the left:

Nexus port pinSignalXIAO pinWire colour
on the lead supplied with the Nexus
RXFlight controller listeningD6White
TXFlight controller talkingD5Green
+5 V from the flight controller5VRed
GroundGNDBlack
A Seeed XIAO ESP32-S3 beside the Nexus four-way lead, its plug on one end and four bare wires on the other: white, green, red and black
Everything a dongle is: the board, and the lead that came with the Nexus. The plug is already fitted — only the four bare ends need soldering.

Easiest of all: use the four-way lead that came in the box with the Nexus. One end already carries the plug that fits the port, so there is nothing to make up — strip the four bare ends and solder them to the board: white to D6, green to D5, red to 5V, black to GND.

The Nexus-X manual's pin order for a port: RX, TX, +, minus
The Nexus-X manual: RX, TX, +, − left to right, viewed with EXT-V on the left

Check the colours on your own lead before you solder. Those four are right for the lead that came with my Nexus, but there is no guarantee another one is wired the same way, and pigtails from other suppliers certainly are not. Read the pin labels beside the port, or the manual, and check with a meter before the first power-up. Getting + and − the wrong way round can destroy the flight controller.

FlyDragon Pro: the GPS port, or RX2/TX2

A FlyDragon Pro gives you two good places, and either works — pick whichever suits your model. The six-pin GPS port on the end of the case has everything on one plug, so it is one cable to make up. Or the RX2 and TX2 pins along the side, which take ordinary DuPont plugs: their + pins measured 5 V on mine. Not the servo pins (CH1–3, TAIL): their + carries the servo voltage, up to 8.4 V, which would destroy the board. Meter whichever + you use before connecting.

FlyDragon GPS portBoard pinOn my lead
5.0V5Vred → red
RX5 (the FlyDragon listens)D6white → green
TX5 (the FlyDragon talks)D5green → white
SCL, SDAnot used
GNDGNDblack → black

The rule, whatever the colours: the controller’s RX goes to D6, its TX to D5. The plug is a 6-pin JST-GH (1.25 mm); buy it ready-made with leads and cut off SCL and SDA. Go by the pin names printed on the case, not by wire colours — and check the 5.0V pin reads 5 V on a meter first.

On RX2/TX2 it is the same rule — RX2 to D6, TX2 to D5, + to 5V, − to GND — and the port is UART2.

Then in Rotorflight, Ports tab, UART5 (or UART2): MSP at 115200 for a dongle; or Serial RX for an LDRC receiver, with the receiver type set to CRSF (the FlyDragon’s own receiver is on UART1).

Making your own: the firmware

The dongle is a bare Seeed XIAO ESP32-S3 and four wires — the pin table above is the whole of the wiring. This is how to put the software in.

Attach the aerial. The little aerial in the box with the board presses onto the tiny gold socket on the top of it. Without it the Bluetooth and WiFi reach about an arm’s length — the board works, but only from right next to it. Easy to forget; I did.

You need a USB-C cable that carries data, not just power: a charge-only lead is the commonest reason a new board never appears.

The easy way: one click, in your browser

You do not have to touch a command line at all. Plug the chip into a computer, open the flasher and press one button — the browser writes the firmware straight into it. Nothing to install, nothing to download, nothing to keep in the right order. It erases as it goes, so the very same button also puts a board that is already in use back to exactly as it was when new.

Flash a chip from your browser →

Chrome, Edge or Opera, on a desktop or laptop. Safari and Firefox cannot do it, and nor can a phone.

By hand: five ready-made files

Only if you would rather do it yourself, or your browser cannot.

Nothing to compile, and no developer tools beyond one small program. Works on Mac, Windows and Linux.

  1. Install esptool, Espressif's flashing utility. With Python already on the machine:
    pip install esptool
  2. Download these five files into one folder, from messiter.com/rxv2/release/latest/ — they are always the current build:
  3. Plug the board in and put it into flashing mode: hold B, tap R, let go of B. A brand-new chip will do it without the buttons, but a board that already has our firmware will not — the firmware takes the USB socket over for its own use, so no port appears at all. Doing the buttons every time always works — and you will know it has: the yellow light goes out (a red one may stay on — that is the charger, ignore it). It then shows as /dev/cu.usbmodem… on a Mac, COM3 or similar on Windows.
  4. Write all five in one go, from that folder. Put your own port in place of the one here:
    esptool --chip esp32s3 --port /dev/cu.usbmodem101 --baud 921600 \
      write_flash -z --flash_mode dio --flash_freq 80m --flash_size 8MB \
      0x0 bootloader.bin \
      0x8000 partitions.bin \
      0xe000 boot_app0.bin \
      0x10000 firmware.bin \
      0x670000 littlefs.bin
    Every one of the five must report Hash of data verified. If one does not, run it again before going on.

The offsets matter. littlefs.bin at 0x670000 holds every page you see in the app. Leave it out and the dongle runs but its screens are blank.

If the board never appears as a port: try a different USB-C cable first — the orange charging light comes on even with a charge-only lead, so power is no proof of data. If it still will not show, hold the B (boot) button, tap R (reset), then let go of B; the port appears and you can flash as above.

Or build it yourself from the source

Everything is on GitHub under the GPL: github.com/Mmessiter/LDRC_V2. The receiver and dongle firmware is the RXV2 folder — one program does both jobs. With PlatformIO installed:

git clone https://github.com/Mmessiter/LDRC_V2.git
cd LDRC_V2/RXV2
pio run -e xiao_s3_ota -t upload      # the program
pio run -e xiao_s3_ota -t uploadfs    # the app's pages

Then: first switch-on

There is nothing to configure. A board with no radio chips on it works out for itself what it is: wire it to a flight controller and it becomes a dongle; feed it a receiver's signal on D5 instead and it becomes a simulator interface.

  1. The USB port goes quiet after flashing. That is normal — it is not the sign of a failure.
  2. The board raises its own WiFi network, called Untitled. Join it and open 192.168.4.1 to give it a name and your WiFi details, or simply connect to it from the phone app over Bluetooth.
  3. After that it updates itself — over the air, from this site. You should not need a cable again.

What a dongle cannot do

It has no radio, so it does not fly or bind. Live channel bars and flight records belong to the receiver, not the dongle. Everything about setting up and tuning Rotorflight is there.

Want the rest as well? The LockDown receiver does everything the dongle does and also flies the model: radio link, telemetry on the transmitter, flight records, and the simulator from your own transmitter with no dongle at all.

A dongle and a LockDown receiver can both be wired to one flight controller. Connect the phone to only one of them at a time.