Use-case / what problem this solves
MeshCore today has no support for the LilyGo T-Watch S3 family, and no support for 2.4 GHz LoRa (the SX128x driver is currently excluded in-repo). I'd like to contribute both:
- 2.4 GHz LoRa (SX1280 + LR1121 in 2.4 GHz high-band) — opens MeshCore to the worldwide, license-free 2.4 GHz ISM band (no regional sub-GHz duty-cycle/region constraints).
- LilyGo T-Watch S3 family (S3 + S3 Plus) as a wearable companion/repeater — SX1262 (sub-GHz) or SX1280 (2.4 GHz), AXP2101 PMU, on-device ST7789 TFT + FT6336 touch, and BMA423 wrist-lift screen-wake.
- LilyGo T3S3 with LR1121 (multi-band: 2.4 GHz + sub-GHz) and with SX1280 (2.4 GHz) — both with SSD1306 OLED, all roles (companion BLE/USB, repeater, room server).
Already implemented + hardware-verified
This is built and running — I've published a working release on my fork so it can be tried/reviewed before any PR:
➡️ Release v0.3 — 20 flashable bins: https://github.com/GrayHatGuy/MeshCore/releases/tag/v0.3
Branch: feat/lilygo-twatch-s3-and-2.4ghz-lora — https://github.com/GrayHatGuy/MeshCore
Verified on hardware:
- 2.4 GHz messaging on a 3-node mesh — public + cross-chip SX1280<->LR1121, private channels @ 2.4 GHz, companion client-repeat @ 2450.
- Sub-GHz (LR1121 US 915) messaging + BLE pairing + OLED.
- T-Watch S3 Plus: ST7789 display, FT6336 touch, dynamic BLE PIN, BMA423 wrist-lift screen-wake.
Approach / API notes
- 2.4 GHz: re-enable SX128x per-variant (
build_unflags = -D RADIOLIB_EXCLUDE_SX128X=1); new CustomSX1280 / CustomLR1121 RadioLib wrappers; a compile-time LORA_MAX_BW so the wide 2.4 GHz bandwidths (e.g. 812.5 kHz) pass validation; isValidClientRepeatFreq() extended to the 2.4 GHz band.
- Default 2.4 GHz plan:
2450.0 MHz / 812.5 kHz / SF10 / CR4-5 / preamble 12 / sync 0x12.
- New variants under
variants/; new shared helpers/sensors/MotionBMA423.h; small ST7789LCDDisplay additions; a no-op MainBoard::loop() board hook (no behavior change to existing boards — verified by building Heltec v3 companion + repeater).
- T-Watch keeps
TWATCH_INHIBIT_SLEEP=1 for now (the dominant TFT-backlight draw is cut on idle; full CPU light-sleep is a follow-up given BLE/light-sleep coexistence).
Heads-up for the project (out of scope of this contribution)
The web flasher's repeater setup caps LoRa BW at 500 kHz, so it can't configure a 2.4 GHz repeater (default plan is 812.5). Its bandwidth selector would need the SX1280/LR1121 2.4 GHz bandwidths added — 203.125 / 406.25 / 812.5 / 1625.0 kHz — and the cap raised. Firmware already accepts them (LORA_MAX_BW).
Before I open the PR(s)
- The branch is based on an older point of the repo, so I'll rebase it onto current
dev once you're 👍 on the direction.
- How would you like this structured? Per CONTRIBUTING (one feature / one PR), I can split it — e.g. (a) 2.4 GHz LoRa core (SX128x wrappers +
LORA_MAX_BW), then (b) each board variant as its own PR — or submit it as a cohesive board-support set. Whatever's easiest for you to review.
- Anything you'd want changed in the approach first?
Thanks for taking a look!
Use-case / what problem this solves
MeshCore today has no support for the LilyGo T-Watch S3 family, and no support for 2.4 GHz LoRa (the SX128x driver is currently excluded in-repo). I'd like to contribute both:
Already implemented + hardware-verified
This is built and running — I've published a working release on my fork so it can be tried/reviewed before any PR:
➡️ Release v0.3 — 20 flashable bins: https://github.com/GrayHatGuy/MeshCore/releases/tag/v0.3
Branch:
feat/lilygo-twatch-s3-and-2.4ghz-lora— https://github.com/GrayHatGuy/MeshCoreVerified on hardware:
Approach / API notes
build_unflags = -D RADIOLIB_EXCLUDE_SX128X=1); newCustomSX1280/CustomLR1121RadioLib wrappers; a compile-timeLORA_MAX_BWso the wide 2.4 GHz bandwidths (e.g. 812.5 kHz) pass validation;isValidClientRepeatFreq()extended to the 2.4 GHz band.2450.0 MHz / 812.5 kHz / SF10 / CR4-5 / preamble 12 / sync 0x12.variants/; new sharedhelpers/sensors/MotionBMA423.h; smallST7789LCDDisplayadditions; a no-opMainBoard::loop()board hook (no behavior change to existing boards — verified by building Heltec v3 companion + repeater).TWATCH_INHIBIT_SLEEP=1for now (the dominant TFT-backlight draw is cut on idle; full CPU light-sleep is a follow-up given BLE/light-sleep coexistence).Heads-up for the project (out of scope of this contribution)
The web flasher's repeater setup caps LoRa BW at 500 kHz, so it can't configure a 2.4 GHz repeater (default plan is 812.5). Its bandwidth selector would need the SX1280/LR1121 2.4 GHz bandwidths added — 203.125 / 406.25 / 812.5 / 1625.0 kHz — and the cap raised. Firmware already accepts them (
LORA_MAX_BW).Before I open the PR(s)
devonce you're 👍 on the direction.LORA_MAX_BW), then (b) each board variant as its own PR — or submit it as a cohesive board-support set. Whatever's easiest for you to review.Thanks for taking a look!