Before you start
Flashing in the browser uses Web Serial, which only some setups support. Check these first.
✅ You need
- A desktop or laptop computer (not a phone or tablet)
- Chrome, Edge, or Opera (recent version)
- A USB-C data cable (some cables are charge-only and will not work)
- Your XIAO ESP32S3 + Wio-SX1262 device
❌ Will not work
- Safari and Firefox (no Web Serial support) blocked
- Phones and tablets (iPhone, iPad, Android) blocked
- A page served over plain
http://(Web Serial needshttps://or localhost)
Flash it
- Plug the device into your computer with a USB-C data cable. The small light on the board should come on.
- Choose the firmware for the kind of device you are making (see Which firmware below). The flasher detects the chip automatically, but you still pick the role.
- Click the button and, in the little window that appears, choose the serial port that shows up (often named "USB JTAG/serial" or "USB Single Serial"). Then confirm.
- Wait. It erases and writes the firmware, which takes one to three minutes. Do not unplug it. When it says done, the device restarts on its own.
- Finish setup: the device makes a Wi-Fi network named
LTAK-…. On a phone, join it and the setup page opens. Set the member or station details, then write the login password inside the battery door.
⚡ LTAK firmware installer
Pick a role, plug in the device, then click. The installer checks your browser and the chip for you.
https:// to flash a device.
The button above is the real installer element. On this draft it has no firmware to load yet, so it will report that there is nothing to install. See below.
Which firmware
There are three roles. The flasher detects the ESP32-S3 chip; you choose the role, which selects the matching firmware.
The basic member device. Hosts the check-in Wi-Fi page, signs its own check-ins, runs on AA batteries. This is what most people get.
A XIAO that plugs into a Raspberry Pi over USB. Runs stock MeshCore companion firmware on the LTAK channel; the Pi does the rest.
A cheap coverage filler on a roof or hilltop. Stock MeshCore repeater firmware on the LTAK channel. No Pi, no mailbox.
ltak/freqplan.py).After flashing
| Device | What should happen |
|---|---|
| Pocket node | A Wi-Fi network LTAK-… appears. Join it with a phone and the setup page opens. It asks for the member's details and shows the login password to write inside the battery door. |
| Repeater radio | No Wi-Fi of its own. Plug it into the Pi; the Pi's LTAK service will find it on the USB serial port. |
| Relay-only | Starts relaying on the LTAK channel right away. Nothing to configure. |
To re-flash or change a device's role later, just come back to this page and flash again. It overwrites whatever was there.
Troubleshooting
| Problem | Try this |
|---|---|
| The button says my browser is not supported | Use Chrome, Edge, or Opera on a computer. Safari, Firefox, and all phones cannot flash. |
| No serial port appears in the chooser | Try a different USB-C cable (many are charge-only). Try another USB port. On Windows the driver is built in; on older machines you may need the CP2102/CH340 driver only if the port never appears. |
| It will not connect or fails partway | Unplug and replug. Hold the BOOT button while plugging in to force bootloader mode, then click Connect again. |
It flashed but no LTAK-… Wi-Fi shows | Give it 30 seconds after the restart. Press the side button to wake Wi-Fi. Check you flashed the pocket node role (the other two have no Wi-Fi). |
| "This page must be opened over https" | The flasher only works from the real hosted site (an https:// address), not from a file opened off your disk. |
What is needed to make this live
- Build the firmware. Compile the LTAK builds from the fork with PlatformIO (see
firmware/FIRMWARE_PLAN.md):LTAK_Xiao_S3_companion_usb,LTAK_Xiao_S3_repeater, and the pocket-node build once itsmain.cppis written. Each produces a factory.bin. - Merge each build into one binary at offset 0 so ESP Web Tools can write it in a single step. PlatformIO's
merge-bin.py(already in the fork) does this, oresptool.py merge_bin. - Add a manifest per role. A small JSON file tells the installer which binary to write. Put the binaries and manifests in a
firmware/folder next to this page, and host the whole site over HTTPS.
Example firmware/manifest-pocket.json (the ESP Web Tools format — the installer auto-detects the ESP32-S3 and writes the one matching build):
{
"name": "LTAK Pocket Node",
"version": "0.1.0",
"new_install_prompt_erase": true,
"builds": [
{
"chipFamily": "ESP32-S3",
"parts": [
{ "path": "ltak-pocket-0.1.0.bin", "offset": 0 }
]
}
]
}
And the one line in this page's <head> that loads the installer (uncomment it once the firmware is ready; it is left out of this draft on purpose):
<script type="module" src="https://unpkg.com/esp-web-tools@10/dist/web/install-button.js?module"></script>
esp-web-tools and the merged binaries rather than loading them from a CDN at flash time, so a device can still be built if the internet or the CDN is down. Keep a known-good firmware version archived.Safety and security notes
- Each device gets its own identity. The pocket-node setup, done after flashing, generates the device's signing key on the device and never shares the private key. Do not clone one flashed device's saved config to another.
- The firmware is the same for everyone; the identity is not. Flashing only loads the program. Who the device belongs to, its keys, and its channel settings are written during setup, by the provisioning step, not baked into the public binary.
- Verify what you host. Only put firmware you built yourself (or checked) in the
firmware/folder. A web flasher writes whatever the manifest points to. - This is a setup tool, not an emergency tool. It needs a computer and internet. All of LTAK's disaster features work offline once a device is flashed.