ExpressLRS is an affordable open source RC system that offers ultra low latency and long range. In this tutorial I will show you how to setup ExpressLRS 2.4GHz transmitter module and receivers with TX16S radio and Betaflight. And how to flash the latest ELRS firmware.
This guide works for Happymodel (ESTX24, PP/EP1/EP2), as well as BetaFPV ELRS Nano TX and RX.
New to ExpressLRS? Take a look at this article, it explains the advantages of ExpressLRS over other radio systems, and why I prefer to use 2.4GHz over 900MHz.
ExpressLRS 2.4GHz Hardware Selection
|Happymodel ESTX24 TX||Happymodel ESTX24-Lite TX||BetaFPV ELRS Nano TX|
It comes with a case (JR size), coax cable with SMA connector and an onmi-directional antenna (not shown).
The TX module plugs into the external JR module bay, and it’s compatible with radios such as Radiomaster TX16S, Jumper T16, and Frsky X9D+.
The ES24TX-Lite works for the Jumper T-Lite. Happymodel is currently working on another version for other smaller radios with “Lite style” module bay such as the TBS Tango 2.
The other option is BetaFPV’s ELRS Nano TX, see my review here. It’s designed for radios with Nano module bay, but with an adapter it can also fit in standard full size JR module.
TX Antenna Upgrades
Stock antenna works fine, but if you are trying to push range you can try these higher gain antennas:
|VAS Diamond||TrueRC True-MOX||Turbowing Fishbone|
Translucent heatshrink would be useful for the RX, 14-15mm wide should do fine: https://oscarliang.com/product-1×45
The main differences between PP, EP1 and EP2 are the processor and antenna: PP has STM32 while EP1 and EP2 has ESP8285. These chips should have similar performance, but the ESP8285 has WiFi capability while the STM32 chip doesn’t. That means you can flash the EP1 and EP2 through WiFi, and the PP only supports firmware update through Betaflight passthrough.
The EP1 is the same as the EP2 except it has a U.FL/IPEX1 connector for an external antenna, while the EP2 has a compact built-in ceramic antenna.
- Size: 10mm*10mm*6mm
- Weight: 0.47g
- Processor: STM32L432
- SMD Ceramic Antenna
- Size: 10mm*10mm*3mm
- Weight: 0.42g
- Processor: ESP8285
- Onmi antennas (40mm/90mm length)
- Size: 10mm*10mm*6mm
- Weight: 0.44g
- Processor: ESP8285
- SMD Ceramic Antenna
Size comparison to TBS Crossfire Nano and Frsky R-XSR:
The other receiver brand option is BetaFPV’s ELRS Nano RX:
Why Flash Latest ExpressLRS Firmware?
You should flash the latest firmware to your ELRS TX and RX when you first get them.
Yes, they should already have the ELRS firmware installed in factory, but that might be the old stock firmware (including the firmware files they provide on the product page). Some important features and Binding Phrase are not set. You have to flash firmware to make sure you’ve enabled these settings.
Also ExpressLRS is a constantly evolving firmware, every update includes many bug fixes and improvements. Keeping up with the latest version will protect you from potential issues.
Flash Latest OpenTX
If your OpenTX version is older than 2.3.12, then you will need to flash OpenTX.
Updating OpenTX firmware on your radio allows you to flash the ELRS firmware to the transmitter module from the radio, and get CRSFShot working. If you are new to this, here is a step by step guide on how to flash OpenTX.
I will try to summarize it here.
Get latest OpenTX Companion here, you will need 2.3.12 or newer: http://www.open-tx.org/downloads
Go to Edit Settings, and select the options you want.
Click the “Download” button on the left, and click “Check for updates” on the pop up window, “Latest Download Version 2.3.12” should appear. Download firmware and save it somewhere.
Put your radio in bootloader mode.
Click on the button “Flash firmware to radio” on the sidebar, load the firmware we just downloaded and click “Write to TX“.
When flashing is done, unplug USB cable and restart your radio.
If you also get an “SD card content” warning, you should download the new SD Card content here (find the link for your radio, and get the latest file): https://downloads.open-tx.org/2.3/release/sdcard/
Make a backup of your current SD card content first.
Once downloaded the SD card content, plug in the USB cable to your TX16S, and select “USB Storage” to access the SD card inside the radio (or you can just take it out of the radio). Copy the files over to your SD card. If you don’t see the prompted window when you plug in the USB cable, See this post, you should sett that option to “ASK”.
Install ExpressLRS Configurator
The Configurator lets you build and compile firmware for the receivers and transmitter.
Download it here: https://github.com/ExpressLRS/ExpressLRS-Configurator/releases
For Windows: ExpressLRS-Configurator-Setup-X.X.X.exe
Download ELRS LUA Script
The LUA script allows us to setup ExpressLRS like changing radio link settings, binding receivers to transmitter, and updating TX module firmware over WiFi.
It’s not included in the standard OpenTX SD card content yet, so we have to grab it here and put it in the SD card:
When it’s saved, make sure the file has the “lua” extension and not “txt”.
Put it in the radio SD card, in this directory: \SCRIPTS\TOOLS\
Alternative download method: You can also find the LUA script here, https://github.com/ExpressLRS/ExpressLRS/wiki/. Make sure you right click the link to “ExLRS Lua Script”, and “Save link as”.
Compile and Flash TX Firmware
You can flash the TX module using one of these methods: USB/UART or WiFi. For Happymodel, WiFi is easier, for BetaFPV, USB/UART is easier.
Building ELRS TX Firmware
Use the ExpressLRS Configurator to build the firmware for your TX module.
Under Device Target, select the brand, and device. In the case of Happymodel, it would be:
- Happymodel 2.4 GHz
- HappyModel ES24TX 2400 TX
Let me explain what some of the settings mean.
Binding Phrase – basically like your VTX channel number, you should let people who you fly with know about your binding phrase, so they don’t accidentally use the same phrase and cause problems. It should be a unique phrase that you can remember, and it’s not meant to be a password or secret.
I usually enable the following options for my freestyle quad, you might want different options enabled for your particular application. You can also click on the question mark to learn about them.
In a nutshell:
- NO_SYNC_ON_ARM: Racing = Enable; Long Range = Disable; Not sure? Just disable it.
- HYBRID_SWITCHES_8: by disabling it will make all your switches 2-position. If you want to use 3-position switches, enable this, but note that your arm switch (AUX1) would still be 2-position
- Enable Telemetry: I don’t use telemetry as I have Betaflight OSD
500Hz mode is enabled by default so there is no need to select it anymore.
Flash TX Firmware via WiFI
In the ExpressLRS Configurator, under Flashing method, select WiFi.
When you are ready, click the BUILD button (not Build and Flash).
It can take a few minutes. After the configurator finishes building, a windows should pop up containing the firmware file named “firmware.bin“, copy it to somewhere you can find easily later.
Plug in the TX module to your radio module bay and power on radio.
On your radio, setup a new model profile, in Model Setup, enable External RF and select CRSF in Mode.
Go to System settings, Tools, and select ELRS. This is the LUA script we grabbed from Github earlier.
After executing ELRS LUA script, you might get a “Version Mismatch” error, just ignore it for now and click “Force to use“.
Select “WiFi Update” and leave the radio powered on.
Go to your computer’s WiFi network, and join the network “ExpressLRS TX Module“. The WiFi password is: expresslrs
Open browser and go to 10.0.0.1
Click “Choose File” and select “firmware.bin” generated from the ExpressLRS Configurator earlier.
Click Update. When successful, the browser should return “ok” on the screen.
Flash TX Firmware via USB/UART
Plug in the USB cable to the TX module, a new COM port should appear on your computer.
In the ExpressLRS Configurator, under Flashing method, select UART. When you are ready, click the BUILD and FLASH button (not Build). The flashing will take a few minutes.
I found the BetaFPV TX module to be plug and play, however with the Happymodel TX module, it requires an extra step for UART flashing to work. On the TX module board, there are 6 jumpers, by the default the middle two are bridged. When flashing via USB/UART, you should move the jumpers down to the bottom two pins.
Also make sure to install the cp210x drivers if you haven’t already.
Connect RX to FC
Here’s the pin-out of the PP, EP1 and EP2 receivers. Connect TX and RX pins to any spare UART on your flight controller. DO NOT use soft-serial. Connect TX to RX, and RX to TX.
Build and Flash RX Firmware
For PP receiver, you should flash its firmware using Betaflight Passthrough.
For EP1 and EP2, you should be able to do both Betaflight Passthrough and WiFi (since there are both firmware available), but for some reason Passthrough gives me error, but WiFi works just fine for me.
For BetaFPV Nano RX, it supports both WiFi or Betaflight Passthrough.
Open ExpressLRS Configurator, choose the device target based on the brand and receiver type. Make sure to select the exact same firmware version, build options and binding phrase as your TX.
- For PP receiver, the Device is: HappyModel PP 2400 RX
- For EP1 and EP2 receivers, the Device is: HappyModel EP 2400 RX
Flash RX Firmware via Betaflight Passthrough
This will only work if you have configure the RX in Betaflight correctly, see this section for detail.
Now connect the USB cable to your quad to power the FC and RX.
In ExpressLRS Configurator, choose the COM port of the FC (if not sure, check in Betaflight Configurator, but remember to disconnect before proceeding).
Hit BUILD & FLASH. It will take a couple of minutes.
Flash RX Firmware via WiFi
Basically the steps are the same as flashing the TX module via WiFi.
In the ExpressLRS Configurator, hit BUILD and it will take a couple of minutes to compile firmware.bin.
By default, if you power the EP1 and EP2 without turning on the radio, after 20 seconds it will enter WiFi mode (LED will be flashing rapidly to indicate that). The RX’s WiFi signal is a bit weak so place the RX closer to the WiFi antenna to your PC.
Connect to the WiFi network “ExpressLRS RX“. The WiFi password is: expresslrs
Go to 10.0.0.1 in your browser, and upload the firmware file.
Flash RX Firmware via UART
In the rare event, if neither of the above methods work, you can try UART flashing as described here.
Bind RX to TX
If you’ve set the Binding Phrase when flashing TX and RX, the TX will bind to the RX automatically and you won’t have to do anything. When binding is successful, the status LED on the RX should stay solid.
If you didn’t set Binding Phrase, you can manually bind your RX to the TX following these steps:
- Power on receiver, wait until the LED on the RX is off, immediately turn off the power, and then repeat again the above steps. When the RX is powered on for the third time, the LED will start to double-flash, indicating the RX is in binding mode
- Plug in the ELRS TX module to your radio, and enable External RF and select CRSF protocol in Mode. Execute the ELRS lua script in System Settings, Tools. Select [Bind], the LED on the RX module will become solid if bind successfully
Receiver status LED meanings:
- PP RX: LED solid means bind successfully or connection established; double-flash means it’s in bind mode; flash slowly means waiting for connection
- EP1/EP2 RX: LED solid means bind successfully or connection established; double-flash means it’s in bind mode; flash slowly means waiting for TX module connection; flash fast means it’s in WIFI hotspot mode, you can connect to the RX’s WiFi network to upgrade RX firmware by visiting 10.0.0.1 in your browser (password: expresslrs)
Betaflight Setup for ExpressLRS Receiver
To setup ExpressLRS RX’s:
Go to the “Ports” tab in the Betaflight configurator, and enable “Serial RX” for the UART you’ve connected the ELRS receiver to. Press “Save”.
In Configuration tab, under the “Receiver” Section, select “Serial-based receiver“, and select “CRSF” in the second option. Enable “Telemetry” feature. Click “Save”.
To verify, go to the “Receiver” tab, you should see response from stick movement. If the channels are in the wrong order, just try a different “Channel Map”.
Check if end points (1000 or lightly lower / 2000 or lightly higher) and mid points (1500) are correct, see this guide on how to adjust if they aren’t correct.
To make sure Telemetry is working, go to the Telemetry page in the radio, and select option “Delete all sensors”, then “Discover new sensors”.
In Modes tab, you should set AUX 1 as your arm switch (note that it’s now a 2-position switch).
Display LQ and RSSI in OSD
- RSSI – Signal strength, how loud the signal is (value from -130dBm to 0dBm)
- LQ – Link Quality, how well your receiver can understand the signal (value from 0% to 100%)
Both indicators are useful, but if you have to pick one, LQ is probably more important.
To display LQ properly you should use Betaflight 4.2 or newer, where they introduced a new RFMD:LQ% format for the LQ OSD element.
- Configuration tab, Disable RSSI_ADC
- Receiver tab, set RSSI Channel to Disable
- OSD tab, enable Link Quality and RSSI in dBm
It’s useful to have both measurements. For example:
- low LQ, high RSSI = lots of interference around you
- high LQ, low RSSI = you are very far away and should be cautious, or if you are close that’s an indicator that maybe something is wrong with your antennas
- low LQ, low RSSI = reaching the range limit of your gear
Digital protocols typically have a failsafe flag in the packets, so setting “no pulse” in the radio might not actually mean anything (though it won’t hurt to set it). So set it up in Betaflight Failsafe tab.
Make sure to do a props-off failsafe test just to verify that failsafe is actually working (remove all propellers, arm the quad and turn off radio, be ready to unplug if anything goes wrong).
ELRS LUA Script Settings
To Setup ExpressLRS in the LUA script, there are 3 settings: Pkt. Rate (packet rate), TLM Ratio (telemetry ratio) and Power.
The Happymodel ES24TX transmitter module supports up to 250mW, but I believe 100mW is enough for most people. Tests showed that 100mW can do 33km range with stock 2.4GHz gear. And it will most likely outperform your 5.8GHz video link anyway.
But if you insist in using the maximum 250mW output, make sure you install a fan for cooling, I will show you how here. 100mW should be fine without a fan.
It’s a compromise of range and latency. Higher packet rate has lower latency.
Most of the times I fly within 1Km, so I prefer to use the highest packet rate available to my TX16S, which is 500Hz. Note that 500Hz is not available in all radios, for example the Tango 2 only supports up to 250Hz.
TLM Ratio is how often telemetry data get sent. The larger number means slower telemetry update, e.g. 1:8 means telemetry data is sent every 8 frames, while 1:128 is every 128 frames.
More frequent telemetry would cause latency to the control link, but less telemetry is more likely to give you telemetry lost warning. And it depends on your requirement too, if you want more frequent updates then you would want to set a smaller number.
Performance Enhancement Settings
These settings might make your quad fly more locked in. Give them a try anyway. Backup original settings in case you want to go back.
Turn off ADC filtering in radio (System Settings, Hardware).
Enable 500Hz mode in ELRS LUA script.
In Betaflight CLI:
- set ff_interpolate_sp = on
- set ff_smooth_factor = 37
In Receiver tab, RC Smoothing, set:
- Smoothing Type to Interpolation
- RC Interpolation to Manual
- RC Interpolation Interval to 5ms (500Hz), or 10ms (250Hz)
How to Install Cooling Fan
There is no fan plug for the Happymodel 2.4GHZ TX module, you need to solder it directly. I found 3.3V and GND at this capacitor. Make sure you confirm voltage with a multimeter before connecting to avoid damaging the board.
I am using a 20x20x6mm 5v fan which fits perfectly in their new module cover. The fan can be bought on Amazon (affiliate link): https://amzn.to/3ixZpE0. The fan should act as an exhaust and take the hot air out, not blowing onto the PCB to avoid dust building up inside the module. Current draw is quite low so that shouldn’t be an issue. At 5V, 0.05A.
Inconsistent Packet Rate – CRSFShot Not Working
In the ELRS lua script top bar, there is an indicator (e.g. 0:200) which tells you how many packets per second it’s getting from the radio. You can use it to confirm the consistency of the RC link.
Ideally it should always show a stable number that is the same as the packet rate you select. For example: 0:50, 0:150, 0:250, 0:500.
If it shows an inconsistent number like 0:63, or is stuck at 0:250 at every packet rate you select, then your radio does not have CRSFShot working properly.
The latest official release of OpenTX (2.3.12 or newer) already includes CRSFShot, so double check if your OpenTX version is outdated.
Using ExpressLRS Logo as Model Image
I made a logo you can use as model image in the TX16S/T16. You can learn how to use it here.
Image download: google drive.
Install USB to UART Driver
You might or might not need to install this driver on your PC if you want to update your TX via UART: https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers
For Taranis QX7 users, you’ll need to perform this mod in order to run 400k baud rate on your radio. It’s not needed, but it is recommended if you want to get the most out of ELRS: https://www.youtube.com/watch?v=mHfQe05XJn8&ab_channel=edrone
For more detailed explanation of the system, visit ExpressLRS official wiki, I barely scratched the surface here: https://github.com/
- Jun 2021 – Updated guide: OpenTX 2.3.12 has been released, no longer need to flash nightly
- Jul 2021 – Updated: ExpressLRS 1.0 official release
- Aug 2021 – Added info for BetaFPV ELRS Nano TX and RX