Tick these in order. Each phase isolates one failure point, so if something breaks you know it's in the phase you just did — not somewhere in the whole chain.
- Heltec LoRa 32 V3
- Seeed XIAO ESP32-S3 Sense (+ camera ribbon seated)
- microSD card (<=32GB, FAT32) in the XIAO Sense expansion board
- 3x jumper wires, antennas attached to BOTH LoRa nodes (never power LoRa w/o antenna)
- Good DATA USB-C cable (not charge-only)
- Web flasher (flasher.meshtastic.org), select Heltec V3, Erase flash = ON
-
meshtastic --set lora.region US(match on every node) -
meshtastic --infoboots, shows a node — record hex!idand decimalnum: ____________
-
serial.enabled true,serial.mode TEXTMSG,serial.rxd 33,serial.txd 34,serial.baud BAUD_38400 - Bench test: USB-serial adapter -> GPIO33+GND, type a line @38400 -> appears on the mesh (proves the Serial Module works before the camera is involved)
-
pio runcompiles clean -
pio run --target upload(hold BOOT if needed) -
pio device monitor@115200 shows no "Camera init failed" / "SD init failed"
- XIAO D6/GPIO43 (TX) -> Heltec GPIO33 (RX)
- XIAO D7/GPIO44 (RX) -> Heltec GPIO34 (TX)
- GND -> GND
- Wave at the camera ->
MOTION at cam1shows on the mesh (phone/2nd node) - Adjust
MOTION_FRAC/PIXEL_DELTAif too noisy or too deaf
- WiFi:
network.wifi_enabled/ssid/psk - MQTT:
mqtt.enabled true,mqtt.address <broker>, user/pass,mqtt.json_enabled true - Channel:
--ch-index 0 --ch-set uplink_enabled true(anddownlink_enabled true) - Same
lora.regionas the field node - Record ADV decimal
num(for downlinkfrom): ____________
-
mosquitto_sub -t 'msh/#' -vshows traffic -
mosquitto_sub -t 'msh/US/2/json/#' -vshows decoded JSON - Field node's
MOTION at cam1text appears in the JSON stream - Record exact topic (channel + gateway id): msh//2/json//!____
-
mosquitto_pubasnapdownlink -> XIAO saves a photo ->SAVED /snap_N.jpgcomes back (see ha/mosquitto-cheatsheet.md)
- Mosquitto broker add-on + MQTT integration up
-
meshtastic/home-assistantinstalled via HACS; nodes auto-discovered as devices - Paste
ha/configuration.yaml(fill REGION / CHANNELNAME / GATEWAY_NODEID), reload -
binary_sensor.cam1_motionflips on real motion - Paste
ha/automations.yaml(fill region + decimal node id), reload automations - Paste
ha/lovelace-card.yaml; "Take photo" button triggers a real snap
- Field node on battery/solar, weatherproofed, antenna clear
- Confirmed range from deploy spot back to the home gateway
-
COOLDOWN_MSset sane for duty cycle in your region/band - Photos retrievable (pull SD, or plan a WiFi-in-range dump later)