Skip to content

Add Seeed Wio Tracker L2 Pro variant - #3381

Open
Hacuchino-hash wants to merge 2 commits into
meshcore-dev:devfrom
Hacuchino-hash:wio-tracker-l2-pro
Open

Hacuchino-hash wants to merge 2 commits into
meshcore-dev:devfrom
Hacuchino-hash:wio-tracker-l2-pro

Conversation

@Hacuchino-hash

@Hacuchino-hash Hacuchino-hash commented Sep 8, 2026 •

Copy link
Copy Markdown
Contributor

Add Seeed Wio Tracker L2 Pro variant

Board support for the Seeed Studio Wio Tracker L2 Pro: ESP32-S3 (Wio-S3
module, 16 MB flash, 8 MB PSRAM), SX1262, 3.2" 320x240 NV3031B touch LCD,
L76K GNSS, microSD, ES8311 speaker codec. Everything except the radio sits
behind a TCA9535 I/O expander, so the board class replays Seeed's power-up
sequence before the display and GNSS are usable.

This is the variant half of what was first submitted here. After #3431 the
touch UI was reworked onto MyMesh::Listener and moved to its own PR
(#3529), so this one is a plain variant with no shared-file changes.

Environments

Env Interface
Wio_Tracker_L2_companion_radio_ble Phone companion over BLE, standard ui-new display UI
Wio_Tracker_L2_companion_radio_usb Phone companion over USB serial, ui-new
Wio_Tracker_L2_repeater Repeater
Wio_Tracker_L2_room_server Room server

Files

boards/seeed_wio_tracker_l2.json and variants/wio-tracker-l2/ (board,
display driver on LovyanGFX, GNSS UART tap, speaker tones, target, envs,
README). The second commit adds the BLE companion env to the PR build
matrix; drop it if you would rather not grow the matrix.

Dependencies

LovyanGFX @ 1.2.30, pinned (already used by sensecap_indicator-espnow),
and arduino-audio-driver 0.2.1 for the ES8311 codec.

Testing

Builds: all four environments, plus Heltec_v3_companion_radio_ble and
RAK_4631_companion_radio_ble unchanged.

On hardware, this revision: the BLE companion build boots to the standard
display UI, pairs with the app and sends. LoRa TX and RX, touch, GPS fix
and speaker tones were verified on the same board code earlier; none of
it changed in the rebase.

Notes

  • Pre-release hardware; the pin map may change on production units.
  • Pin map derived from meshtastic/firmware PR #10909 and
    meshtastic/device-ui wio-l2 branches.
  • variants/wio-tracker-l2/README.md is the only per-variant README in the
    tree. It touches no shared file; happy to move the content to docs/ if
    that fits better.

@ripplebiz

Copy link
Copy Markdown
Member

Please take a look at this PR which will be refactoring a fair bit of the companion UI / MyMesh structure. This is an attempt to clean up the structure specifically for more ambitious companion forks like this one.
#3431

@Hacuchino-hash Hacuchino-hash changed the title Add Seeed Wio Tracker L2 Pro support with an optional LVGL touch UI Add Seeed Wio Tracker L2 Pro variant Sep 30, 2026
@Hacuchino-hash

Copy link
Copy Markdown
Contributor Author

Thanks, that is a much better fit. Rebased onto dev with #3431 in, and
split the submission so each half can be judged on its own:

  • This PR is now the variant only: board, display, GNSS, speaker, and the
    companion / repeater / room server envs. No shared-file changes.
  • The touch UI is Add ui-lvgl, a standalone touch UI for the Wio Tracker L2 Pro #3529. It is a MyMesh::Listener now: messages, CLI
    replies, ACKs, adverts and traces come in through the listener; login and
    status go out through sendLogin / sendRequest and are picked up in
    onUnhandledResponse (status by tag, login by sender, since that reply
    carries the server clock in the tag field); trace via createTrace +
    sendDirect. What is left in MyMesh there is a flood flag on
    advert() and three helpers made public for the settings screen.

I understand the standalone abstraction is still being worked out and that
the UI half may need to wait for it. The point of the second PR is to show
the difference against the current interface; I will follow along and adjust
when it changes.

Both branches build the matrix envs that touch these files, and both were
re-tested on the board: the companion pairs and sends; the standalone UI does
DMs with ACK, hashtag channels, repeater login / status / CLI, trace and
flood advert.

3urobeat pushed a commit to 3urobeat/MeshCore-Solo that referenced this pull request Oct 2, 2026
Seeed Wio Tracker L2 (ESP32-S3R8 16MB/8MB PSRAM, SX1262, NV3031B 320x240
QSPI LCD + GT911 touch + LP5814 backlight, TCA9535 expander gating every
rail, ADS1115 battery ADC, AW35615 USB-C, L76K GNSS).

Board layer ported from meshcore-dev/MeshCore PR meshcore-dev#3381 (Hacuchino-hash),
kept at the same paths for an easy upstream merge. Differences:
- display: dropped the UIColor theme (not adopted in this fork)
- GpsTap diagnostics wrapper omitted; GNSS reads Serial1 directly
- nv3031b ODR fix dropped: LovyanGFX >= 1.2.30 (now pinned) defines
  Panel_NV3031B::init_cmds itself -- the fix became a duplicate symbol
- MESH_DEBUG_PRINTLN with a non-literal format fixed (broke MESH_DEBUG builds)
- upload_speed 115200: baud is virtual on native USB; skips the switch

solo/wio-tracker-l2 adds Wio_Tracker_L2_companion_solo_bringup: ui-new
zoomed 2x, BOOT button only, no touch -- a hardware smoke test, not a
release target (deliberately not *_solo_dual, so CI doesn't publish it).
The real UI for this board will be a new LVGL frontend.

Verified on hardware: boot, display, radio, GPS, battery, BLE app link.
First boot takes tens of seconds while SPIFFS formats its 3.4 MB partition.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@IoTThinks

Copy link
Copy Markdown
Contributor

Wow, great.
I have just had a L2 Pro on hand and will try this PR.

ESP32-S3 with SX1262, a 3.2" 320x240 touch LCD, an L76K GNSS module and an
SD slot. Everything except the radio hangs off a TCA9535 expander, so the
board brings up power and reset lines in Seeed's documented order before
the display and GNSS are usable.

Companion (BLE and USB), repeater and room server environments run on the
existing shared code. Pre-release hardware: the pin map may change on
production units.
@IoTThinks

Copy link
Copy Markdown
Contributor

This PR is working fine.
The LCD is awesome clear.
Still can press the Boot button to change the menu.
Unable to use the touch screen.

BLE companions work fine.
The UI looks not so nice.
Well, this is the default UI. So it is fine.
image
image

I will try the next PR #3529

IoTThinks added a commit to IoTThinks/MeshCore that referenced this pull request Oct 8, 2026
@Hacuchino-hash

Copy link
Copy Markdown
Contributor Author

Thanks for testing, and for the photos. Touch doing nothing on that build is expected: the stock display UI has no touch handling at all, so the Boot button is the interface there, same as on the other boards. Touch only exists in the LVGL build over in #3529. Good to know the panel and BLE hold up on a second unit.

@Hacuchino-hash

Copy link
Copy Markdown
Contributor Author

One thing in your photos I don't see on my unit: the bright green line down the right edge and along the bottom. The stock UI draws a half-size frame and pushes it at 2x, and that push stops one pixel short of the panel edge, so the driver clears the panel once at start and that strip stays the background colour here. Yours showing green means the clear isn't reaching that column and row, which would point at a panel revision with a one-pixel offset in its visible window; mine is pre-release hardware. Two questions when you get a chance: does the green survive a power cycle, and is yours a retail unit? If it's the offset I'll add it to the panel config.

@IoTThinks

Copy link
Copy Markdown
Contributor

Mine is a gift from Seeed.
I guess it is not retail device yet.

This L2 is a bit different from other boards.
It uses expansion board not direct GPIOs.

Tuning the power now.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants