XIAO 0.6.0 — scan modes, radio and optical evidence

This guide applies to Seeed XIAO ESP32-S3 Sense with OV2640. Raspberry Pi stays on its separate 0.5.1 release and Pi guide.

Exclusive modes

The scan profile is the single persisted mode. Selecting ALPR, Scanner, Pig Detector or Wardrive changes actual firmware work, not just the displayed table. Camera and Settings leave the chosen mode active. A failed settings write leaves the previous mode running. On a successful change, pending automatic tones, live device rows, optical history and fusion evidence are cleared. Packet and camera queues carry generation numbers so a previous mode's queued samples cannot be processed as new detections. Optical sensor enable and tone assignments persist.

Mode / API value Optical analysis WiFi BLE Automatic outputs
ALPR / alpr OPT101 + camera ALPR/Flock OUI and probe rules ALPR/Flock rules ALPR tones, ALPR CSV, radio events
Scanner / general Paused General signatures, watchlist, Remote ID, optional captures General signatures, watchlist, Remote ID, optional captures Per-device tones and radio events; ALPR radio candidates also enter ALPR CSV
Pig Detector / axon Paused Detection off Axon-only matching Fresh-evidence siren and Axon radio events
Wardrive / wardrive Paused Passive AP surveys / beacons Advertisements, including unknown vendors WiGLE CSV only; no automatic detection alerts

OPT101's saved enable switch is independent of the runtime pause. Camera DMA can continue acquiring frames, but optical analysis stops outside ALPR. Requested preview remains available; it is not a scanner. Recording and microphone capture are stopped and blocked in Pig Detector and Wardrive.

Pig Detector

Passive BLE discovery runs indefinitely with duplicate advertisements enabled. Only Axon candidate advertisements enter its queue. It does not scan WiFi, classify other device categories, run target-tracking tones or populate ALPR CSV.

Requested BLE timing is 90/100 ms window/interval with the hotspot, or 100/100 ms with field coverage and WiFi switched off. These are configured windows, not a claim of lossless reception. BLE advertisements may be missed because of interference, address rotation, antenna placement or device state. Normal ALPR, General and Wardrive discovery requests 100/200 ms to share the radio with WiFi. Scan faults retry on a nonblocking timer.

Axon signatures use SIG company 034D, member service FC81, Axon names and public-address OUI 00:25:DF. Company+service in one advertisement is stronger than either alone. Shared vendor identifiers do not establish a body-camera model. The banner therefore reads POSSIBLE AXON BODY CAMERA NEARBY. Absence of advertisements is not absence of a camera: Axon's own Body 4 guide describes conditional and time-limited beacons.

A fresh match requests the Axon sound. One global reminder timer prevents advertisement floods or multiple MACs from flooding the buzzer. Default repeat: 10 seconds, editable 5–60 seconds in this tab. No reminder occurs if the latest supporting advertisement is more than 3 seconds old. Mute, disabled buzzer and a silent Axon sound are respected. Settings can select another sound or a custom RTTTL slot.

Radio coverage and recovery

Dashboard: hotspot on 192.168.4.1, default channel 1. Packet reception stays on its channel while clients are connected. Wardrive can perform passive surveys when no hotspot client is present. Field: hotspot off; ALPR priority 1/6/11, Wardrive 1–11, General configured plan; dwell 350 ms. Pig Detector instead turns WiFi off entirely. BLE continues in all four modes. WiFi and Bluetooth cannot receive all channels at once on this shared radio.

Hold BOOT 1.5 seconds to restore the dashboard. Restarting also restores the hotspot while preserving the selected scan mode. Changing coverage never changes the scan profile. XIAO has no Bluetooth Classic, 5/6 GHz WiFi or sub-GHz receiver.

ALPR focus and evidence fusion

OPT101 (~1 kHz), camera (~25 fps), BLE and WiFi share a bounded 3-second evidence window. Matches arriving in either order can add support. Radio evidence is tracked by strength independently: a weak vendor hint cannot hide or refresh a stronger old signature. MAC identities remain separate in the radio log; proximity of optical and radio observations does not prove a shared emitter.

no_recent_evidence means no current match, not no camera. Optical evidence alone is possible_camera; sufficiently specific nearby radio evidence adds corroborated_camera_candidate. The four-source case reports multiple_sources_nearby. These are assessments, not calibrated probabilities.

