Cheap DIY RC link based on LoRa 868MHz modules
MPL-2.0 License
QuadMeUp Crossbow is a DIY project that gives 5km (at least) of RC link for UAV (airplanes and drones) for a price below $40. I uses SX1278 (LoRa 868MHz/915MHz) compatible (like HopeRF RFM95W) radio modules connected to Arduino compatible boards. It can be regular Arduino connected via SPI to SX1278 or dedicated board like Adafruit Feather 32u4 RFM LoRa or LoRa32u4 II
Future versions might be ported to ESP32 LoRa32 modules.
Works:
Needs implementation:
To compile, following libraries have to be installed:
Byte | Description | Notes |
---|---|---|
1 | Frame type & used radio channel | bits 7-5 defines frame, bits 4-0 current radio channel |
2 - 33 | Payload | lenghth defined by frame type |
payload length + 2 | CRC | using crc8_dvb_s2 method |
CRC is computed using crc8_dvb_s2
method. Initial CRC value for each frame CRC is equal to CRC of 4 bind bytes (unique for transmitter module).
Value | Value hex | Description | Direction | Payload length |
---|---|---|---|---|
0000 | 0x0 | RC channels data RC_DATA
|
TX -> RX | 9 |
0001 | 0x1 | Receiver health and basic telemetry RX_HEALTH
|
RX -> TX | 6 |
0010 | 0x2 | Request receiver configuration | TX -> RX | no used |
0011 | 0x3 | Receiver configuration | RX -> TX | no used |
0100 | 0x4 | Set receiver configuration | TX -> RX | no used |
0101 | 0x5 | PING frame, uses 9 byte payload | TX -> RX | 4 |
0110 | 0x6 | PONG frame, the same payload as PING | RX -> TX | 4 |
0111 | 0x7 |
BIND frame, transmitted by TX only during binding |
TX -> RX | 4 |
RC_DATA
frame formatProtocol allows to send 10 RC channels in total encoded as following
Total length of RC_DATA
payload is 9 bytes
RX_HEALTH
frame formatByte | Description |
---|---|
1 | RX RSSI |
2 | RX SNR |
3 | RX supply volatage, sent in 0,1V |
4 | RX analog input 1 sent in 0,1V |
5 | RX analog input 2 sent in 0,1V |
6 | Flags |
Bit | Meaning |
---|---|
00000001 | Device in Failsafe mode |
PING
and PONG
framesPING
and PONG
frames are to determine packet roundrip between TX and RX module.
TX sends PING
frame with curent micros
. If RX receives PING
frame, it respons
its payload as PONG
frame.
BIND
frame formatByte | Description |
---|---|
1 | Bind key byte 0 |
2 | Bind key byte 1 |
3 | Bind key byte 2 |
4 | Bind key byte 3 |
15
20
OpenTX 2.2.1 or newer is required with enabled External RF SBUS.
SBUS
1-16
12.0ms
or 14.0ms
normal
Tested with:
RX module outputs RC data using SBUS protocol. The trick is that DIY RX module does not have inverters, so SBUS signal is also not inverted (TTL standard), while standard SBUS protocol used inverted serial signal.
That mean the following:
After flashing TX and RX, binding is required.