Skip to content

Add Seeed Wio Tracker L2 Pro support with an optional LVGL touch UI - #3381

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

Add Seeed Wio Tracker L2 Pro support with an optional LVGL touch UI#3381
Hacuchino-hash wants to merge 2 commits into
meshcore-dev:devfrom
Hacuchino-hash:wio-tracker-l2-pro

Conversation

@Hacuchino-hash

Copy link
Copy Markdown
Contributor

Seeed Wio Tracker L2 Pro support, with an optional LVGL touch UI

Adds a variant for the Seeed Studio Wio Tracker L2 Pro (ESP32-S3, SX1262,
3.2" 320x240 touch LCD, L76K GNSS, SD slot), plus ui-lvgl: a touch
interface used by this board's standalone environment.

Two commits, reviewable separately:

  1. Variant - board, display, GNSS wrapper, target, envs, README.
    Self-contained; the companion, repeater and room server envs run on the
    existing shared code with no core changes.
  2. ui-lvgl - the touch UI, plus the small set of hooks it needs in the
    shared companion sources.

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_standalone_lvgl Standalone touch UI, Bluetooth compiled out
Wio_Tracker_L2_repeater Repeater
Wio_Tracker_L2_room_server Room server

What the standalone UI does

It is a full node interface, not a status screen, so the board can be used
without a phone: chats with history and delivery state, contacts with a
manual path picker and repeater path trace, on-device repeater
administration (login, status, CLI), an offline map from SD with pan and
zoom, radio and node settings, and a first-boot region and name wizard.

Shared files touched

Everything else lives in the new variant and ui-lvgl directories.

File Change
examples/companion_radio/AbstractUITask.h +6 optional virtuals, all default no-ops: delivery ack, login result, status and CLI replies, trace results
examples/companion_radio/MyMesh.cpp +92: uiLogin, uiRequestStatus, uiTracePath, advertFlood, each mirroring the existing phone command handler, plus the UI hook calls
examples/companion_radio/MyMesh.h +19 -3: declarations for the above; saveChannels, saveContacts and isValidClientRepeatFreq move to the public section so the settings screen can reach them
examples/companion_radio/main.cpp +2: #ifndef UI_LVGL around the boot banner
src/helpers/ui/UIScreen.h +1: virtual bool handleTouch(int x, int y)

No existing behaviour changes. The new virtuals are no-ops, so the other
UIs are unaffected.

Dependencies

lvgl @ 9.2.2, pinned and pulled only by the standalone env. LovyanGFX is
already used by sensecap_indicator-espnow. The UI builds on the existing
wrappers: CustomSX1262Wrapper, ESP32Board, LGFXDisplay,
MicroNMEALocationProvider, EnvironmentSensorManager, sendLogin,
sendRequest, createTrace, createSelfAdvert, rtc_clock, StrHelper.

Offline maps

The map reads the usual /maps/{z}/{x}/{y}.png layout from a FAT32 card,
so a tile folder prepared for any other device works unchanged. It also
understands packed tile columns and an optional /maps_dark/ night set;
both are documented in the variant README and neither is required.

Testing

On hardware: display, touch, LoRa TX and RX, BLE pairing, speaker, wake
button, boot splash, GPS fix, offline maps in the loose tile layout,
repeater administration (login, saved password, status, commands), path
trace with per-hop SNR, and client repeat mode on 918 MHz.

All five environments build. Packed tiles and the night tile set are not
yet verified on hardware.

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.

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.
An LVGL 9 interface for boards with a touch panel, used by this variant's
standalone environment: messaging with delivery state and history,
contacts with path control and repeater trace, a repeater admin screen,
an offline map from SD, and on-device radio and node settings.

The shared companion sources gain optional hooks for it: new no-op
virtuals on AbstractUITask (delivery ack, login result, status and CLI
replies, trace results), MyMesh entry points that mirror the existing
phone command paths (uiLogin, uiRequestStatus, uiTracePath, advertFlood),
and a touch handler on UIScreen. saveChannels, saveContacts and
isValidClientRepeatFreq move to the public section so the on-device
settings screen can reach them.

The boot splash draws the wordmark bitmap the other display UIs already
share, expanded to an alpha mask and tinted from the widget style.
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.

1 participant