Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
177 commits
Select commit Hold shift + click to select a range
790c96c
1st
olliw42 Sep 15, 2023
a0297bb
small modification to allow chain of more than two pairs, add ToO
olliw42 Sep 16, 2023
98f9952
enable ortho for 2.4GHz
olliw42 Sep 18, 2023
caba98a
precompiled binaries
olliw42 Sep 18, 2023
fff6bbe
Merge branch 'main' into dev-relay
olliw42 Sep 20, 2023
1d08e67
Merge branch 'dev-relay' into merge-main
olliw42 Sep 21, 2023
6f0e306
streamline with v0.3.38
olliw42 Sep 21, 2023
60083c0
Merge branch 'dev-relay' into merge-main
olliw42 Oct 15, 2023
d55bdc1
needs to be adapted
olliw42 Oct 15, 2023
72d4d96
Merge branch 'dev-relay' into merge-main
olliw42 Oct 15, 2023
34ff88e
pre release firmwares
olliw42 Oct 15, 2023
279bf5f
Merge branch 'main' into dev-relay
olliw42 Oct 17, 2023
a14ceb1
Merge branch 'dev-relay' into merge-main
olliw42 Jan 19, 2024
55ae702
Merge branch 'dev-relay' into merge-main
olliw42 Apr 17, 2024
659aa59
Merge branch 'main' into dev-relay
olliw42 Apr 17, 2024
15078f1
some tidy
olliw42 Apr 17, 2024
7b3d0b5
more tidy
olliw42 Apr 17, 2024
2cc31b5
pre-compiled binaries & more tidy
olliw42 Apr 17, 2024
93526b1
Merge branch 'main' into dev-relay
olliw42 Apr 24, 2024
89d0e45
update precompiled binaries
olliw42 Apr 24, 2024
e628759
add matek mtx-db30
olliw42 Oct 3, 2024
a9672d7
Merge branch 'main' into dev-matek-mtx
olliw42 Oct 3, 2024
05b1e29
cc
olliw42 Oct 3, 2024
14bfb88
Merge branch 'main' into dev-matek-mtx
olliw42 Oct 3, 2024
5225385
modules, usb, add dtr rts handling
olliw42 Oct 4, 2024
839be43
tx, usb dtr rts test
olliw42 Oct 4, 2024
180771d
some esp
olliw42 Oct 6, 2024
4a31083
tx, cli, buf sizes adjustment
olliw42 Oct 6, 2024
427d4e8
cc
olliw42 Oct 6, 2024
d111ad0
Merge branch 'main' into dev-matek-mtx
olliw42 Oct 6, 2024
77e8f80
cc
olliw42 Oct 6, 2024
76dd169
cc
olliw42 Oct 6, 2024
655d9a0
esp passthru needs 8192 bytes ... :(
olliw42 Oct 6, 2024
b1dbc9b
cc gpio0
olliw42 Oct 9, 2024
fa39413
esp touches
olliw42 Oct 10, 2024
8a65385
Merge branch 'main' into dev-matek-mtx
olliw42 Oct 10, 2024
49f353c
cc
olliw42 Oct 12, 2024
9b3daf9
Merge branch 'dev-matek-mtx' into main-merge
olliw42 Oct 19, 2024
5ec98c0
Merge branch 'dev-matek-mtx' into merge-main
olliw42 Oct 25, 2024
e611eed
rx matek mr900-td g474ce
olliw42 Oct 25, 2024
fbbcff4
td30 hal tidy
olliw42 Oct 25, 2024
74d8446
Merge branch 'dev-matek-mtx' into merge-main
olliw42 Nov 5, 2024
43e10ef
Merge branch 'dev-matek-mtx' into merge-main
olliw42 Nov 5, 2024
9f04b54
Merge branch 'dev-matek-mtx' into merge-main
olliw42 Dec 10, 2024
305d53e
Merge branch 'dev-matek-mtx' into merge-main
olliw42 Jan 18, 2025
b6b972d
Merge branch 'dev-relay' into merge-main (compiles)
olliw42 Feb 16, 2025
c3b57cb
ups
olliw42 Feb 16, 2025
1f9cbda
Merge branch 'main' into dev-relay
olliw42 Mar 5, 2025
63fc3cb
Merge branch 'dev-relay' into main-merge
olliw42 Mar 8, 2025
576de6c
Merge branch 'main' into dev-relay
olliw42 Mar 8, 2025
7c3ddeb
Merge branch 'main' into dev-relay
olliw42 Mar 10, 2025
da834aa
Merge branch 'dev-matek-mtx' into merge-main
olliw42 Mar 13, 2025
49aca0f
rfpower2
olliw42 Mar 13, 2025
b36bbff
cc
olliw42 Mar 13, 2025
0046d4d
Merge branch 'dev-matek-mtx' into merge-main
olliw42 Mar 13, 2025
efd10a8
Merge branch 'dev-relay' into merge-main
olliw42 Apr 26, 2025
9779afa
tx, relay, bug: update setup_list.h relay support
Enzaii Jul 7, 2025
8e6112f
Merge branch 'dev-relay' into merge-relay
olliw42 Jul 8, 2025
40ee69b
binaries
olliw42 Oct 15, 2025
7f3dc24
Merge branch 'dev-matek-mtx' into merge-main
olliw42 Nov 8, 2025
5555ce1
Merge branch 'dev-matek-mtx' into merge-main
olliw42 Jan 11, 2026
7940350
looks good (some few things still missing)(mavlink, bind frequencyban…
olliw42 Jan 13, 2026
0ebdfb1
cc
olliw42 Jan 15, 2026
43c07ef
ups
olliw42 Jan 15, 2026
832f844
frequency_band_str
olliw42 Jan 15, 2026
e1a7a83
modules, usb device, add NAK flow control
jlpoltrack Jan 16, 2026
cce698b
modules, usb device, tidy nfc
olliw42 Jan 16, 2026
ab0400a
Merge branch 'dev-matek-mtx' into merge-main
olliw42 Jan 16, 2026
10b3241
cc
olliw42 Jan 16, 2026
2a98577
common,tx,rx: tidies, tiny stuff in cli, mav rx
olliw42 Jan 16, 2026
9dc036d
tx, yield 100% LQ upon first connect
olliw42 Jan 16, 2026
7057dc4
tx,rx, MavlinkSystemID setup parameter
olliw42 Jan 16, 2026
147e930
Merge branch 'dev-matek-mtx' into merge-main
olliw42 Jan 16, 2026
1c09e9e
readme, update link to flasher
olliw42 Jan 16, 2026
7662763
esp, correct dtr,rts handling
olliw42 Jan 16, 2026
c323806
wireless bridge, slight improvement
olliw42 Jan 17, 2026
f24e276
readme, few tidies
olliw42 Jan 17, 2026
8883d53
wireless bridge, tiny tidy
olliw42 Jan 17, 2026
b8daace
esp, support usb dtr rts
olliw42 Jan 17, 2026
397859f
common, setup,common tidies
olliw42 Jan 17, 2026
3ae1cd7
Merge branch 'dev-matek-mtx' into merge-main
olliw42 Jan 17, 2026
b16eb51
common, setup, allow for no serial, only serial2
olliw42 Jan 17, 2026
6b2fbd1
Merge branch 'dev-matek-mtx' into merge-main
olliw42 Jan 17, 2026
d2fd6a1
hal, mtx-db: move BT/ESP to serial2, activate esp configure
olliw42 Jan 17, 2026
5f6e9d1
prevent 868+24 and 915+24 to connect
olliw42 Jan 18, 2026
1630673
tx, simplify fhss index, band handling
olliw42 Jan 18, 2026
47c2f60
bind, tidy
olliw42 Jan 18, 2026
2f3537f
rx, bug with diversity setting (thx to wuyang521)
olliw42 Jan 18, 2026
11d1557
rx, bug with power setting (thx to wuyang521)
olliw42 Jan 18, 2026
5e19ce6
rx, msp, add Rx Reboot
jlpoltrack Jan 20, 2026
9ce22ad
rx, msp, reboot tidy
olliw42 Jan 20, 2026
6a11dd8
setup, correct a bug with rx diversity (wrong param used) and some ti…
olliw42 Jan 20, 2026
5ced555
more bind
olliw42 Jan 21, 2026
7684947
setup, fhss, bind, tidies
olliw42 Jan 24, 2026
fcb958a
cc
olliw42 Jan 24, 2026
dd0d340
tx, bind, remove wrapper
olliw42 Jan 24, 2026
326f50f
common, rename to SX_FHSS_FREQUENCY_BAND_XX
olliw42 Jan 24, 2026
9a32cfc
bind, use frequency band send by tx
olliw42 Jan 24, 2026
278a169
common, simplify fhss num
olliw42 Jan 24, 2026
1d280c7
common, rename to BindScan_mask
olliw42 Jan 24, 2026
76aa581
common, fhss, undo bind list, simplify to single bind channel
olliw42 Jan 24, 2026
d3e672d
common, some tidies
olliw42 Jan 24, 2026
58896d6
common,rx,tx, add link_tx_status
olliw42 Jan 24, 2026
70d0ec7
tx, cli, disp, improve for dualband
olliw42 Jan 24, 2026
c6e0fef
common, hal, power, mtx
olliw42 Jan 24, 2026
aa301a6
update pre-release firmwares
olliw42 Jan 24, 2026
5f17204
firmware, wireless, esp32c3 bridge update
jlpoltrack Jan 24, 2026
8cb58ea
copy over mtx2
olliw42 Jan 24, 2026
70daf49
Merge branch 'dev-matek-mtx' into merge-main
olliw42 Jan 24, 2026
1e2f935
remove debugs
olliw42 Jan 24, 2026
c710cd4
update submodule dronecan_dsdlc
olliw42 Jan 25, 2026
f6ed1a9
common, dronecan, empy aka @) issue resolved with latest dronecan_dsd…
olliw42 Jan 25, 2026
70bf94b
Merge branch 'dev-matek-mtx' into merge-main
olliw42 Jan 25, 2026
300b95e
Merge branch 'dev-relay' into merge-main
olliw42 Jan 25, 2026
00e9400
update pre-release
olliw42 Jan 25, 2026
3047b58
tools, run_setup more cmd options
olliw42 Jan 25, 2026
6074ad7
rx, esp, hal, XR4 info on pin usage (nfc)
olliw42 Jan 25, 2026
be09cf1
esp, rx, xr4, ups (nfc)
olliw42 Jan 26, 2026
eba2137
tx, jrpin5, bandage for EdgeTx H7 sport issue
olliw42 Jan 26, 2026
8b374a6
esp,rx, add Flysky PR02-2400 receiver
jlpoltrack Jan 26, 2026
90d837d
update pre-release firmwares
olliw42 Jan 26, 2026
57c3a05
lua, index test script obsolete, request-response used in all luas now
olliw42 Jan 27, 2026
a10715b
rx, msp, listener for bind
jlpoltrack Jan 28, 2026
677817c
common, msp, tidies (nfc)
olliw42 Jan 28, 2026
b1966bb
tools, silently unsupport tx R9MX, rx WioE5 Groove
olliw42 Jan 29, 2026
df537aa
rx, update core files for matek 30c, td30
olliw42 Jan 30, 2026
57389ba
common, code review hardenings, and a real bug
olliw42 Jan 31, 2026
e726670
common, sx drivers, tidy, remove timeout form SetToRx()
olliw42 Feb 1, 2026
4def8bb
esp32, undef MIN MAX to get rid of warnings
jlpoltrack Feb 1, 2026
e6c05bf
rx, mavlink, tidies
olliw42 Feb 1, 2026
df87968
es, glue, tidy (nfc)
olliw42 Feb 1, 2026
693a73c
esp, gue, get it right
olliw42 Feb 1, 2026
d540976
wireless bridge, check of arduino version for esp32c3
jlpoltrack Feb 2, 2026
ee823dc
lua, param load status, add number of read params
olliw42 Feb 3, 2026
3365dc4
lua, tidy
olliw42 Feb 3, 2026
92df5c7
lua, Ethos lua script, init
olliw42 Feb 3, 2026
5a0a05f
common, rf power switch, linear mapping of power levels
jlpoltrack Feb 4, 2026
79f405c
update submodule DSDL
olliw42 Feb 6, 2026
5c4dc23
rx, dronecan interface, update rc
olliw42 Feb 6, 2026
927f01e
common,tx, ups, it's mbridge (nfc)
olliw42 Feb 7, 2026
f9e8c35
es, common, hal, tidies of lr1121 comments (nfc)
olliw42 Feb 7, 2026
b7701c4
modules,common, dronecan driver and lib updates
olliw42 Feb 7, 2026
fd7f222
core, stm32g4 can devices should run on 160MHz and 80MHz can
olliw42 Feb 7, 2026
1a1bea0
rx, dronecan interface update
olliw42 Feb 7, 2026
fa88923
hal, matek can devices, 1k for debug
olliw42 Feb 7, 2026
cb7ed4e
rx, dronecan, datalen bug
olliw42 Feb 8, 2026
1f90efb
update submodule mavlink
olliw42 Feb 8, 2026
90ae540
update submodule fastmavlink
olliw42 Feb 8, 2026
4b79dda
common,rx,tx: mavlink updates
olliw42 Feb 8, 2026
87fa1cf
rx, mavlink, set ack result where it should be set, + few more
olliw42 Feb 8, 2026
8ceafe2
rx, dronecan, get tt stats right
olliw42 Feb 8, 2026
9880fa6
common, mavlinkX, proper bit buffer, memset, + comments
olliw42 Feb 8, 2026
5ac98b0
wireless bridge, massive rework, make better use of C++ and OOP
olliw42 Feb 8, 2026
b5dc519
rx, matex mrxx-30, core, to support CAN feature
olliw42 Feb 9, 2026
c5fe490
update pre-release firmwares
olliw42 Feb 9, 2026
5179556
rx, mavlink, slight imprevment for mlrs radio link stats messages
olliw42 Feb 9, 2026
de9ffb1
dito
olliw42 Feb 9, 2026
4fee84e
rx, cli, bug, hc04 not shown
olliw42 Feb 10, 2026
ff56b66
common,, tx, set USE_ESP_WIFI_BRIDGE_CONFIGURE and use it consistently
olliw42 Feb 10, 2026
9b5949e
tx, cli, hc04 add option to get pin
olliw42 Feb 10, 2026
d0a4242
release notes, more docs
olliw42 Feb 10, 2026
cbccad0
Minor dissapearing cursor bug fix and some code cleanup for BW Lua (#…
brad112358 Feb 10, 2026
ef00280
wireless bridge, add AT_PSWD, AT_NETSSID
olliw42 Feb 12, 2026
e6bc5d3
tx, esp, cli, cli comamnds to get&set pswd and net ssid
olliw42 Feb 12, 2026
0fca5e5
lua, show max param number on reload
olliw42 Feb 12, 2026
55d99de
wireless bridge, firmware update
jlpoltrack Feb 13, 2026
b17b64a
lua, little bug
olliw42 Feb 13, 2026
2443548
lua, tidiy READMEs
olliw42 Feb 13, 2026
99da986
tx, cli, esp, tasks, a bit more hardening
olliw42 Feb 13, 2026
0f3332f
common, tasks tidy (nfc)
olliw42 Feb 13, 2026
2b5c23e
tx, cli, no systemboot for esp devices
olliw42 Feb 13, 2026
b0ecfc0
tx, cli, ups
olliw42 Feb 13, 2026
09de2a8
lua, rewrite using tables, add flash esp, make download counter work …
olliw42 Feb 13, 2026
f535487
v1.3.08 (pre-release)
olliw42 Feb 13, 2026
e39ec99
tools, web, adjust url to v1.3.08
olliw42 Feb 13, 2026
02b71f9
Merge branch 'dev-relay' into merge-main
olliw42 Feb 14, 2026
e3d3a34
precompiled firmwares
olliw42 Feb 14, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 10 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@

# mLRS #

The mLRS project offers an open source 2.4 GHz & 915/868 MHz & 433 MHz/70 cm LoRa-based high-performance long-range radio link, which provides bidirectional serial connection combined with full remote control.

The 'm' in the project name alludes to 'MAVLink', as it has features which optimizes performance for MAVLink systems. However, it always will also provide a transparent serial link and hence will be of wider use and not be limited to MAVLink systems only. The 'LR' in the project name alludes to 'long range', which however should not be understood in terms of an absolute range, like 100 km, but - of course - as the best possible range under the given conditions. Physical laws simply say that the higher the data rate the shorter the range. So, mLRS cannot compete range-wise with systems which achieve their range by reducing data rate to a minimum, at the cost of the resulting compromises. The goal of mLRS is to achieve a high range under the condition of a relatively high data rate.
The mLRS project offers an open source 2.4 GHz & 915/868 MHz & 433 MHz/70 cm LoRa-based high-performance long-range radio link, which provides bidirectional serial connection combined with full remote control. The 'm' in the project name alludes to 'MAVLink', as the project includes features that optimize performance for MAVLink systems. It may also allude to 'MSP' for the same reason. However, mLRS also provides a transparent serial link, making it broadly useful and not limited to MAVLink or MSP systems alone. The 'LR' in the project name alludes to 'long range', which should not be understood in terms of an absolute range, such as 100 km, but - of course - as achieving the best possible range under given conditions. Physical laws dictate that higher data rates result in shorter range. So, mLRS cannot compete purely on range with systems that achieve the range by reducing data rates to a minimum, at the cost of the associated compromises. The goal of mLRS is to achieve a high range while maintaining a relatively high data rate.

Typical specs could be 'plenty' of full-resolution RC channels, with 50 Hz update rate and serial data rates of about 3-5 kBytes/s at 2.4 GHz.

Expand All @@ -29,7 +27,7 @@ You of course use the project fully at your own risk.

There is still plenty of room for ideas and improvement, and in this sense the project is work in progress. It is however fair to call it stable and robust, and to perform quite well.

The mLRS system also provides a high level of usability such as a variety of options for input/output, parameter setting via the mLRS transmitter, optimization for ArduPilot/PX4 systems, wireless connection to ground control stations like MissionPlanner or QGC, or support of the Yaapu telemetry app without extra hazzles. It also integrates well with the mTX (formerly MAVLink for OpenTx) project, which yields a most fluid user experience.
The mLRS system also provides a high level of usability such as a variety of options for input/output, parameter setting via the mLRS transmitter, optimization for ArduPilot/PX4 and INAV systems, wireless connection to ground control stations like MissionPlanner or QGC, or support of the Yaapu telemetry app without extra hazzles. It also integrates well with the mTX (formerly MAVLink for OpenTx) project, which yields a most fluid user experience.

It supports the SX1280/1, SX1276, SX1262, LLCC68 and LR1121 Semtech chips, and thus the 2.4 GHz, 915/868 MHz and 433 MHz/70 cm frequency bands.

Expand Down Expand Up @@ -62,7 +60,7 @@ Further features:
- technologies introduced by mLRS:
- innovative flow control for MAVLink for smoother and more robust data flow
- MavlinkX for reduced packet loss and data compression
- support of MSP and optimizations for INAV autopilot systems. Enables using the INAV telemetry widget, in-flight connection to the INAV configurator, supports MSP-RC, and introduces MspX for reduced packet loss.
- support of MSP and optimizations for INAV autopilot systems. Enables using the INAV telemetry widget, in-flight connection to the INAV configurator or MWP ground control, supports MSP-RC, and introduces MspX for reduced packet loss.
- "except" and "ortho" features
- support for buzzer, OLED display & five-way button, serial2.
- support of ESP32 and ESP8266 modules for wireless connection to a ground control station.
Expand All @@ -87,13 +85,13 @@ The range which one may expect can be estimated from the standard math; the [Imm
| 433 MHz/70 cm | - | 55 km | 87 km


For the 2.4 GHz band, the available range test reports consistently exceed the above estimated ranges (e.g., [8.3 km were reported](https://www.rcgroups.com/forums/showpost.php?p=50964339&postcount=1721) for 2.4 GHz, 50 Hz, 9 dBm (8 mW), which translates to 29 km at 100 mW). In the 900 MHz band, a range of 51 km at 1 W has been reported [~51 km at 1 W](https://discord.com/channels/1005096100572700794/1005096101239603232/1413637830856409219). Note that mLRS supports full diversity, which when enabled has been found to significantly improve performance at lower link budget, i.e., allows you to operate at larger ranges.
For the 2.4 GHz band, the available range test reports consistently exceed the above estimated ranges (e.g., [8.3 km were reported](https://www.rcgroups.com/forums/showpost.php?p=50964339&postcount=1721) for 2.4 GHz, 50 Hz, 9 dBm (8 mW), which translates to 29 km at 100 mW). In the 900 MHz band, a range of 51 km at 1 W has been reported [~51 km at 1 W](https://discord.com/channels/1005096100572700794/1005096101239603232/1413637830856409219). Note that mLRS supports full diversity, which when enabled has been found to significantly improve performance at lower link budget, i.e., allows you to operate at larger ranges.

The FLRC and FSK modes are not intended for long range.

## Hardware ##

The STM32 chipsets were chosen as main platform, and a good number of STM32 based devices are supported. The widely available ExpressLRS hardware, which uses ESP chipsets, is not ideal for mLRS, but also a good number of ExpressLRS devices are supported.
The STM32 chipsets were chosen as main platform, and a good number of STM32 based devices are supported. The widely available ExpressLRS hardware, which uses ESP chipsets, is not ideal for mLRS, but also a large number of ExpressLRS devices are supported.

The code currently supports:
- MatekSys mLRS boards (2.4 GHz, 868/915 MHz)
Expand All @@ -105,19 +103,19 @@ The code currently supports:

MatekSys offers a selection of quality mLRS boards, which are currently the best option available. They are specifically designed for mLRS, exploiting its full potential feature-wise. They support the 2.4 GHz and 868/915 MHz frequency bands, offer up to 1 W transmit power, and employ TCXOs. Furthermore, they use comparatively beefy STM32 MCUs, and are also very well suited for tinkering and DIY extensions since all usable pins are broken out and easily accessible.

ExpressLRS hardware also provides a readily available entry into mLRS. The RadioMaster Bandit and Ranger or the BetaFPV 1W Micro modules are good mLRS Tx modules offering up to 1 W. Also the internal modules in a number of popular EdgeTx/ExpressLRS radios from RadioMaster and Jumper are supported. The various ExpressLRS receivers can also be good options; some of them provide up to 500 mW transmission power, and some others are cheaply available. Note though that not every ExpressLRS hardware is supported by mLRS. A main downside of the ExpressLRS 900 MHz gear is that they only support the 19 Hz 7x mode, and are incompatible with the MatekSys and Wio-E5/E77/E22 based gear ([link](https://github.com/olliw42/mLRS-docu/blob/main/docs/SX126x_SX127x_INCOMPATIBILITY.md)).
ExpressLRS hardware also provides a readily available entry into mLRS. The RadioMaster Bandit, Ranger and Nomad or the BetaFPV 1W Micro modules are good mLRS Tx modules offering up to 1 W. Also the internal modules in a number of popular EdgeTx/ExpressLRS radios from RadioMaster and Jumper are supported. The various ExpressLRS receivers can also be good options; some of them provide up to 500 mW transmission power, and some others are cheaply available. Note though that not every ExpressLRS hardware is supported by mLRS. A main downside of the ExpressLRS 900 MHz gear is that they only support the 19 Hz 7x mode, and are incompatible with the MatekSys and Wio-E5/E77/E22 based gear ([link](https://github.com/olliw42/mLRS-docu/blob/main/docs/SX126x_SX127x_INCOMPATIBILITY.md)).

In the 915/868 MHz range, the Frsky R9 system can be an option too. The Frsky R9M transmitter module is a reasonable mLRS Tx module offering up to 1 W (the R9M Lite Pro cannot be used as transmitter). The R9 receivers are nice options but provide low transmission power (50 mW). This can be mitigated by using a R9M Lite Pro or R9M as receiver (1 W). Here too, the downside is that the R9 devices only support the 19 Hz 7x mode, and are incompatible with the MatekSys and Wio-E5/E77/E22 based gear ([link](https://github.com/olliw42/mLRS-docu/blob/main/docs/SX126x_SX127x_INCOMPATIBILITY.md)).
In the 915/868 MHz range, the Frsky R9 system can be an option. The Frsky R9M transmitter module is a reasonable mLRS Tx module offering up to 1 W (the R9M Lite Pro cannot be used as transmitter). The R9 receivers are nice options but provide low transmission power (50 mW). This can be mitigated by using a R9M Lite Pro or R9M as receiver (1 W). Here too, the downside is that the R9 devices only support the 19 Hz 7x mode, and are incompatible with the MatekSys and Wio-E5/E77/E22 based gear ([link](https://github.com/olliw42/mLRS-docu/blob/main/docs/SX126x_SX127x_INCOMPATIBILITY.md)).

The SeeedStudio Wio-E5 boards and the EByte E77-MBL board are yet another readily available and reasonable options for entering mLRS. The "easy-to-solder" board, which uses an EByte E77 module, is a simple and cheap DIY option for building mLRS receivers and transmitters. It can also be used for building mLRS full diversity devices, as well as dual-band devices working simultaneously in e.g. the 868/915 MHz and 2.4 GHz ranges. All these boards are based on the STM32WL5E chip and thus provide all advantages of the SX126x chipset, such as the 31 Hz mode. Their maximum power is 22 dBm, and they can be used in the 915/868 MHz and 433 MHz/70 cm frequency ranges.
The SeeedStudio Wio-E5 boards and the EByte E77-MBL board are yet another readily available option for entering mLRS. The "easy-to-solder" board, which uses an EByte E77 module, is a simple and cheap DIY option for building mLRS receivers and transmitters. It can also be used for building mLRS full diversity devices, as well as dual-band devices working simultaneously in e.g. the 868/915 MHz and 2.4 GHz ranges. All these boards are based on the STM32WL5E chip and thus provide all advantages of the SX126x chipset, such as the 31 Hz mode. Their maximum power is 22 dBm, and they can be used in the 915/868 MHz and 433 MHz/70 cm frequency ranges.

Don't hesitate to join the discussion thread at rcgroups or the discord channel for more details.

## Firmware: Flashing ##

Most devices which are supported can be flashed with the [mLRS Flasher Desktop App](https://github.com/olliw42/mLRS-Flasher). Additionally, Matek devices can be flashed using a web browser with the [mLRS Web Flasher](https://mlrs.xyz/flash), which makes flashing most easy.
The mLRS devices supported by the project can be flashed with the [mLRS Flasher Web App](https://olliw.eu/mLRSFlasher), which makes the process straightforward and easy.

Once your hardware is flashed, you can then use the mLRS transmitter to configure the system via the CLI, the mLRS Configuration Lua script for EdgeTx/OpenTx radios, or the OLED display if available. The mLRS receiver is configured by connecting to the transmitter, and then configuring it through the transmitter, exactly like the transmitter is configured.
Once your hardware is flashed, you can use the mLRS transmitter to configure the system via the CLI, the mLRS Configuration Lua script for EdgeTx/OpenTx radios, or the OLED display, if available. The mLRS receiver is configured by connecting to the transmitter and configuring it through the transmitter, exactly like the transmitter is configured.

## Software: Installation Bits and Bops ##

Expand Down
Binary file added docs/datasheets/LR1121_UM_V2_1.pdf
Binary file not shown.
Binary file added docs/datasheets/LR1121_V2_1_data_sheet.pdf
Binary file not shown.
Binary file not shown.
50 changes: 46 additions & 4 deletions esp/mlrs-wireless-bridge/mlrs-wireless-bridge-at-mode.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@ typedef enum {
AT_WIFIDEVICENAME_QUERY,
AT_BINDPHRASE_QUERY,
AT_BINDPHRASE_XXXXXX,
AT_PSWD_QUERY,
AT_PSWD_XXXXXX,
AT_NETSSID_QUERY,
AT_NETSSID_XXXXXX,
AT_CMDS_NUM,
} AT_NAME_ENUM;

Expand Down Expand Up @@ -75,6 +79,10 @@ const char* at_cmds[AT_CMDS_NUM] = {
"AT+WIFIDEVICENAME=?", // only query, no option to set
"AT+BINDPHRASE=?",
"AT+BINDPHRASE=xxxxxx",
"AT+PSWD=?",
"AT+PSWD=xxxxxxxxxxxxxxxxxxxxxxxx", // must be length 24, 0xFF-fill for shorter
"AT+NETSSID=?",
"AT+NETSSID=xxxxxxxxxxxxxxxxxxxxxxxx", // must be length 24, 0xFF-fill for shorter
};


Expand Down Expand Up @@ -152,15 +160,21 @@ bool AtMode::Do(void)
at_buf[at_pos] = '\0'; // to make it a str
bool possible_match = false;
for (int i = 0; i < AT_CMDS_NUM; i++) {
char at_cmd[32];
char at_cmd[64];
strcpy(at_cmd, at_cmds[i]);

// we need to adjust the cmd to look for in the case of bindphrase
// we need to adjust the cmd to look for in the case of bindphrase, password. netssid
// replaces the chars in the cmd's 'x' positions with the actual chars
// somewhat dirty but does the trick and avoids massive parser change
if (i == AT_BINDPHRASE_XXXXXX) {
if (i == AT_BINDPHRASE_XXXXXX) { // first x is at buf[14]
for (int pp = 14; pp < 14+6; pp++) if (pp < at_pos) at_cmd[pp] = at_buf[pp];
}
if (i == AT_PSWD_XXXXXX) { // first 'x' is at buf[8]
for (int pp = 8; pp < 8+24; pp++) if (pp < at_pos) at_cmd[pp] = at_buf[pp];
}
if (i == AT_NETSSID_XXXXXX) { // first 'x' is at buf[11]
for (int pp = 11; pp < 11+24; pp++) if (pp < at_pos) at_cmd[pp] = at_buf[pp];
}

// check if it could become a match by reading more chars
if (strncmp(at_buf, at_cmd, at_pos) != 0) continue; // not even a possible match
Expand All @@ -170,7 +184,7 @@ bool AtMode::Do(void)
if (strcmp(at_buf, at_cmd) == 0) {
if (i == AT_NAME_QUERY || i == AT_BAUD_QUERY || i == AT_WIFICHANNEL_QUERY || i == AT_WIFIPOWER_QUERY ||
i == AT_PROTOCOL_QUERY || i == AT_WIFIDEVICEID_QUERY || i == AT_WIFIDEVICENAME_QUERY ||
i == AT_BINDPHRASE_QUERY) {
i == AT_BINDPHRASE_QUERY || i == AT_PSWD_QUERY || i == AT_NETSSID_QUERY) {
at_buf[0] = 'O';
at_buf[1] = 'K';
SERIAL.write(at_buf, at_pos - 1); // don't send the '?'
Expand All @@ -186,6 +200,8 @@ bool AtMode::Do(void)
case AT_WIFIDEVICEID_QUERY: SERIAL.print(device_id); break;
case AT_WIFIDEVICENAME_QUERY: SERIAL.print(device_name); break;
case AT_BINDPHRASE_QUERY: SERIAL.print(g_bindphrase); break;
case AT_PSWD_QUERY: SERIAL.print(g_password); break;
case AT_NETSSID_QUERY: SERIAL.print(g_network_ssid); break;
}
SERIAL.write("\r\n");
} else
Expand Down Expand Up @@ -263,6 +279,32 @@ bool AtMode::Do(void)
}
SERIAL.write(at_buf, at_pos);
SERIAL.write("\r\n");
} else
if (i == AT_PSWD_XXXXXX) {
at_buf[0] = 'O';
at_buf[1] = 'K';
String new_password = "";
for (int pp = 8; pp < 8+24; pp++) if (at_buf[pp] < 255) new_password += at_buf[pp]; // AT+PSWD=1234567890123456
if (new_password != g_password) {
preferences.putString(G_PASSWORD_STR, new_password);
restart_needed = true;
at_buf[2] = '*'; // replace '+' by '*' to mark change
}
SERIAL.write(at_buf, at_pos);
SERIAL.write("\r\n");
} else
if (i == AT_NETSSID_XXXXXX) {
at_buf[0] = 'O';
at_buf[1] = 'K';
String new_network_ssid = "";
for (int pp = 11; pp < 11+24; pp++) if (at_buf[pp] < 255) new_network_ssid += at_buf[pp]; // AT+NETSSID=1234567890123456
if (new_network_ssid != g_network_ssid) {
preferences.putString(G_NETWORK_SSID_STR, new_network_ssid);
restart_needed = true;
at_buf[2] = '*'; // replace '+' by '*' to mark change
}
SERIAL.write(at_buf, at_pos);
SERIAL.write("\r\n");
}
at_pos = 0;
break;
Expand Down
Loading