MESHDETECT//WEB FLASHER//XIAO ESP32–S3
Install3 steps
1

Plug the board in

Use a real USB-C data cable — charge-only cables won't show up as a serial port. If it's your first flash, hold the BOOT button while plugging in.

2

Pick a build below and hit Flash

Chrome, Edge, or Opera on desktop. Your browser will show a list of serial ports — pick the XIAO. The install takes about 30 seconds.

3

Wire it to a Heltec V3

All three builds send Remote ID JSON out UART on GPIO5 (TX) / GPIO6 (RX). Wire that to a Heltec V3 running Meshtastic in serial TEXTMSG mode at 115200. See the wiring diagram.

Standard Dualcore1 board · main build
[ MAIN ]

RemoteID Mesh — Dualcore

Single-board build. Core 0 sniffs WiFi (Open Drone ID NAN + beacon vendor IEs), Core 1 scans BLE for ODID advertisements. Every detection goes straight out USB and out UART to your Heltec. Use this if you have one detector and one Heltec mesh — no multi-node dedup needed.

Target
XIAO ESP32-S3
Mode
WiFi + BLE, concurrent
UART Out
GPIO5 TX / GPIO6 RX @ 115200
JSON
to USB Serial + Heltec V3
Your browser doesn't support Web Serial. Open this page in Chrome, Edge, or Opera on a desktop. This page must be served over HTTPS. GitHub Pages handles that automatically.
Node Mode2 roles · multi-node mesh

Node Mode splits the standard build into two firmwares: put Remote on every field detector, and Home on the base receiver plugged into mesh-mapper.py. Deploy as many Remotes as you want.

┌─────────────────────────────────────────────────────────────┐
│                   REMOTE NODE   (field)                     │
│   XIAO ESP32S3 ──UART──> Heltec V3 (Meshtastic) ──LoRa──>   │
│   WiFi + BLE drone       GPIO5 TX -> Heltec RX              │
│   detection              GPIO6 RX <- Heltec TX              │
│   (Open Drone ID)                                           │
└─────────────────────────────────────────────────────────────┘
                                │
                         LoRa Mesh Network
                        (multiple hops OK)
                                │
┌─────────────────────────────────────────────────────────────┐
│                    HOME NODE   (base)                       │
│   Heltec V3 (Meshtastic) ──UART──> XIAO ESP32S3 ──USB──>    │
│   receives mesh data      GPIO6 RX <- Heltec TX  computer   │
│                           GPIO5 TX -> Heltec RX  running    │
│   NO detection.           dedup engine           mesh-mapper│
│   Just a smart bridge.                                      │
└─────────────────────────────────────────────────────────────┘

The dedup problem: when 5 Remotes see the same drone, without dedup the mapper gets 5 copies of one detection. Every Remote tags its JSON with a unique node_id derived from its ESP32 MAC. The Home node keys on the drone's MAC — the first hit forwards instantly, duplicates from other Remotes within 500ms are dropped, and after 500ms the next hit goes through (drone moved). Near real-time tracking, no multi-node spam.

[ REMOTE ]

Node Mode — Remote (Field Detector)

Dual-core: WiFi promiscuous on Core 0, BLE scan on Core 1. Every detection tagged with node_id (4-char hex from the ESP32 MAC) so the Home node can dedup. LED blinks per detection, heartbeat every 60s.

Target
XIAO ESP32-S3
Role
Detection + mesh sender
UART
GPIO5 TX / GPIO6 RX @ 115200 → Heltec V3
Deploy
One per field board (N remotes OK)
Your browser doesn't support Web Serial. Open this page in Chrome, Edge, or Opera on a desktop. This page must be served over HTTPS. GitHub Pages handles that automatically.
Troubleshootingcommon snags
?

Nothing shows up in the port picker

Try a different USB-C cable (charge-only won't work), install CH340 or CP210x drivers if your OS doesn't auto-detect, or hold BOOT while plugging in to force download mode.

?

Heltec not receiving JSON from a Remote

Confirm serial module is enabled on the Heltec: serial.enabled true, serial.mode TEXTMSG, serial.baud BAUD_115200, serial.rxd 19, serial.txd 20. All Heltecs must share the same Meshtastic channel + key.

?

mesh-mapper.py sees duplicate detections

You're probably running Standard Dualcore on multiple boards feeding one mapper. That build has no dedup. Reflash the field boards with Node Mode / Remote and the base board with Node Mode / Home.

?

No drone detections at all

Confirm firmware is running: open serial monitor at 115200 and look for the heartbeat line. Some drones don't broadcast Remote ID — required in many jurisdictions but not universal.