Asking the fleet what it is doing…
monad-knowledge Wi-Fi sensing lab · FIIT STU
designed EXP-P1 platform

Sensing Node Bring-Up and Distributed Plane — ESP32 + Pi 5 + AX210 + mobile-app gamification loop

In plain words

Does the plumbing work: do the radio streams arrive, are the clocks aligned, and does the phone-to-server loop close?

node node node node node phone collector one clock, under 100 ms apart streams in, clocks aligned, the truth loop closed
No question about people here, only whether the plumbing works: do the streams from every node reach the collector, do all their clocks agree closely enough, and does the phone's report of where it is close the loop. Schematic of the design, not a measurement.
Why it matters
Every result in the thesis rests on real radios in a real room producing trustworthy, time- aligned data. This card asks nothing about people at all.
How it is done
Bring up the lab inventory (ESP32 boards, fourteen Pi 5 with AX210 cards, the mobile app) as one sensing plane: clocks aligned to under 100 ms, CSI reaching the collection host at the needed rates, and a ground-truth count closing end to end, with nobody in the room.
Where it stands
A design only on this card; no sub-experiment P1.1 to P1.9 has been run against it and no bench data is attributed. It is the real-hardware anchor EXP-F1 to F3 inherit.

Asks, formallyThe lab inventory (10× ESP32-C5, 10× ESP32-C6, 5× ESP32-S3, 14× Pi 5 + M.2 HAT + AX210, mobile app) can be brought up as a single distributed sensing plane — synchronised to sub-100 ms across all nodes, end-to-end ground-truth-counting working via the mobile-app BLE adv chain, FeitCSI streams reaching the collection host at the rates the field experiments need — without people in the room and without depending on a final floorplan.

FoundDesign — not yet executed.

StandingDesigned, not yet run

RoomFIIT lab bench → fiit-library-floor-0 (already polygonized in PostGIS). No participants. Walk-around testing only.

Executive summary

Every people-sensing result in this thesis eventually rests on one uncomfortable fact: you need real radios in a real room producing trustworthy, time-aligned data with a known number of people in it. EXP-P1 builds exactly that — a distributed sensing plane of cheap Wi-Fi and Bluetooth nodes (10× ESP32-C5, 10× ESP32-C6, 5× ESP32-S3, 14× Raspberry Pi 5 each carrying an Intel AX210 Wi-Fi card) plus a gamified mobile app that turns each participant's phone into a self-reporting ground-truth beacon. The experiment has no hypothesis about people at all: it asks whether the plumbing works — do the channel-state-information (CSI) streams arrive, are all the clocks aligned tightly enough, and does the "phone tells the server where it is → server records the true headcount" loop actually close.

Stated honestly: nothing has run yet. This is a design card. There is no bench data, no parquet, no sync-drift histogram — only a nine-step plan (P1.1 → P1.9) with explicit pass/fail gates. That is the correct state for an umbrella card, but it also means EXP-P1 currently proves nothing. Its value the day it does run is unusual: it is the only place in this project where a claim can be checked against measured reality instead of against another simulation. Until then, treat everything downstream that says "confirmed in-silico" as still owing a debt to this experiment.

The problem, in plain words

Imagine you want to count how many people are in a library reading room without cameras — just by watching how their bodies disturb the Wi-Fi signals already bouncing around. To train and test such a system you need three things at once, and all three are boring engineering, not science:

  1. The signal itself. Ordinary Wi-Fi chips throw away the fine-grained "channel state information" (CSI) — the per-frequency amplitude and phase of the radio channel — that human bodies perturb. You have to coax special firmware/drivers (FeitCSI on the AX210 cards, custom firmware on the ESP32 chips) into handing it over (gringoli2019_68e7 ; taehyeon2026_4bd5 ).
  2. Time. If fourteen separate little computers each stamp their measurements with their own slightly-wrong clock, you cannot line the recordings up afterwards. Distributed sensing lives or dies on clock synchronisation.
  3. Ground truth. To know whether "5 people" is right you must independently know it was 5. Cameras are the usual answer but they are privacy-hostile in a library. This project's answer is a gamified mobile app: participants opt in, the app gives them a walk-and-stand task, and their phone broadcasts a Bluetooth (BLE) advertisement the whole time — so the count is self-reported by the very people being sensed (longo2019_b72f ; demrozi2021_bf55 ).

The naive plan is to skip all this and "just start collecting during the real experiment." That is how the old EXP-001..005 each re-discovered the same driver bug, the same clock skew, the same iOS-won't-broadcast-in-the-background surprise — five times. EXP-P1 pays that cost once, with nobody in the room, and writes down the working recipe.

What we are trying to prove

This is a platform experiment, so the hypotheses are about capability, not about people. Each is a falsifiable gate.

  • H1 — CSI capture. Each chip class emits well-formed CSI at the promised rate: the ESP32-C5 esp_wifi callback fires with an HE-LTF subcarrier count matching the band/channel-width, and the AX210 delivers 80 MHz CSI through FeitCSI to a parquet on disk. Null: if a chip cannot sustain the field-experiment capture rate, that chip is dropped from the plan and the field design must shrink to what the survivors support.
  • H2 — Synchronisation. Across all nodes the collection server sees timestamps aligned to sub-100 ms (NTP/chrony), with a sub-100 µs PTP path available where hardware timestamping works. Null: if only software sync (sub-ms) survives, that becomes a hard constraint on which estimators the field experiments may use (see the Mathematician below).
  • H3 — Data plane. All streams reach the server with node-side packet loss < 1 % over a 4-hour unattended run. Null: loss above threshold means the collection topology, not the sensing model, is the bottleneck.
  • H4 — Ground-truth loop. The server-push → phone-task → BLE-adv → BLE-listener → server-record round trip reproduces a prescribed walk schedule within ± 2 s wall-clock. Null: if the mobile loop cannot close reliably, ground truth reverts to manual annotation and the "gamification-as-instrument" ambition is downgraded to a footnote.

