What Is MAVLink Telemetry?
MAVLink (Micro Air Vehicle Link) is a lightweight binary messaging protocol designed specifically for communication between drones and ground control stations. It transmits real-time telemetry from the drone — GPS position, altitude, attitude, battery state, system health — and allows the GCS to send commands back: mode changes, waypoints, parameter updates, and mission execution.
Without telemetry, you can still fly, but you fly blind to everything the aircraft knows about itself. Telemetry transforms a radio-controlled drone into a monitored, managed system — essential for any autonomous or long-range operation.
MAVLink is the dominant telemetry protocol for ArduPilot, PX4, and most open-source autopilots. It is transport-agnostic: the same protocol runs over serial radio links, UDP, TCP, USB, and Ethernet.
MAVLink Protocol: Version 1 vs Version 2
MAVLink v1
MAVLink v1 uses a simple 8-byte fixed header with 6-byte CRC. Messages are identified by 1-byte message IDs (0–255). The maximum payload is 255 bytes per message.
Header format:
[STX=0xFE] [LEN] [SEQ] [SYSID] [COMPID] [MSGID] [PAYLOAD...] [CRC1] [CRC2]
MAVLink v1 is still widely used because of its simplicity and compatibility with older hardware. All current GCS software supports it.
MAVLink v2
MAVLink v2 extends the message ID space to 3 bytes (16.7 million possible message IDs), enables message signing (authentication), and supports packet-level fragmentation for larger payloads.
Key v2 improvements:
- Message signing: cryptographic HMAC-SHA256 prevents spoofed commands
- Larger message ID space: enables private/vendor message extension without conflicts
- Explicit packet rejection: signed systems reject unsigned packets
Enable v2 on ArduPilot:
SERIAL1_PROTOCOL = 2 (MAVLink 2)
Enable v2 on PX4:
# In QGroundControl parameters:
MAV_PROTO_VER = 2
Most modern telemetry hardware and GCS software defaults to v2 when both sides support it, falling back to v1 for compatibility.
Telemetry Hardware Options
SiK Radio (915/868 MHz)
SiK firmware radios are the standard telemetry solution for ArduPilot and PX4 builds. They operate in the 868 MHz (Europe) or 915 MHz (Americas) ISM band and provide:
- Bidirectional MAVLink link at up to 250 kbps
- Configurable transmit power (typically 20–100 mW)
- Frequency hopping spread spectrum (FHSS) for interference rejection
- Range: 1–5 km at 100 mW with stock dipole antennas
SiK radios come in USB (for ground station) and UART (for drone) form factors. The USB unit connects to the laptop running QGroundControl or Mission Planner. The UART unit connects to the FC's TELEM port.
SiK configuration parameters (via Mission Planner or AT commands):
| Parameter | Typical Value | Notes |
|---|---|---|
| NETID | 25 | Must match on both units |
| BAUD | 57 | 57600 bps |
| AIR_SPEED | 64 | 64 kbps over-air rate |
| TXPOWER | 20 | 100 mW (20 dBm), check local regulations |
| MAVLINK | 1 | Enable MAVLink framing |
| RTSCTS | 0 | Flow control (usually disabled) |
RFD900x
The RFD900x is a higher-performance 900 MHz telemetry modem from RFDesign. It is physically larger and heavier than SiK radios but provides significantly better range and reliability.
Key advantages over basic SiK:
- Up to 1W (30 dBm) transmit power
- Superior receiver sensitivity (-121 dBm)
- Multipoint capability (one air unit, multiple ground units)
- True diversity antenna support
- Range: 40–80 km with appropriate antennas and line of sight
RFD900x is the standard for professional long-range UAV operations. Browse the receiver database to compare telemetry module options.
ESP32 / Wi-Fi Telemetry
The ESP32 microcontroller provides Wi-Fi telemetry at very low cost and weight (~3–5g). It connects to the FC via UART and creates a Wi-Fi access point that GCS software connects to over UDP.
FC UART ↔ ESP32 ↔ Wi-Fi ↔ Laptop/Phone GCS
Advantages: Very cheap ($3–10), extremely light, high bandwidth (up to 1 Mbps effective), can carry video alongside telemetry.
Disadvantages: Limited range (50–200m at 2.4 GHz without external antenna), 2.4 GHz band is congested, no FHSS, no encryption by default.
ESP32 telemetry is excellent for bench testing, tuning sessions, and short-range autonomous development. It is not suitable for long-range or BVLOS operations.
Basic ESP32 MAVLink bridge firmware:
#include <WiFi.h>
#include <WiFiUdp.h>
const char* ssid = "DroneLink";
const char* password = "mavlink1234";
const int udpPort = 14550;
IPAddress groundStation(192, 168, 4, 2);
WiFiUDP udp;
HardwareSerial FCSerial(2); // UART2: GPIO 16/17
void setup() {
FCSerial.begin(921600, SERIAL_8N1, 16, 17);
WiFi.softAP(ssid, password);
udp.begin(udpPort);
}
void loop() {
// FC → GCS:
while (FCSerial.available()) {
uint8_t buf[512];
int len = FCSerial.readBytes(buf, sizeof(buf));
udp.beginPacket(groundStation, udpPort);
udp.write(buf, len);
udp.endPacket();
}
// GCS → FC:
int packetSize = udp.parsePacket();
if (packetSize) {
uint8_t buf[512];
udp.read(buf, packetSize);
FCSerial.write(buf, packetSize);
}
}
Ground Control Station Software
QGroundControl
QGroundControl (QGC) is the official GCS for PX4 and works well with ArduPilot. It provides:
- Real-time map view with vehicle position overlay
- Flight mode switching
- Mission planning and upload
- Parameter editor
- Video stream display
- MAVLink console for debugging
QGC runs on Windows, macOS, Linux, Android, and iOS. The desktop version has the most complete feature set.
Connect QGC to a telemetry radio:
- Plug the USB SiK radio into the laptop
- In QGC: Settings → Comm Links → Add → Serial → select the COM/tty port → 57600 baud
- QGC detects the vehicle automatically
Mission Planner
Mission Planner is ArduPilot's primary GCS. It is Windows-only but offers deeper ArduPilot integration than QGC:
- Full parameter tree with descriptions
- Advanced tuning (autotune, extended tune wizard)
- Log replay and analysis
- Terrain elevation data
- Flight data graphs
Mission Planner can run in WINE on Linux/macOS but the experience is imperfect. Most professional ArduPilot operators use a Windows laptop as their field GCS specifically for Mission Planner.
Try the Calculator
RF Link Budget Calculator
Analyse your RC or video link margin, range, and antenna requirements.
Open CalculatorLink Budget for Telemetry
A telemetry link budget calculates whether the link has enough margin to maintain a connection at the required distance.
The Friis transmission equation gives received power:
P_rx (dBm) = P_tx (dBm) + G_tx (dBi) + G_rx (dBi) - FSPL (dB) - cable_losses (dB)
Free-space path loss (FSPL) at 915 MHz:
FSPL (dB) = 20·log10(d) + 20·log10(f) + 20·log10(4π/c)
= 20·log10(d_km) + 20·log10(915e6) - 147.55
At 5 km distance, 915 MHz: FSPL ≈ 106 dB
For an RFD900x link:
- TX power: 30 dBm (1W)
- TX antenna gain: 2 dBi (dipole)
- RX antenna gain: 2 dBi (dipole)
- Receiver sensitivity: -121 dBm
- Cable losses: 1 dB
Link margin at 5 km = (30 + 2 + 2 - 106 - 1) - (-121) = 48 dB
A link margin of 48 dB is excellent. In practice, trees, terrain, and atmospheric scintillation typically consume 10–20 dB of margin, leaving 28–38 dB of actual margin. This is more than sufficient for reliable operation.
Latency vs. Bandwidth Tradeoffs
Telemetry systems face a fundamental tradeoff between latency and bandwidth:
| Configuration | Over-Air Rate | Latency | Max Range |
|---|---|---|---|
| SiK 900, 9.6 kbps | 9,600 bps | 200–400 ms | 15–20 km |
| SiK 900, 64 kbps | 64,000 bps | 30–80 ms | 5–8 km |
| SiK 900, 250 kbps | 250,000 bps | 10–30 ms | 2–4 km |
| RFD900x, 64 kbps | 64,000 bps | 20–50 ms | 40–80 km |
| ESP32 Wi-Fi | ~500 kbps effective | 5–15 ms | 100–300 m |
For manual flight monitoring, 200–400 ms latency is acceptable — you're not making split-second decisions based on telemetry data. For autonomous missions where GCS commands affect mission execution in real time, lower latency is preferred. For purely logged telemetry (post-flight analysis), bandwidth matters more than latency.
MAVLink Message Types
Understanding the key message types helps you configure logging and diagnose issues:
| Message | ID | Description |
|---|---|---|
| HEARTBEAT | 0 | System alive, mode, arming state |
| SYS_STATUS | 1 | Battery, CPU load, sensor health |
| GPS_RAW_INT | 24 | Raw GPS position, fix type, HDOP |
| ATTITUDE | 30 | Roll, pitch, yaw, rates |
| LOCAL_POSITION_NED | 32 | Local EKF position |
| GLOBAL_POSITION_INT | 33 | Global GPS position |
| RC_CHANNELS | 65 | RC input values |
| BATTERY_STATUS | 147 | Detailed battery data |
| STATUSTEXT | 253 | Text status messages |
| COMMAND_LONG | 76 | Generic command to vehicle |
Use MAVProxy's mavlogdump or a Python script with the pymavlink library to parse and analyze logs:
from pymavlink import mavutil
# Connect to log file:
mlog = mavutil.mavlink_connection('flight.tlog')
# Read messages:
while True:
msg = mlog.recv_match(type='GLOBAL_POSITION_INT', blocking=True)
if msg is None:
break
lat = msg.lat / 1e7
lon = msg.lon / 1e7
alt = msg.relative_alt / 1000 # mm to meters
print(f"Pos: {lat:.6f}, {lon:.6f}, Alt: {alt:.1f}m")
Encrypted Telemetry
MAVLink v2 signing provides authentication but not encryption. For sensitive operations where telemetry data privacy is required, encryption must be added at a different layer.
Options:
-
WireGuard VPN: Run telemetry over a cellular/LTE link through a WireGuard tunnel. Full AES-256 encryption, modest latency overhead (~10ms). Works with any transport that has internet connectivity.
-
Hardware AES encryption: Some telemetry radios offer hardware-level AES-128/256 encryption on the air link. Check your radio's specification sheet — SiK-based radios do not include hardware encryption, but the RFD900x series offers optional encrypted variants.
-
TLS over TCP: When using Ethernet or Wi-Fi MAVLink links, wrap the MAVLink TCP connection in TLS. MAVProxy supports TLS connections via the
--source tls://prefix.
For most hobbyist and research operations, unsigned MAVLink v2 is adequate. Organizations operating under security requirements (defense, critical infrastructure inspection) should evaluate encrypted telemetry options.
Common Debugging Procedures
Link Not Establishing
- Check that NETID matches on both SiK radios (must be identical)
- Check baud rate — FC UART baud must match the radio's configured baud
- Verify MAVLink protocol is enabled on the FC TELEM port (SERIAL1_PROTOCOL = 1 or 2 in ArduPilot)
- Check cable: TX of one device connects to RX of the other (and vice versa)
- Use an FTDI adapter + serial terminal to verify the FC is outputting MAVLink bytes on the TELEM port
High Packet Loss at Short Range
This is usually antenna or cable quality issue. Try:
- Replace antennas (collinear, dipole degradation is common)
- Check SMA connectors for loose center pins
- Check for nearby interference sources (VTX, digital FPV)
- Verify the radio is not sharing a power rail with high-noise devices
Telemetry Drops Out at High Throttle
Almost always power supply noise coupling into the radio module. Add an LC filter or dedicated BEC for the telemetry radio. Also check that the telemetry module ground is connected to FC ground (common ground return).
Browse the antenna database to compare ground station antennas for extending telemetry range.
Frequently Asked Questions
What is the minimum data rate I need for MAVLink telemetry?
The HEARTBEAT message alone (transmitting at 1 Hz) consumes approximately 20 bytes/second. A full telemetry stream with GPS position, attitude, battery, and RC channels at typical update rates uses 2–8 kbps. A 9.6 kbps SiK radio can handle full telemetry streaming comfortably. Higher rates allow more message types and higher update frequencies.
Can I use ELRS for MAVLink telemetry?
Yes. ExpressLRS supports bidirectional MAVLink passthrough via its backpack telemetry feature. You can receive MAVLink telemetry from the drone to the RC transmitter and then forward it to a phone or laptop via Bluetooth or USB. The bandwidth is limited (a few hundred bytes per second) but sufficient for status monitoring. It is not suitable for high-rate logging or video.
How do I view telemetry on my phone without a laptop?
QGroundControl runs on Android and iOS. Connect via USB OTG to the telemetry radio's USB unit, or use an ESP32 Wi-Fi bridge and connect QGC to the Wi-Fi access point. Mission Planner also has a mobile companion app (MP for Android) for basic monitoring.
What is the difference between telemetry baud rate and over-air rate?
The baud rate is the speed of the UART connection between the FC and the radio module — typically 57600 or 921600 bps. The over-air rate is the actual radio frequency transmission speed — typically 9.6–250 kbps. The radio internally buffers and packetizes the serial data. The over-air rate determines range (lower rate = more range but more latency). Setting the UART baud higher than the over-air rate causes buffer overflow and packet loss.
Do I need telemetry if I'm only flying FPV?
For short-range FPV under 1 km with Betaflight, telemetry is optional — the OSD provides the critical information (battery voltage, RSSI, flight time) overlaid on the FPV feed. For autonomous waypoint missions, BVLOS, or any build using ArduPilot/PX4 where you need to monitor mission status and intervene if needed, telemetry is essential.
How do I calculate the maximum range for my telemetry link?
Use the RF link budget calculator to model your specific radio system. Key inputs are transmit power (dBm), antenna gain (dBi) at both ends, frequency (MHz), and receiver sensitivity (dBm). A typical 915 MHz SiK radio pair running 100 mW with 2 dBi antennas provides approximately 20–30 km of telemetry range in open terrain. The RF link budget guide covers the full calculation methodology including fade margin and Fresnel zone clearance.
Was this guide helpful?
Related Articles
Companion Computer Setup for Autonomous Drones (Raspberry Pi, Jetson)
How to set up a companion computer on an autonomous drone — hardware selection, MAVLink connection, MAVROS on ROS 2, DroneKit, computer vision, and power management.
PX4 vs ArduPilot: The Complete Comparison for Drone Developers
A thorough comparison of PX4 and ArduPilot flight firmware — architecture, hardware support, use cases, community, and which to choose.
RF Link Budget Design for Long-Range Drones
How to calculate and design RF link budgets for long-range drones — Friis equation, EIRP, path loss, fade margin, frequency selection, and 50km+ system design examples.