Skip to content

Releases: GrayHatGuy/MeshCore

v0.3 — BMA423 wrist-lift screen-wake (T-Watch S3)

03 Jun 14:39

Choose a tag to compare

Third tagged release. Adds on-device wrist-lift screen-wake to the LilyGo T-Watch S3 family on top of v0.2. Tagged on the feature branch (consistent with v0.1/v0.2) as the "as-submitted-upstream" snapshot for the meshcore-dev PR. Same 20 variants as v0.2, rebuilt at this commit.

Changelog since v0.2

  • BMA423 accelerometer + wrist-lift screen-wake (T-Watch S3) — new header-only MotionBMA423 driver (lewisxhe/SensorLib): the on-board BMA423 (INT GPIO14) wakes the display when you lift/move the watch (raw accel-magnitude motion), with the Bosch wrist-tilt + double-tap feature engines also enabled. Adds a no-op MainBoard::loop() board hook + board.loop() in the companion/repeater main loops (no-op on all other boards). Commit ab0203f4.

Full diff: v0.2...v0.3 — 1 commit, 8 files, +156.

Hardware-verified

  • Wrist-lift screen-wake on the T-Watch S3 Plus (SX1280): display blanks after ~15 s idle (backlight off via GPIO45) and lights on a lift. Sensitivity knob = MOTION_WAKE_FRAC (default 0.18).
  • Carried from v0.2 (still verified): 2.4 GHz messaging (3-node mesh, public + cross-chip SX1280↔LR1121; private channels @ 2.4 GHz; companion client-repeat @ 2450); sub-GHz LR1121 US 915; T-Watch ST7789 display + FT6336 touch + dynamic BLE PIN.

Notes / known limitations

  • App caps BW at 500 kHz — 2.4 GHz uses the compiled 812.5 default; set BW via the firmware default, not the app.
  • Online flasher needs 2.4 GHz bandwidths — the web flasher's repeater setup can't configure a 2.4 GHz repeater (it caps at 500 kHz). Its bandwidth selector needs the SX1280 / LR1121 (2.4 GHz high-band) LoRa bandwidths added, and the cap raised: 203.125 / 406.25 / 812.5 / 1625.0 kHz. Firmware already accepts them (LORA_MAX_BW=1700); the flasher UI is the missing piece.
  • T-Watch power — keeps TWATCH_INHIBIT_SLEEP=1 (CPU does not light-sleep). The dominant draw (TFT backlight) is cut on idle; proper CPU light-sleep is a follow-up (BLE/light-sleep coexistence is non-trivial).
  • Post-flash — after flashing a T-Watch it may sit on "Loading…" ~30–60 s → press RST (once per flash; ESP32-S3 native-USB behavior).

Firmware images (20 — attached)

Merged full-flash images, filename = env name. ESP32-S3, flash at offset 0x0 (esptool --chip esp32s3 write_flash 0x0 <env>.bin, or pio run -e <env> -t upload).

T-Watch S3 family (8):

  • LilyGo_TWatch_S3_sx1262_companion_radio_ble · _usb · _repeater
  • LilyGo_TWatch_S3_sx1280_companion_radio_ble · _usb · _repeater
  • LilyGo_TWatch_S3_Plus_sx1262_companion_radio_ble · LilyGo_TWatch_S3_Plus_sx1280_companion_radio_ble

T3S3 LR1121 (8):

  • 2.4 GHz: LilyGo_T3S3_lr1121_companion_radio_ble · _usb · _repeater · _room_server
  • US sub-GHz: LilyGo_T3S3_lr1121_subghz_companion_radio_ble · _usb · _repeater · _room_server

T3S3 SX1280 (4):

  • LilyGo_T3S3_sx1280_companion_radio_ble · _usb · _repeater · _room_server

v0.2 — T3S3 SX1280 (2.4 GHz) variant + companion client-repeat

03 Jun 00:40

Choose a tag to compare

Second tagged release. Adds the T3S3 SX1280 (2.4 GHz) variant and a 2.4 GHz companion client-repeat fix on top of v0.1. 2.4 GHz messaging is hardware-verified (public, cross-chip SX1280↔LR1121); the new items below are built but pending on-air verification.