A "null" here is never wasted: it is a documented constraint that the field experiments inherit instead of tripping over.

How the experiment works (plain method)

Nine sub-experiments, each run on the bench with no participants, gated in four phases. The unit that matters is the handoff note: every sub-experiment ends by writing a versioned build recipe (firmware version, kernel patch level, driver flags) into _knowledge/methods/ so the field experiments reproduce a known-good stack rather than re-deriving it.

Sub What it validates Gate
P1.1 ESP32-C5 standalone CSI — callback fires, HE-LTF subcarrier count matches band/width Well-formed CSI at target rate
P1.2 ESP32-C6 BLE listener + 2.4 GHz CSI — extended-advertising RX, sane RSSI envelope RSSI distribution matches sadowski2020_f2ba
P1.3 ESP32-C5+S3 sidecar throughput — sustained SDMMC writes from the CSI stream 10–20 MB/s sustained
P1.4 Pi 5 + M.2 HAT + AX210 single node — PCIe link stable, FeitCSI 80 MHz CSI → parquet Stable capture, parquet written
P1.5 Distributed sync (4 nodes) — chrony sub-ms, ptpd sub-100 µs Sub-100 µs PTP across nodes
P1.6 Collection server + multi-node aggregation — consistent timestamps, no drops Packet loss < 1 %
P1.7 Mobile-app gamification loop — push task → walk → BLE adv → count → record Round trip within ± 2 s
P1.8 WiFi-switch covariate — commanded AP-1→AP-2 handoff, capture lag logged Association within budget
P1.9 Library-floor dress rehearsal — full kit on fiit-library-floor-0, 4 h, no people Zero dropouts, sync holds
  • Phase A (P1.1–P1.4) — per-chip sanity. Single-device, independent, parallelisable.
  • Phase B (P1.5–P1.6) — the nodes start talking; sync and the data plane come up.
  • Phase C (P1.7–P1.8) — the mobile loop, the hardest surface (Android/iOS permissions, background-BLE restrictions, TCP/UDP comms).
  • Phase D (P1.9) — leave the whole kit running unattended for four hours on the real library floor, already polygonized in PostGIS, to prove the infrastructure survives on its own.

The plan (unexecuted)

No sub-experiment has run. Concretely, the following do not yet exist and are the first deliverables: a single P1.4 parquet of real AX210 80 MHz CSI; a P1.5 sync-drift histogram (Mimir); a P1.7 round-trip-latency distribution; and the _knowledge/methods/ handoff notes that are the experiment's actual product. The PostGIS side is also still nominal — the 8× fiit-automated-sniffer-* rows on the library floor are placeholders that must be extended and re-registered to the full 14× Pi 5 + 20× ESP32 inventory before P1.9. Because it is a plan and not a run, EXP-P1 is — by the standard of the 2026-07-15 integrity audit — weaker than a thin result: there is not even a phantom session to inspect. The honest next action is to run Phase A and post one hour of real CSI+BLE, which immediately converts this card from "constructible" to "measured".

Review panel

Each voice is a prepared expert with a one-line stance and the literature it argues from. Because nothing has run, the verdicts are about the design and about what the first data must show.

Key references

  • gringoli2019_68e7 — the reality of extracting CSI from commodity firmware; grounds the P1.1/P1.4 capture gates.
  • taehyeon2026_4bd5 — an end-to-end CSI acquisition→analysis stack; the shape of the pipeline EXP-P1 must stand up.
  • cominelli2023_e6ee — what commodity CSI can and cannot do; the Field Scientist's and Mathematician's basis.
  • guarino2026_e72c · zhang2026_ccac — the reproducibility/benchmarking bar the SWE and Statistician invoke.
  • bocus2022_ce7f — what a real, ground-truthed multimodal RF capture actually takes; the red-team's real-anchor reference.
  • longo2019_b72f · demrozi2021_bf55 — BLE occupancy/ground-truth basis for the mobile-app loop.
  • zhang2024_1d32 — the privacy-preserving-BLE pattern the Ethics voice asks for.
  • sadowski2020_f2ba — RSSI envelope + distributed-timing context for P1.2/P1.5.
  • choi2022_17c2 — link geometry per ESP32 CSI deployment; the downstream use EXP-P1 enables.
  • EXP-S1 — EXP-P1 fills the Phase-D adapter contracts EXP-S1 defines.
  • EXP-F1 · EXP-F2 · EXP-F3 — start once EXP-P1 Phase D is green.

Provenance

not recorded

Data types

  • csi-amplitude
  • csi-phase
  • ble-rssi
  • ble-advertisement-log
  • ntp-drift-log
  • mobile-app-telemetry
  • tcp-udp-throughput