FieldMesh · Releases
from GitHub · updated 2026-06-216 releases
v5.3 # 2 months ago · 2026-04-28 07:00 UTC
[5.3] — MeshCore Upstream Sync
Changes
- MeshCore upstream alignment — codebase updated to track MeshCore v1.15.0; no FieldMesh-specific feature changes in this release
Download latest build
EU Offgrid frequency
ThinkNode_M1_companion_radio_ble_FieldMeshv5.3.zip WioTrackerL1_companion_radio_ble_FieldMeshv5.3.zip t1000e_companion_radio_ble_FieldMeshv5.3.zip
US Offgrid frequency
ThinkNode_M1_companion_radio_ble_USFieldMeshv5.3.zip WioTrackerL1_companion_radio_ble_USFieldMeshv5.3.zip t1000e_companion_radio_ble_USFieldMeshv5.3.zip
v5.2 # 2 months ago · 2026-04-09 14:29 UTC
[5.2] — HomeScreen Redesign & Online Node Counter
New features
- Online node counter — HomeScreen now shows how many nodes have been heard in the last 30 minutes, combining advert senders and message senders in a single deduplicated count (16-entry LRU cache)
- Node counter icon — the online count is displayed with a filled circle icon (●) instead of plain [X] text
- Real channel name in title bar — message history and favorite preview now show the actual channel name (e.g. "Public") instead of the hardcoded "[CH]" tag
- Mode indicator — GPS-SHARE and OFF-GRID modes are now shown on the HomeScreen FIRST page
Changes
- M1 HomeScreen layout — node counter fixed at y=22 regardless of
connection state; MSG:X replaces
< Connected >when disconnected; nodes_icon y-offset corrected (+3px) to align with text baseline - Channel message title bar — sender name omitted from title bar for channel messages (already visible inside the message text)
- Favorite indicator — clears correctly after all messages are deleted (deleteEntry / clearAll); no longer persists stale data after app sync
- MSG:X counter — hidden on HomeScreen while phone app is connected
- RECENT/TRACKING pages — row limits now display-height-adaptive via max_y variable instead of hardcoded values
Bug fixes
- BLE init: send_queue flood — between
onSecured()andCMD_APP_STARTasync pushes could fill all 12 send_queue slots, causing the app to time out. Fixed via_app_initializedflag andisWriteBusy()guard - Double-counting in node counter — nodes heard via both advert and
message were counted twice. Fixed via
countOnlineNodesExcluding() - adv_fresh buffer — was reusing the 4-entry RECENT display array, capping the advert-based node count at 4. Now uses a dedicated ADVERT_PATH_TABLE_SIZE (16) buffer
- formatRelTime undefined behavior — replaced signed int cast with safe uint32_t arithmetic
Technical notes
- Changes confined to
UITask.cpp,UITask.h,MyMesh.cpp,MyMesh.h,icons.h DataStore,AbstractUITask,platformio.iniunaffected
Download latest build
EU Offgrid frequency
ThinkNode_M1_companion_radio_ble_FieldMeshv5.2.zip WioTrackerL1_companion_radio_ble_FieldMeshv5.2.zip t1000e_companion_radio_ble_FieldMeshv5.2.zip
US Offgrid frequency
ThinkNode_M1_companion_radio_ble_USFieldMeshv5.2.zip WioTrackerL1_companion_radio_ble_USFieldMeshv5.2.zip t1000e_companion_radio_ble_USFieldMeshv5.2.zip
v5.1 # 3 months ago · 2026-04-04 08:18 UTC
[5.1] — Headless Device Support (T1000-E, RAK WiseMesh TAG)
New features
- Headless device support —
ui-orignow fully integrated into FieldMesh; devices with no display and a single button (Seeed T1000-E, RAK WiseMesh TAG) are supported as first-class citizens - Off-Grid toggle via 5× click — 5 presses on the single button toggles Off-Grid mode on/off; buzzer feedback is forced regardless of mute state (ascending tone = on, descending = off)
- SOS alarm via buzzer — incoming
!SOSmessages trigger a continuous buzzer siren that overrides quiet mode and loops until acknowledged with a short press
Changes
- All button actions (advert, GPS toggle, buzzer toggle, Off-Grid toggle) now produce forced buzzer feedback regardless of quiet mode — essential for display-less operation
- Ascending tone (
c,e) = feature enabled; descending tone (e,c) = feature disabled — consistent across all actions newMsg()signature updated to includeis_favoriteparameter — compatible with V5AbstractUITaskinterfacerefreshDisplay()andisOnRecentOrTrackingPage()added as explicit no-op overrides — required forMyMeshcompatibility
Button mapping (headless devices — single button)
Press Action 1× Wake display / acknowledge SOS alarm 2× Send advert 3× Buzzer mute on/off 4× GPS on/off 5× Off-Grid mode on/off Long press (first 8 s) CLI Rescue Mode Long press Shutdown Technical notes
- Changes confined to
ui-orig/Button.h,ui-orig/Button.cpp,ui-orig/UITask.h,ui-orig/UITask.cpp ui-new(ThinkNode M1, Wio Tracker L1) is completely unaffected_buzzer_restore_quietflag ensures non-blocking buzzer playback before quiet state is restored
Download latest build
EU Offgrid frequency
ThinkNode_M1_companion_radio_ble_FieldMeshv5.1.zip WioTrackerL1_companion_radio_ble_FieldMeshv5.1.zip t1000e_companion_radio_ble_FieldMeshv5.1.zip
US Offgrid frequency
ThinkNode_M1_companion_radio_ble_USFieldMeshv5.1.zip WioTrackerL1_companion_radio_ble_USFieldMeshv5.1.zip t1000e_companion_radio_ble_USFieldMeshv5.1.zip
- Headless device support —
v5.09 # 3 months ago · 2026-04-03 12:35 UTC
FieldMesh V5 — the first release that makes the node fully standalone for messaging. No phone required.
What's new
Message History (ThinkNode M1 + Wio Tracker L1)
- Received messages are stored on the device and browsable without the companion app
- Home screen redesigned: shows unread counter and the name + timestamp of the most recent message from a favourite contact
- Long press on home screen opens the message menu (filter: All / Favourites)
- One message per view, newest first — short press = next, long press = clear all
- Channel tag (
[CH1],[DM]) and timestamp shown per message - New message while history is open:
+1 newalert, no automatic screen switch
Text Input & Send (Wio Tracker L1 only)
- Compose and send channel messages directly from the device via joystick
- Channel select → character compose → "Sent!" confirmation
- Character selection via joystick left/right, confirm with short press, send with long press
- 80 character limit
Important notes
- Message history is RAM-only — messages are lost on reboot. This is intentional: smartphone sync via the companion app is never affected by what the device shows or clears.
- Text send is available on Wio Tracker L1 only. Single-button input on ThinkNode M1 does not support text composition.
- No DM sending — channel messages only.
Files changed
UITask.h,UITask.cpp,MyMesh.h,MyMesh.cpp,AbstractUITask.hFull changelog
See RELEASE.md for the complete version history.
v4.04 # 3 months ago · 2026-03-30 20:55 UTC
V4.04 — Wio Tracker L1 Joystick UI Fixes
target.cpp / target.h
- Added
joystick_up(JOYSTICK_UP) andjoystick_down(JOYSTICK_DOWN) asMomentaryButton
UITask.cpp — loop()
- Joystick Up →
KEY_PREV, Joystick Down →KEY_NEXT - Joystick press short →
KEY_ENTER(confirm in menus) - Joystick press long →
handleLongPress()(context action)
UITask.cpp — HomeScreen
- Removed dead code:
KEY_ENTERon Tracking page directly toggled GPS-Share — unused since V2.02 (Outdoor Menu), but accidentally active on Wio Tracker - Tracking hint text:
"Settings: press Enter"(joystick) instead of"Settings: long press"
UITask.cpp — OutdoorMenuScreen
- Removed footer
"short=next long=select"on joystick devices (self-explanatory) - Menu navigation: Up/Down instead of Left/Right
UITask.cpp — SOSSendScreen
handleLongPress()now sendsKEY_SELECTinstead ofKEY_ENTERtoSOSSendScreento distinguish short and long press- Short press = always go back (both states)
- Long press = confirm / send (both states)
- Hint text both states:
"long press: SEND
- Added
v4.03 # 3 months ago · 2026-03-30 14:46 UTC
V4.03 – Backlight & Display Logic Overhaul
Fixed
AUTO_OFF_MILLIS=0removed fromplatformio.ini– display now correctly sleeps after 15 seconds of inactivity- 5-minute backlight auto-off timer removed – no longer needed with display sleep active
- Backlight now correctly follows
_backlight_onstate on everyturnOn()call, overriding GxEPD driver behavior
Improved
- Backlight state is fully decoupled from display wake events – incoming messages and adverts wake the display without changing the backlight state
- Added
refreshDisplay()– wakes display briefly on incoming adverts when on Recent or Tracking page, without affecting backlight - Advert-triggered display refresh works even when a phone is connected via BLE
Technical
- Added
refreshDisplay()andisOnRecentOrTrackingPage()toAbstractUITaskas virtual methods _backlight_off_atmember removed fromUITask