Using ELRS/TFP with MAVLink: How to Integrate MAVLink with a Ground Control Station

ELRS (ExpressLRS) is a great project; however, it doesn't work in all cases—and the main issue isn't ELRS itself. As you may know, ELRS is just a firmware project and doesn't produce any hardware (such as receivers, transmitters, or development boards). Instead, companies like RadioMaster use ELRS and create transmitters and receivers that implement it as a protocol to send messages between a transmitter (remote controller) and a receiver (typically installed on a drone or aircraft).
As a result, several limitations arise. You don’t get the full flexibility that ELRS was designed for, especially since hardware manufacturers implement it in different ways.
One recurring issue we’ve faced during development of the TinkerFlight Ground Control Station is how to send messages (MAVLink, Crossfire, or custom protocols) from the Ground Control Station to a drone via a RadioMaster transmitter with an internal ELRS module. Unfortunately, this isn’t currently possible. There’s no way to send messages to the RadioMaster transmitter so that it simply forwards them to the drone. Like other ELRS transmitters, RadioMaster cannot forward raw messages from the Control Station to the drone at least in the current version (3.5.5).
Options for Forwarding MAVLink over ELRS
1. Custom ELRS Firmware with a WebSocket Server
This approach requires creating custom firmware for the ELRS transmitter module that includes a WebSocket server over WiFi. The idea is simple: the firmware receives and sends data via WiFi between the Ground Control Station and the drone. This custom firmware can be uploaded to any internal or external ELRS module based on an ESP SoC.
2. External ESP-Based Board as a Bridge
Another option is to use an additional ESP32-based board. This board connects to the ELRS module on one side and the transmitter on the other. This external board acts as a forwarder: it receives messages from the ELRS module and relays them to the transmitter. It also starts a WebSocket server to forward MAVLink messages over WiFi to any connected device. In this case, the ELRS firmware doesn't need to be changed, but the approach requires additional hardware.
Both options have reliability concerns and add complexity. That's why we designed an alternative.
TinkerFlight Protocol (TFP)
We believe the ELRS system is becoming overengineered, often requiring multiple intermediate components to communicate between a computer or mobile device and a drone. That’s why we developed the TinkerFlight Protocol (TFP)—a lightweight, open, and fully extensible communication protocol.
TFP is network- and message-protocol agnostic—meaning you can send any message (MAVLink, custom, etc.) and receive exactly what was sent, with no modification or encoding required.
How It Works
All you need are two devices (ESP32/ESP32XX boards or computers) that can communicate over a network like WiFi, LoRa, LTE, or ESP-NOW. These are referred to as RF boards.
Examples:
- Two ELRS receivers (LoRa + ESP32—ideal for basic setups)
- Laptop + ESP32 on the drone
- Two ESP32 boards using ESP-NOW
One RF board is installed on the aircraft, and the other is paired with a device used to control it—whether that’s a transmitter with joysticks, a phone with virtual controls, a laptop, or a custom-built controller.
Message Flow

- The flight controller or control device (remote, laptop, etc.) sends data over UART or WiFi to the connected RF board.
- That RF board sends the message as-is to the second RF board (on the drone or the ground).
- The second RF board forwards the message as-is to the flight controller or ground device.
- Messages can be sent in both directions
This setup supports any protocol:
- Use MAVLink if your flight controller requires it.
- Use TFP's built-in minimal protocol for low-overhead communication.
- Use your own protocol
You can find the source code and examples at https://github.com/TinkerFlight/TinkerFlightProtocol. Feel free to reach out with any questions at hey@tinkerflight.com.