Frequency: 8–12 Hz / 10–30% duty / 8–35 ms is an experimental reference profile, not a manufacturer-verified universal ALPR rate. OPT101 validates four consecutive intervals, regularity, adaptive amplitude threshold, clipping and sampling gaps. Camera duty and pulse timing are exposure/frame limited. A narrow 10 Hz source sampled at 25 fps can appear as 5 Hz; camera aliases are retained as weaker candidates with observed frequency and camera_timing=aliased_candidate. They do not count as an OPT101 timing measurement. Detection and bench validation.

Separate files and data quality

Data File Contents
ALPR evidence /alpr/alpr_*.csv 31 columns; optical / ALPR radio only
Survey /wardrive/wigle_*.csv WiGLE 1.4, WIFI and BLE types
Radio events /radio/events_*.jsonl Category, rule, tier, MAC, protocol, RSSI, uptime, GPS, mode and evidence
General packet capture /radio/wifi_*.pcap, /radio/ble_*.jsonl Optional raw observations, 16 MiB cap per capture

GET /api/alpr.csv and the legacy /api/log return the ALPR file. Its detection_method is ir, camera, ble, wifi or a combined value such as ir+camera+ble+wifi. source is the event that caused the row. Pulse fields on radio-only events remain blank; they are not guessed from a MAC. Additional columns retain OPT101 pulse width / sample rate, camera sample rate / timing ambiguity and scan mode. Optical evidence can log without GPS, with an uptime stamp and unavailable coordinates. Non-ALPR devices never enter the ALPR CSV.

Wardrive deliberately does not classify or alert. It observes WiFi APs and BLE advertisers, including unknown vendors. Rows require a current GPS fix, UTC, altitude and HDOP. AccuracyMeters is HDOP × 5 m estimated accuracy, recorded in the pre-header; it is not measured receiver uncertainty. BLE channel is 0 (unknown) because legacy NimBLE reports do not identify the advertising channel. WiFi security uses parsed RSN/WPA evidence; a privacy bit alone stays UNKNOWN.

SSID / names are quoted, quotes doubled, and line breaks replaced by spaces for WiGLE import. Repeated protocol/address observations log at most once per 15 seconds, allowing measurements at new locations. Failed writes and missing GPS are not remembered as successfully logged. The dashboard exposes WiFi/BLE row counts, SD errors and observations skipped for missing GPS. WiGLE upload itself has not been exercised with a real field session.

Protocol provenance and retained General features

Inspired by Colonel Panic and OUI Spy Unified Blue. Please support his work. Flock Noir independently implements the parsers, scheduler, storage and UI; upstream application code/UI is not vendored. Complete attributions.

Unified Blue area Flock Noir implementation
Detector BLE vendor signatures and configurable MAC, OUI, name, manufacturer ID and 16-bit service watchlists
Foxhunter Selected MAC RSSI, last-seen age and nonblocking proximity tones; no meter/distance estimate
Flock-You Transmitter, receiver and management-BSSID prefix matching; wildcard probe and strict IE signature matching; Flock accessory BLE signals
PCAP Optional SD WiFi PCAP, raw 802.11 linktype 105, 768-byte snap length; bounded receive queue and visible drop count
Sky Spy Remote ID over WiFi vendor beacons, NAN service-discovery action frames and legacy BLE service data; ID, location, operator ID/location, description and message-type mask
BLE Sniff Live advertisement table and raw advertisement JSONL including address type, event type and RSSI

BLE capture is JSONL, not a reconstruction of over-the-air BLE PCAP. WiFi PCAP has no radiotap header and uses boot-relative timestamps. Extended/coded-PHY BLE Remote ID is not implemented. Remote ID authentication messages are recognized and retained in raw captures, but their signatures are not verified. This is feature integration for this hardware, not binary or API compatibility with Unified Blue's Flask dashboard, boot selector or session CRC format.

Signature interpretation

Tiers describe the matched rule, not a calibrated probability of identification. An unrelated transmitter can satisfy a vendor-prefix or probe fingerprint rule.

Biscuit uses advertised name Biscuit; the additional documented service UUID adds support only alongside the name. Its service alone is shared with a generic Arduino BLE example. Pineapple Pager has no verified unique model fingerprint; recognizable Pineapple-family network names produce family candidates only.

Controls and diagnostics

In General, additional watchlist lines accept oui:B4:1E:52, mac:AA:BB:CC:DD:EE:FF, name:Penguin, cid:034D, svc:FC81; maximum 1024 bytes. Names are case-insensitive substrings. Watchlist and RSSI tracking do not operate in the dedicated ALPR, Pig Detector or Wardrive profiles.

Wiring and BOM · Build / install