Thread Tools
Oct 22, 2019, 04:37 AM
Registered User
Thread OP
New Product

ExpressLRS, DIY LoRa based, race-optimized RC link system


I want to present to the community ExpressLRS, a pet project I've been working on for awhile.

https://github.com/AlessandroAU/ExpressLRS

Discord Chat: https://discord.gg/dS6ReFY

ExpressLRS is an open source RC link for RC aircraft. It is based on SX127x hardware combined with an ESP8285, ESP32 or STM32 for RX and TX respectively. Compared to commerical systems ExpressLRS is also very affordable, a TX module can be built for $30 and recievers for $15-20.

ExpressLRS can be flashed into existing Frsky R9M hardware (RX and TX) or custom PCBs can be make to suit. It can run at 200 Hz, 100 Hz or 50 Hz depending on if you prefer range or low latency. This system does FHSS over a configurable number of channels. At 200 Hz it is the fastest 900/433 MHz RC link on the market with a Stick -> OpenTX > RF -> RX -> Serial Packet Latency of ~10ms or ~6.5ms on firmwares with crsfshot support. Due to the optimized packet structure only basic telemetry that gives uplink/downlink information is currently supported.

TX and RX modules communicate via the standard CRSF serial protocol for easy use with Betaflight and openTX.

ExpressLRS test flight with Blackbox overlay; 50mw ESP32 TX + ESP8285 RX (1 min 45 sec)


Hardware
ExpressLRS can be flashed to a range of different targets for both the transmitter module (TX) and the receiver (RX). This page describes the hardware options, and their differences. See Flashing ExpressLRS for info on how to get ExpressLRS onto these targets.

Supported TX Modules
FrSky R9M (2018 model)



Frsky's is based on the STM32F301, and the sx1276 with a power amplifier.
STLink v2 required for flashing firmware
Firmware cannot be flashed back to FrSky after flashing ExpressLRS (one way trip)
Supports a number of power levels, up to a max of 2W
Only supports 115200 baud between opentx and the module, unless you do an "inverter mod", which is as simple as adding a pull up resistor
Works out of the box, with minimal soldering required.
Where to buy: local RC groups will be your best bet.

TTGO LoRa v1 (not recommended due to low output power use V2 module)

Uses the ESP32, and a TTGO 915mhz module
No extra hardware required for flashing firmware (except a USB cable)
Limited to 10mW power output (sub-optimal, recommend buying the v2 instead)
Supports 400000 baud between opentx and the module without mods
Need to 3D print a JR module enclosure, mount a pin header, and add a voltage reg to build a complete module:



Where to buy: https://www.aliexpress.com/item/4000059700341.html

TTGO LoRa v2

Uses the ESP32, and a TTGO 915mhz module
No extra hardware required for flashing firmware (except a USB cable)
Limited to 50mW power output
Supports 400000 baud between opentx and the module without mods
Need to 3D print a JR module enclosure, mount a pin header, and add a voltage reg to build a complete module:



Where to buy: https://www.ebay.ca/itm/TTGO-LORA32-...72.m2749.l2649

Custom made ESP32 PCB + RFM95 or E19

Uses the ESP32, and a RFM95 module (for 50mW) or an E19 module (for ~250mW)
Requires ordering PCBs from gerbers, a voltage reg, a few passives, some connectors, an ESP32, and an RFM95
RFM95 limited to 50mW power output, E19 limited to ~250mW
Supports 400000 baud between opentx and the module without mods
Needs to be hand built from scratch.




Supported RX Modules
FrSky R9 Mini, or R9MM

Uses the STM32F301, and the sx1276
STLink v2 required for flashing firmware
Firmware cannot be flashed back to FrSky after flashing ExpressLRS (one way trip)
Smallest ExpressLRS compatible RX
Works out of the box, with minimal soldering required, however the pads for flashing can be difficult to solder to.
Where to buy: local RC groups will be your best bet.



DIY ESP8285 RX