Changelog since v0.1

  • Companion client-repeat on 2.4 GHzisValidClientRepeatFreq() now includes the 2.4 GHz ISM band (2400–2500 MHz), so a companion can act as a repeater at 2450 (was rejected as ILLEGAL_ARG). Commit 33f517e2.
  • New variant: LilyGo T3S3 + SX1280 (2.4 GHz) — same board (t3_s3_v1_x) + SSD1306 OLED as the LR1121 T3S3; SX1280 with external RF switch (RXEN=21 / TXEN=10); OLED reset = −1 (GPIO21 is RXEN). Commit 6094cd46.
  • (A BW lower-bound guard was trialed and reverted — SX1280/LR1121 legitimately support 203/406 kHz; the app's 500 kHz BW cap stays a documented note, not a firmware limit.)

Full diff: v0.1...v0.2

✅ Open items to verify this release

  • 2.4 GHz client-repeat — flash a 2.4 GHz companion, enable repeat mode at 2450, confirm it forwards when no dedicated repeater is in range.
  • T3S3 SX1280 variant on hardware — radio init (RADIOLIB_ERR_NONE), 2.4 GHz TX/RX, OLED, and interop with the existing SX1280/LR1121 2.4 GHz mesh.
  • Private channels @ 2.4 GHz — add the same channel name + secret on all nodes; confirm private messages decode (public already works).
  • T-Watch power-save — builds currently never light-sleep (TWATCH_INHIBIT_SLEEP=1, radio-safe but continuous draw); confirm behavior / decide power strategy before upstreaming.

Already verified (v0.1 + testing): sub-GHz messaging (LR1121 US 915); 2.4 GHz public messaging, cross-chip SX1280↔LR1121 (3-node mesh); T-Watch S3 Plus display + FT6336 touch + dynamic PIN + pairing.

Variants (3)

  • lilygo_twatch_s3 — T-Watch S3 family (SX1262 sub-GHz + SX1280 2.4 GHz; -D T_WATCH_S3_PLUS = GPS). Companion variants drive the ST7789 240×240 TFT + FT6336 touch + proportional font.
  • lilygo_t3s3_lr1121 — T3S3 v1.3 LR1121, multi-band (2.4 GHz + US sub-GHz 910.525). SSD1306 OLED on all roles.
  • lilygo_t3s3_sx1280new — T3S3 with SX1280 (2.4 GHz). SSD1306 OLED on all roles.

Default frequency plans

Plan Freq BW SF CR Preamble Sync TX
2.4 GHz (SX1280 / LR1121) 2450.0 MHz 812.5 kHz 10 4/5 12 0x12 13 dBm
US sub-GHz (LR1121) 910.525 MHz 62.5 kHz 7 4/5 16 0x12 20 dBm
SX1262 T-Watch repo default sub-GHz region plan

Firmware images (20 — attached)

Merged full-flash images, filename = env name. ESP32-S3, flash at offset 0x0 (esptool --chip esp32s3 write_flash 0x0 <env>.bin, or pio run -e <env> -t upload). ⚠️ After flashing a T-Watch, it may sit on "Loading…" ~30–60 s → press RST (once per flash; ESP32-S3 native-USB behavior).

T-Watch S3 family (8):

  • LilyGo_TWatch_S3_sx1262_companion_radio_ble · _usb · _repeater
  • LilyGo_TWatch_S3_sx1280_companion_radio_ble · _usb · _repeater
  • LilyGo_TWatch_S3_Plus_sx1262_companion_radio_ble · LilyGo_TWatch_S3_Plus_sx1280_companion_radio_ble

T3S3 LR1121 (8):

  • 2.4 GHz: LilyGo_T3S3_lr1121_companion_radio_ble · _usb · _repeater · _room_server
  • US sub-GHz: LilyGo_T3S3_lr1121_subghz_companion_radio_ble · _usb · _repeater · _room_server

T3S3 SX1280 (4, new):

  • LilyGo_T3S3_sx1280_companion_radio_ble · _usb · _repeater · _room_server

v0.1 — T-Watch S3 family + T3S3 LR1121: displays, touch, dynamic PIN

02 Jun 22:10

Choose a tag to compare

First tagged release of LilyGo T-Watch S3 family + T3S3 LR1121 support for MeshCore, building on the V0.0 pre-release. On-device displays, capacitive touch, and the dynamic pairing PIN are in and hardware-validated, and 2.4 GHz messaging is now verified on hardware (see below).

⚠️ First boot after flashing a T-Watch

On the first power-up right after flashing, the T-Watch can sit on the "Loading…" screen for ~30–60 s. Wait that long, then press the RST button and it boots normally. This only happens once after a flash — it does not recur on subsequent boots, battery power-on, or OTA. (Standard ESP32-S3 native-USB post-flash behavior; a cold-boot radio retry is also built in.)

Verification status

  • Sub-GHz — messaging works with the MeshCore app. LR1121 US sub-GHz (910.525 / 62.5 kHz / SF7) confirmed end-to-end on a T3S3 v1.3 (live TX/RX on public channels, BLE pairing, OLED). SX1262 T-Watch variants use the same standard sub-GHz path.
  • 2.4 GHz — messaging verified (public, cross-chip). 3-node mesh — T-Watch SX1280 companion + T3S3 LR1121 repeater + T3S3 LR1121 companion at 2450 / 812.5 kHz / SF10 / CR4-5: public-channel messaging, advertising, repeater detection, nearby-node discovery, and RX-log ADVERTs all confirmed — proving SX1280 ↔ LR1121 interoperate at 2.4 GHz. (Private channels not yet confirmed — needs the matching channel key on all nodes, an app/config step.)
  • T-Watch S3 UI — confirmed on a T-Watch S3 Plus: ST7789 display, FT6336 touch, proportional font, dynamic PIN pairing.

Known issues / app notes

  • Bandwidth in the app caps at 500 kHz and shows blank for the 812.5 kHz 2.4 GHz value — this is an app UI limit, not the firmware (the verified mesh runs 812.5). On 2.4 GHz builds, keep BW on the compiled default or set it via meshcore-cli — do not change BW in the app (saving radio settings there can push BW ≤ 500 and break the 2.4 GHz link).
  • Client-repeat (companion "repeat" mode) is not available at 2.4 GHz in v0.1 — the firmware's repeat-frequency whitelist didn't include the 2.4 GHz band. Fixed in the next release.
  • 2.4 GHz is a custom frequency plan, not a named region — the app's region picker won't list/discover it; nodes run the compiled 2450 plan directly.

What's new since V0.0

On-device UI

  • T3S3 LR1121 — 0.96" SSD1306 OLED on every role (companion / repeater / room server, both bands). HW-confirmed.
  • T-Watch S3 — 1.54" 240×240 ST7789 TFT on all companion variants (SX1262, SX1280, both Plus), with FT6336 capacitive touch: tap = wake / next page, touch-and-hold = long-press (e.g. advertise / toggle BT). BOOT button also paginates. Uses a proportional FreeSans 9 pt font so the dense 2-column screens (freq/SF, GPS pos/alt) and the pairing PIN read cleanly on the 240×240 panel. HW-confirmed on a T-Watch S3 Plus.
  • Dynamic BLE pairing PIN on display builds (the standard MeshCore scheme): a random per-boot 6-digit PIN shown on screen; static 123456 only on headless / USB builds. HW-confirmed.

Power / sleep (T-Watch)

  • AXP2101 rail map corrected to the LilyGo factory table — ALDO2 = backlight, ALDO3 = display+touch, ALDO4 = radio — with ALDO4 held on at all times.
  • TWATCH_INHIBIT_SLEEP=1 (default on the T-Watch): never light-sleeps, so the radio rail stays continuously powered and the SX1280 is never sleep/wake cycled. Toggleable build flag.
  • Cold-boot radio retry in radio_init() so the first boot after flashing self-heals (see first-boot note above).

Environments

LilyGo T-Watch S3 family (lilygo_twatch_s3; -D T_WATCH_S3_PLUS adds GPS) — companion variants drive the ST7789 + touch:

  • SX1262 (sub-GHz): _companion_radio_ble · _usb · _repeater
  • SX1280 (2.4 GHz): _companion_radio_ble · _usb · _repeater
  • Plus (+GPS): Plus_sx1262_companion_radio_ble · Plus_sx1280_companion_radio_ble

LilyGo T3S3 v1.3 LR1121 (lilygo_t3s3_lr1121, multi-band) — all drive the SSD1306 OLED:

  • 2.4 GHz: _companion_radio_ble · _usb · _repeater · _room_server
  • US sub-GHz: _subghz_companion_radio_ble · _usb · _repeater · _room_server

Default frequency plans

Plan Freq BW SF CR Preamble Sync TX
2.4 GHz (SX1280 / LR1121) 2450.0 MHz 812.5 kHz 10 4/5 12 0x12 13 dBm
US sub-GHz (LR1121) 910.525 MHz 62.5 kHz 7 4/5 16 0x12 20 dBm
SX1262 T-Watch repo default sub-GHz region plan

Firmware images (attached)

Merged full-flash images (bootloader + partitions + app); filename = env name. Both boards are ESP32-S3 — flash at offset 0x0:

esptool --chip esp32s3 write_flash 0x0 <env-name>.bin

(Or pio run -e <env-name> -t upload.) ⚠️ After flashing, press RST once (see the T-Watch first-boot note above).

V0.0 changelog (prior pre-release)

  • Added the LilyGo T-Watch S3 family (SX1262 + SX1280, -D T_WATCH_S3_PLUS GPS) and T3S3 v1.3 LR1121 variants.
  • Added 2.4 GHz LoRa support (previously SX128x was excluded): new CustomSX1280 / CustomLR1121 RadioLib wrappers, compile-time LORA_MAX_BW, default 2450 plan.
  • Added the US sub-GHz LR1121 plan + envs (910.525 / 62.5 / SF7).
  • Headless builds only (BLE/USB companion + repeater); no on-device displays yet.

V0.0 — T-Watch S3 family + 2.4 GHz LoRa (SX1280/LR1121)

02 Jun 05:16

Choose a tag to compare

Pre-release for hardware testing — NOT yet validated on a physical device.

Every environment below compiles clean under PlatformIO (RadioLib 7.7.1), but none has been flashed or RF-tested yet. Tag V0.0 = first cut, hardware bring-up pending.

Variants created

lilygo_twatch_s3 — LilyGo T-Watch S3 family (ESP32-S3 + AXP2101 PMU; combined SX1262 sub-GHz and SX1280 2.4 GHz; -D T_WATCH_S3_PLUS enables on-board GPS):

  • LilyGo_TWatch_S3_sx1262_companion_radio_ble · _usb · _repeater (SX1262, sub-GHz)
  • LilyGo_TWatch_S3_sx1280_companion_radio_ble · _usb · _repeater (SX1280, 2.4 GHz)
  • LilyGo_TWatch_S3_Plus_sx1262_companion_radio_ble (SX1262 + GPS)
  • LilyGo_TWatch_S3_Plus_sx1280_companion_radio_ble (SX1280 + GPS)

lilygo_t3s3_lr1121 — LilyGo T3S3 v1.3 with LR1121 (multi-band; band auto-selected from LORA_FREQ):

  • 2.4 GHz: LilyGo_T3S3_lr1121_companion_radio_ble · _usb · _repeater
  • US sub-GHz: LilyGo_T3S3_lr1121_subghz_companion_radio_ble · _usb · _repeater

Default 2.4 GHz LoRa frequency plan (SX1280 & LR1121 2.4 GHz variants)

Compiled-in default for every sx1280 and 2.4 GHz lr1121 environment (changeable later via the companion app / CLI). Identical for both radios:

Parameter Value
Frequency 2450.0 MHz
Bandwidth (BW) 812.5 kHz
Spreading factor (SF) 10
Coding rate (CR) 4/5
Preamble length 12 symbols
Sync word 0x12 (private)
TX power 13 dBm (2.4 GHz PA max)

Default US sub-GHz LoRa plan (T3S3 LR1121 _subghz envs)

Matches the MeshCore "USA" preset, so it interoperates with an existing sub-GHz fleet and works with the standard MeshCore app / region tooling (the 2.4 GHz CLI workaround is not needed for sub-GHz):

Parameter Value
Frequency 910.525 MHz
Bandwidth (BW) 62.5 kHz
Spreading factor (SF) 7
Coding rate (CR) 4/5
Preamble length 16 (MeshCore default)
Sync word 0x12 (private)
TX power 20 dBm

The SX1262 sub-GHz T-Watch envs keep the repo's default sub-GHz region plan.

Firmware images (attached)

Each .bin asset is a merged full-flash image (bootloader + partitions + app). Filename = environment name. Both boards are ESP32-S3 — flash at offset 0x0:

esptool.py --chip esp32s3 write_flash 0x0 <env-name>.bin

(Or build from source: pio run -e <env-name> -t upload.)

Other changes

  • New RadioLib wrappers CustomSX1280 and CustomLR1121; SX128x is re-enabled per-env (it was excluded repo-wide).
  • Compile-time LORA_MAX_BW (default 500) so the wide 2.4 GHz bandwidth (812.5 kHz) passes freq/region validation — existing sub-GHz boards are unaffected (regression-checked against Heltec_v3).

Known caveats / test focus

  • LR1121 RF-switch table is best-effort (sourced from the Meshtastic tlora_t3s3_v1 reference) and serves both bands. If the LR1121 inits but won't TX/RX, adjust the table in variants/lilygo_t3s3_lr1121/target.cpp — sub-GHz uses MODE_RX/MODE_TX_HP, 2.4 GHz uses MODE_TX_HF.
  • GPS (Plus): if no fix, swap PIN_GPS_TX / PIN_GPS_RX.
  • Interop: treat SX1280 and LR1121 as separate 2.4 GHz networks unless verified to interoperate (same logical "private" sync word, different underlying PHY registers).

First-boot sanity (USB serial): radio init should return RADIOLIB_ERR_NONE.

Commits: cf14ea6 (variants + 2.4 GHz) · cd5d30a (T3S3 LR1121 US sub-GHz)