2026-05-28 10:54:09 +02:00
# Plus firmware for Seeed Wio Tracker L1
2025-01-13 14:07:48 +11:00
2026-05-12 21:08:08 +02:00
This branch extends the official MeshCore companion radio firmware for the **Seeed Wio Tracker L1** .
2025-01-13 14:07:48 +11:00
2026-05-28 10:54:09 +02:00
Join the discussion on the offical MeshCore discord: https://discord.gg/sdhYArU2jr
2026-05-17 18:51:48 +02:00
2026-05-23 23:52:04 +02:00
< img src = "./img/radios.jpeg" >
2026-05-24 11:04:51 +02:00
[E-ink case ](https://www.printables.com/model/1420534-seeed-wio-tracker-l1-e-ink-enclosure )
[Oled case ](https://www.printables.com/model/1380791-meshpack-seeed-l1-oled )
2026-05-28 10:54:09 +02:00
<!-- ### E - ink Display
2026-05-23 00:07:41 +02:00
The e-ink variant targets the Wio Tracker L1 fitted with a 2.13″ GxEPD2 panel (250 × 122 px). All screens have been adapted for the e-ink panel:
- **Adaptive layout** — every screen reflows correctly in both landscape (250 × 122) and portrait (122 × 250) orientations
- **Display rotation** — configurable in Settings › Display; applied immediately and persisted across reboots
- **Scaled navigation dots** — dot indicators on the home screen scale with line height so they remain visible at all orientations
2026-05-28 10:54:09 +02:00
- **Clock seconds suppressed by default** — seconds are hidden to reduce per-second panel refreshes and extend display lifetime; re-enable in Settings › Display -->
2026-05-23 00:07:41 +02:00
---
2026-05-28 10:54:09 +02:00
## Feature highlights
2025-01-13 14:07:48 +11:00
2026-05-28 10:54:09 +02:00
- Extended language support with native Unicode rendering and input (Lemon font) alongside the original ASCII mode (Default font with transliteration)
2025-01-13 14:07:48 +11:00
2026-05-28 10:54:09 +02:00
- [Messages Screen ](./docs/plus_features/message_screen.md ) — view and send messages, open message details, reply with quick messages or custom text, per-channel notification and melody overrides
2026-05-15 09:21:32 +02:00
2026-05-28 10:54:09 +02:00
- [Favourites Dial ](./docs/plus_features/favourites_dial.md ) — pin up to six contacts for quick access from the home screen
2026-05-19 20:37:56 +02:00
2026-05-28 10:54:09 +02:00
- [Settings Screen ](./docs/plus_features/settings_screen.md ) — configure display, sound, home page order, radio and system settings
2026-05-19 20:37:56 +02:00
2026-05-28 10:54:09 +02:00
- [Clock Screen ](./docs/plus_features/clock_screen.md ) — view time and date plus up to three configurable sensor values
2025-01-13 14:07:48 +11:00
2026-05-28 10:54:09 +02:00
- [Screen Lock ](./docs/plus_features/screen_lock.md ) — lock the device to prevent accidental keypresses, with a lock screen showing time and sensor data
2026-05-19 20:37:56 +02:00
2026-05-28 10:54:09 +02:00
- [Tools Screen ](./docs/plus_features/tools_screen.md ) — GPS trail recording and export, ringtone editor, auto-reply bot, and more
2026-05-19 20:37:56 +02:00
2026-05-28 10:54:09 +02:00
## Firmware Variants
2025-05-18 02:18:32 +12:00
2026-05-28 10:54:09 +02:00
Two firmware builds are published with each release:
2025-05-18 02:18:32 +12:00
2026-05-28 10:54:09 +02:00
| Variant | Display | File |
|---------|---------|------|
| **OLED** | SSD1306 / SH1106 128 × 64 | `WioTrackerL1_companion_dual_*.uf2` |
| **E-ink** | GxEPD2 250 × 122 | `WioTrackerL1Eink_companion_dual_*.uf2` |
2025-05-18 02:18:32 +12:00
2026-05-28 10:54:09 +02:00
Both variants are built from a single codebase and share the same feature set. The `dual` in the filename means a single binary supports both BLE and USB serial — there are no separate BLE/USB builds.
2026-05-19 14:07:20 +02:00
2026-05-28 10:54:09 +02:00
>[!WARNING]
>When migrating from official/custom firmware, backup your data and **perform factory reset** to prevent conflicts with existing settings and data:
>1. Open device settings in the companion app and download data backup
>2. Go to [MeshCore Flasher ](https://meshcore.io/flasher ) website
>3. Select "Wio Tracker L1 Pro"
>4. Choose any of the firmware variant
>5. Perform "Erase flash"
2026-05-20 10:04:14 +02:00
2026-05-19 14:07:20 +02:00
---
2026-05-12 21:08:08 +02:00
## Development
2025-05-18 02:18:32 +12:00
2026-05-12 21:08:08 +02:00
This fork tracks the upstream [MeshCore ](https://github.com/ripplebiz/MeshCore ) repository. To prevent upstream changes from overwriting this README during merges, `README.md` is protected via `.gitattributes` . After cloning, run once:
2025-05-18 02:18:32 +12:00
2026-05-12 21:08:08 +02:00
```sh
git config merge.ours.driver true
```
2026-05-26 21:26:07 +02:00
#### Display Screenshot Tool
2026-05-28 10:54:09 +02:00
> [!NOTE]
> The screenshot feature requires the `ENABLE_SCREENSHOT` build flag to be enabled. Add `-D ENABLE_SCREENSHOT` to your PlatformIO build flags, then recompile and flash the firmware.
2026-05-26 21:26:07 +02:00
The firmware supports capturing the current display contents and transmitting
it over USB serial. This is useful for debugging, remote monitoring, or
creating documentation.
**Important:** When the device is connected to the companion app, the USB
serial port is not available for communication. To use the screenshot tool,
ensure the device is not connected to the companion app.
**Usage:**
1. Build and flash firmware with `-D ENABLE_SCREENSHOT` build flag enabled
Example for the OLED dual firmware:
```
PLATFORMIO_BUILD_FLAGS="-D ENABLE_SCREENSHOT" pio run -e WioTrackerL1_companion_dual -t upload
```
2. Connect the device to your computer via USB (ensure no companion app connection)
3. Install dependencies and run the screenshot tool. To manage python and python dependencies, use uv: https://docs.astral.sh/uv/
```sh
cd tools
uv run tools/screenshot.py
```
Options:
- `--port PORT` — Serial port to use (default: auto-detect)
- `--scale SCALE` — Upscale factor for the output image (1=no upscale, 2=2x, 3=3x, 4=4x, etc.; default: 1)
4. In the tool's interactive menu, press **S** to capture a screenshot
5. The tool will save the screenshot as a PNG file in `tools/pngs/` with a timestamp-based filename
**How it works:**
- The tool sends the `CMD_GET_SCREENSHOT` command (66) to the device
- The device responds with `RESP_CODE_SCREENSHOT` (29) containing the framebuffer data
- The framebuffer is transmitted in chunks (128× 64 display = 1024 bytes, split across multiple frames)
- The tool reassembles the chunks and converts them to a PNG image