Multiple RX PCB designs available
Uses the ESP-01F module, and a RFM95 module
Requires ordering PCBs from gerbers, a reg IC, a few passives, ESP-01F, and an RFM95
Needs to be hand built from scratch
For a full BOM, see BOM
Update firmware over WiFi!



Toolchain Installation

ExpressLRS is written in C++ using the Arduino framework. Rather than use the Arduino IDE (which let's face it, is pretty clunky), we use platformio which is a plugin for vscode.

Downloading and Installing PlatformIO
Download a copy of vscode for you specific OS from here: https://platformio.org/platformio-ide
Open vscode,and click on the "Extensions" icon in the toolbar on the right (see Managing Extensions for more info).
In the search box, enter "platformio", and install the extension (see the pio install docs for more info).
All done, toolchain installed!

First Build
Using your favourite git tool, clone the ExpressLRS repo.
When you first launch vscode, you should see the platformio home page in a tab. Select the "Open Project" button, and navigate to the ExpressLRS repo directory, then into the src folder (i.e. /ExpressLRS/src/), then press the Open button.
In the toolbar on the right, click the "PlatformIO" icon, which will show the list of tasks.
Under "PROJECT TASKS", click the "Build" row. This will run the build (compile) for all supported targets.
After a few minutes, you should see the passing build results in the terminal panel.
The first build will take longer than usual.

Flashing ExpressLRS

FrSky R9M (2018 model)

Remove the top cover, unscrew the antenna SMA, and remove the PCB from the base enclosure
Solder 4x patch wires to these 4 pads:



Connect your STLink v2 to the 4 wires as follows:



To be safe, attach an antenna prior to powering up.
Plug your STLink into your computer (install drivers if required), and open the ExpressLRS repo in vscode.
In the platformio toolbar, expand the folder in the tree for "env:R9M_TX_2018_STM32F301", and click "Upload".



If the upload was successful, you should see the success message in the terminal output, and the R9M should play the startup tones.
At this point, you can use the R9M with your transmitter at 115200 baud. To allow 400000 baud in OpenTX, you need to add a pullup resistor to the inverter for S-Port. Connect a 500R to 1K resistor between 3.3V and the inverter pin as per the picture:



You are ready to go!

FrSky R9 Mini, or R9MM

Connect your STLink v2 to the 4 small pads GND, DIO (Data), CLK (Clock), 3.3V:



Select the R9MM_R9MINI_RX_STM32F301_STLINK target and Upload.

After connecting Rx (A10) and Tx (A9) to a flight controller and setting up the receiver with the CRSF serial protocol, the R9MM_R9MINI_RX_STM32F301_BetaflightPassthrough target may now be used for future uploads through Betaflight.

DIY ESP8285 RX
// TODO
Last edited by AlessandroAU; Jun 07, 2020 at 08:11 AM. Reason: Edit: Fixed Link, edit text typo
Sign up now
to remove ads between posts
Oct 22, 2019, 04:39 AM
Registered User
Thread OP
Update:
New mini PCB design has been tested
https://github.com/AlessandroAU/Expr...B/Mini_Rx_v0.1
https://easyeda.com/jyesmith/expresslrs-rx
Last edited by AlessandroAU; Dec 11, 2019 at 09:06 PM.
Oct 22, 2019, 05:17 AM
Registered User
Flew a few test packs today at 200Hz and it happily went beyond 300m with a structure between the quad and Tx.

Bring on the next race meet!!!

Oct 22, 2019, 05:43 AM
Registered User
What a great project and nicely executed AlessandroAU
Oct 22, 2019, 09:02 AM
Registered User
Interesting! And thanks for sharing!

One question still: LoRa is afaik intended to work without channel hopping, why implement FHSS? Doesn't that interfere?
I have only read a bit about it, so please explain.
Or are you using Lora modules the way normal RF modules are, so essentially any 868MHz would do in the same manner? (915 is illegal here, but it's technically similar.)
Oct 22, 2019, 09:43 AM
Registered User
Thread OP
Quote:
Originally Posted by learningarduino
Interesting! And thanks for sharing!

One question still: LoRa is afaik intended to work without channel hopping, why implement FHSS? Doesn't that interfere?
I have only read a bit about it, so please explain.
Or are you using Lora modules the way normal RF modules are, so essentially any 868MHz would do in the same manner? (915 is illegal here, but it's technically similar.)
On the contrary, LoRa is designed and intended to be used with FHSS.
You can even FHSS during the middle of a packet, (See SX127x datasheet section 4.1.1.8)
This is not running a LoRa stack, that would be silly. This is using LoRa modulation as a means of transferring data.
Oct 22, 2019, 10:19 AM
Registered User
Quote:
Originally Posted by AlessandroAU
This is not running a LoRa stack, that would be silly. This is using LoRa modulation as a means of transferring data.
Ah, that's the secret. Thanks!
Oct 23, 2019, 08:25 AM
KD2PBU - Fly No Evil
davidbitton's Avatar
How does this compare to a Dragon link?
Oct 23, 2019, 09:28 AM
Registered User
Thread OP
Quote:
Originally Posted by davidbitton
How does this compare to a Dragon link?
I don't consider them to be comparable, my system is for medium range, low latency control. Dragon link is for range above all else and has the output power and price to boot. The ExpressLRS TX fits in a JR module and can sip power all day, the RX module is 20x20mm and weights 3g, they are for different applications.
Oct 24, 2019, 12:32 AM
Registered User
Damn it right after I get all the stuff for qczeklrs, haha. I might have to build this if the latency is too much with qczek for a micro quad and just leave qczek for my extra long range planes. I'll be following this thread closely.
Oct 24, 2019, 07:32 AM
Registered User
Looks like an awesome project, how well does it play with Crossfire users in a race environment?
Oct 24, 2019, 02:27 PM
Registered User
Thread OP
Quote:
Originally Posted by Benaresq
Looks like an awesome project, how well does it play with Crossfire users in a race environment?
I don't know yet, but crossfire on 150hz mode uses fsk which should play nice with my system using Lora.
Oct 25, 2019, 09:57 AM
Registered User
Thread OP
Today we tested out to 320m with two ExpressLRS systems running at the same time, this was running at 50mW.

removed old video, lots of range and stability improvements since new video soon
Last edited by AlessandroAU; Feb 26, 2020 at 12:08 PM.
Nov 07, 2019, 08:18 AM
Registered User
Thread OP
ExpressLRS now supports using TTGO LoRa board as TX units!

IE:
https://www.aliexpress.com/item/4000059700341.html
https://www.aliexpress.com/item/32840238513.html
Nov 08, 2019, 01:08 AM
Registered User
Flew the TTGO LoRa based module all day, with the stock crappy antenna, and it didnt miss a beat. 1 lap below with debug info on screen showing RC Smoothing set to 5ms, aka 200Hz packet rate.

ExpressLRS Race Testing (0 min 19 sec)


Quick Reply
Message:

Thread Tools

Similar Threads
Category Thread Thread Starter Forum Replies Last Post
New Product QCZEK LRS - DIY 433MHz 1W (30dBm) LORA RC LINK with telemetry qczek DIY Electronics 3984 Aug 07, 2020 03:16 AM
Discussion Anybody interested to develop a LoRa based Tx Protocol? courcirc8 Radios 8 Jun 07, 2018 03:01 PM
New Product FPVmodel X160 Pro FPV Racer (Optimized Based on DYS X160) FPV.Model Mini Multirotor Drones 5 May 28, 2016 09:19 AM
Discussion DIY Telemetry System base on TI CC110L RF BoosterPack spy004 DIY Electronics 2 Mar 06, 2013 08:58 AM
Discussion Tucson schools create race-based system of discipline MtnGoat Life, The Universe, and Politics 8 Mar 16, 2012 01:22 AM