Motivation
This is the one platform-bring-up experiment that absorbs the boilerplate the old EXP-001..005 carried five times. Its job is to surface every hardware / driver / sync / mobile-app problem before people are in the room so that EXP-F1..F3 can run as analyses rather than as engineering grind. The rationale lives in diary/2026-05-20 - Experiment Series Reorganization.
EXP-P1 is also where the gamification mobile app graduates from peripheral footnote to first-class experimental instrument — see MonadCount Mobile App.
Setup
Topology
collection-server (laptop / Pi 5)
▲
┌───────────────┼───────────────┐
│ │ │
TCP/UDP TCP/UDP TCP/UDP
│ │ │
┌─────────┴────────┐ │ ┌────────┴─────────┐
│ Pi 5 + M.2 HAT │ │ │ Pi 5 + M.2 HAT │
│ + AX210 (FeitCSI)│ ... │ ... │ + AX210 (FeitCSI)│
└─────────┬────────┘ │ └────────┬─────────┘
│ │ │
▼ ▼ ▼
CSI stream ESP32-C5/C6/S3 CSI stream
+ BLE listener
+ SD logger
participants' phones ──── BLE adv + TCP/UDP heartbeat
(gamification: walk task, BLE toggle, WiFi switch)
Sub-experiments (each runs on the bench, no participants)
| Sub | Title | Hardware | Validates |
|---|---|---|---|
| P1.1 | ESP32-C5 standalone CSI bench | 1× C5, RF chamber if available | esp_wifi CSI callback fires; HE-LTF subcarrier count matches band/channel-width |
| P1.2 | ESP32-C6 BLE listener + 2.4 GHz CSI | 1× C6 | Extended-advertising RX; RSSI distribution sane vs Memoryless Techniques and Wireless Technologies for Indoor Localization With the Internet of Things ↗ envelope |
| P1.3 | ESP32-C5+S3 sidecar throughput | 1× C5, 1× S3, microSD | Sustained 10–20 MB/s SDMMC writes from C5 CSI stream over SPI |
| P1.4 | Pi 5 + M.2 HAT + AX210 single-node | 1× each | PCIe gen 2 link stable; FeitCSI captures 80 MHz CSI; CSI parquet write |
| P1.5 | Distributed sync (4 nodes) | 4× Pi 5 + AX210 | NTP (chrony) sub-ms drift; PTP (ptpd) sub-100 µs across nodes |
| P1.6 | Collection server + multi-node aggregation | 4× Pi 5 + 4× ESP32 + server | All streams reach the server with consistent timestamps; no packet loss > 1 % |
| P1.7 | Mobile-app gamification loop | server + 2 phones | Server pushes walk task → phone executes → BLE adv during task → BLE listener counts → server records ground truth — round-trip |
| P1.8 | WiFi-switch covariate validation | server + 2 phones + 2 APs | Server commands AP-1→AP-2 handoff; phone associates with target AP within budget; capture lag logged |
| P1.9 | Library-floor deployment dress rehearsal | full kit | All 14 Pi 5 + 8 ESP32 (mixed C5/C6) running on fiit-library-floor-0 for 4 h continuous, no people |
PostGIS preconditions
- Register the 14 Pi 5s + 10 ESP32-C5s + 10 ESP32-C6s as devices via
gis_register_device/gis_place_device. Existing 8×fiit-automated-sniffer-*rows are placeholders — extend to the full inventory and place them onfiit-library-floor-0for sub-experiment P1.9. - No new building / floor / cell ingestion needed for P1; the library floor is already polygonized.
Procedure
Phase A — Per-chip sanity (P1.1 → P1.4)
Single-device bench tests. Each takes < 1 day to bring up. Independent. Run in parallel if multiple hands available. Gate: each sub-experiment writes a markdown handoff note to _knowledge/methods/ documenting the build steps, firmware version, kernel patch level — the steps the field experiments inherit.
Phase B — Multi-node sync + data plane (P1.5 → P1.6)
Now nodes talk to each other. Gate: 4-node deployment runs for 1 h with sub-100 ms timestamps in the collection-server logs and no node-side packet-drop > 1 %.
Phase C — Mobile-app loop (P1.7 → P1.8)
The gamification path. The hardest engineering surface in EXP-P1 because it spans Android/iOS permission flows + BLE adv background restrictions + TCP/UDP comms. Gate: a 30-minute scripted scenario (2 phones, walk-and-stand tasks across cells, BLE-toggle every 60 s, WiFi-switch every 5 min) produces a synchronised log on the server that matches the prescribed task schedule within ± 2 s wall-clock.
Phase D — Library-floor dress rehearsal (P1.9)
Full kit deployed on fiit-library-floor-0 for 4 h, no people. Validates that the infrastructure can be left running unattended. Gate: zero device dropouts; CSI capture rate within 5 % of bench measurement; PTP sync stays sub-100 µs; mobile-app heartbeat from one carried phone arrives every interval.
Expected outputs
- Markdown handoff notes per sub-experiment in
_knowledge/methods/(one per Pi 5 + AX210 build, one for ESP32-C5/C6/S3 firmware, one for mobile-app capability matrix). - Bench data: small (per-sub) parquet files in
_attachments/exp-p1/documenting the validation runs. - Mimir histograms for throughput / packet-loss / sync-drift per sub-experiment.
- A capability sheet for the mobile app — what it can do today, what it can't, what the field-experiment plan can therefore assume.
- A README in
monad_knowledge/sim/runtime/documenting theMobileAppAdapter/BLEListenerAdapter/FeitCSIAdapterschemas (the EXP-S1 Phase-D contract becomes real data here).
Analysis plan
EXP-P1 is operational, not analytical. The only analyses are:
- Throughput vs. sustained-time — does sustained capture rate match bench-shot rate after 4 h? (P1.9)
- Sync drift histogram — PTP and NTP drift over 4 h. (P1.5, P1.9)
- Mobile-app round-trip latency — server-push → phone-action → server-observation latency distribution. (P1.7)
Success criteria
- All 9 sub-experiments pass their per-phase gate.
- Phase D library-floor dress rehearsal runs 4 h with zero device dropouts and sub-100 µs PTP drift.
- Mobile-app gamification loop produces synchronised server-side logs matching prescribed walk-tasks within ± 2 s.
-
_knowledge/methods/carries one handoff note per build step the field experiments will reproduce.
Risks and mitigations
- ESP32-C5 is new silicon, bootloader / IDF version churn. Mitigation: P1.1 documents the working IDF / bootloader matrix; pin everything in
_knowledge/methods/. - Pi 5 PCIe gen 3 instability. Mitigation: P1.4 starts at gen 2; promote to gen 3 only if a specific sub-experiment needs the bandwidth.
- iOS background-BLE-adv restrictions break Phase C. Mitigation: enrol the EXP-P1 phones as Android initially; document the iOS workaround (foreground-only mode) as a known limitation that EXP-F* must respect.
- PTP requires hardware timestamping support on the NICs / kernel. Mitigation: AX210 supports hardware PTP; verify in P1.5; fall back to software PTP (sub-ms) if the hardware path is blocked.
- 8×
fiit-automated-sniffer-*rows in PostGIS were placeholders. Mitigation: extend the inventory + re-register; document in P1's PostGIS section.
Dependencies
- Full lab inventory present and powered.
fiit-library-floor-0polygonization in PostGIS (already done).- Mobile-app builds available on at least 2 phones (Android primary).
- Collection-server endpoint up (can be a laptop on the same LAN).
Related work in vault
- choi2022_17c2 ↗ — link geometry per ESP32 CSI deployment.
- guarino2026_e72c ↗ — FeitCSI + AX210 baseline.
- longo2019_b72f ↗ — nominal vs effective penetration sets the mobile-app expectations.
Cross-experiment links
- 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.
Notes
EXP-P1 is the experiment that doesn't get a paper. Its outputs are method notes and a known-good deployment. That's exactly why making it explicit unblocks the rest of the series — the field experiments stop carrying their own bring-up procedures.