Skip to content

Trifecta bridge — beta 11

Pre-release
Pre-release

Choose a tag to compare

@smellyspice smellyspice released this 05 Sep 02:49

What's new since beta10

  • WiFi/ESP-NOW tx power is now a per-board override, not a hardcoded
    80 (20dBm) at every call site.
    A standalone ESP-NOW RSSI/power-sweep
    field test found that some boards show a success-rate collapse at high
    tx power even though RSSI keeps improving — a brownout signature, not a
    range problem — while others just keep improving all the way to 20dBm
    with no downside. Based on that: C3 SuperMini and S3-Zero (companion
    envs) are lowered to 11dBm, Heltec V4's ESP-NOW+IP bridge env to
    15dBm (a stability/range midpoint — that unit also had ESP-NOW
    connect/range problems, so it trades back some power). Everything else
    keeps the prior effective default of 20dBm. Not yet a fleet-wide policy —
    each board type needs to be confirmed safe at high power individually,
    not assumed.
  • New: companion build for real-LoRa XIAO S3+WIO boards
    (Xiao_S3_WIO_companion_radio_wifi) — WiFi-pairing companion (phone app
    connects over your LAN instead of BLE), alongside the existing no-LoRa
    C3 SuperMini / S3-Zero companion builds.
  • New tools/monitor.py (not part of firmware, for the RSSI power-sweep
    test rig) — not relevant to normal Trifecta use.

Repeaters (Xiao S3 WIO, Heltec V3, Heltec V4)

Which file to flash:

  • -merged.bin — for a blank/fresh board. Flash at offset 0x0:
    esptool.py --chip esp32s3 write_flash 0x0 <file>-merged.bin
  • plain .bin (no -merged suffix) — app-only, for upgrading a board
    that's already running MeshCore. Preserves identity, WiFi credentials,
    and BLE bonds. Flash at offset 0x10000:
    esptool.py --chip esp32s3 write_flash 0x10000 <file>.bin

Debug builds (_debug) have full logging on for troubleshooting; the
plain envs are the same code with logging compiled out for regular use.

After flashing, configure over the standard MeshCore serial CLI
(set bridge.channel, set bridge.secret, set wifi.ssid, set wifi.pwd,
set ip.host, etc.) — no custom tooling needed.

Room server, no LoRa (Waveshare ESP32-S3-Zero, ESP32-C3 Super Mini)

Same flashing pattern as above (-merged.bin at 0x0 for blank, plain
.bin at 0x10000 to upgrade; use --chip esp32c3 for the C3 board).
If changing an existing board's role, erase flash fully first —
esptool.py erase_flash — before flashing the merged image, since a role
change doesn't touch the SPIFFS partition otherwise and stale config from
the old role can survive.

Configure the ESP-NOW join the same as a repeater (set bridge.channel/
set bridge.secret), then optionally set room.channel <name> <psk> for
the public-channel bridge.

Companion, no LoRa (Waveshare ESP32-S3-Zero, ESP32-C3 Super Mini)

No text CLI (speaks the binary phone-app protocol) — configure the
ESP-NOW join with the bundled script instead:

python3 set_bridge_params.py list
python3 set_bridge_params.py <port> set <channel 1-14> <secret>

Companion, real LoRa radio (XIAO S3+WIO)

Xiao_S3_WIO_companion_radio_wifi pairs over WiFi/TCP instead of BLE —
useful if you'd rather not deal with BLE pairing, or want to reach the
board from a phone/app on the same LAN. Same flashing pattern as above
(-merged.bin at 0x0 blank, plain .bin at 0x10000 upgrade,
--chip esp32s3). The shipped binary has placeholder WiFi credentials
baked in at build time — set your real network over the CLI/companion
protocol (set wifi.ssid, set wifi.pwd) after first boot, it does not
require reflashing.

Monitoring multiple boards at once

python3 watch_boards.py

Auto-detects every connected board, connects to all of them, and streams
their debug output live in one terminal. Press n to dump neighbors.all,
b to dump bridge status, c to toggle watching companion boards, from
every connected board at once. See the script's own --help for details.

Full writeup, use cases, and setup details: https://smellyspice.github.io/MeshCore/


A personal MeshCore fork, unmerged upstream, developer release only — do not run on a mesh you depend on.