Wi-Fi CSI on a Raspberry Pi: two very different jobs
2026-10-11 · 1 min read
The Raspberry Pi shows up in Wi-Fi CSI projects in two completely different roles. Mixing them up wastes a weekend.
Role A — the Pi *is* the CSI capture device (Nexmon)
With a supported Broadcom chip (for example BCM43455c0 on Pi 3B+/4/5 variants) you patch the Wi-Fi firmware and read CSI directly [1]. That gives 80 MHz / 256 subcarriers on supported channels. Steps and caveats:
- use the exact firmware/kernel combination from the upstream support matrix;
- expect a firmware patch + reboot cycle; keep a spare SD card;
- output is a raw CSI stream — parse it with
CSIKit[2] orcsiread[3] (see the Nexmon guide).
Role B — the Pi is the *analysis host* for router CSI
This is the cheaper and more common setup: a router captures CSI, the Pi parses/stores/visualises it.
# on the Pi: receive the UDP stream and record
./scripts/csi_capture_session.sh 600
# or run the platform (Docker) and open the dashboard in a browser
docker compose up -d
| Resource | Budget |
|---|---|
| Network | 1,000 measurements/s × 8 chains ≈ 8 MB/s (≈64 Mbps) — Pi 4 gigabit is fine |
| Storage | ≈29 GB/h at 1,000/s → plan retention (our 10-minute capture is 58 MB) |
| CPU | vectorised NumPy processing up to a few thousand records/s; deep-learning inference needs a smaller model |
Which role do you want?
| Goal | Role |
|---|---|
| Collect research-grade CSI with flexible radios | A (Nexmon) |
| 24/7 whole-home sensing + dashboard | B (router + Pi as server) |
| Both | A for experiments, B for deployment |
Related: Nexmon CSI guide · router CSI reproduction · datasets
References and data sources
Every external claim carries a source and an evidence grade (grading scheme). Grade E marks first-party, reproducible measurements from this project.
- Grade C · official docs
seemoo-lab/nexmon_csi — CSI extraction on various Broadcom Wi-Fi chips
SEEMOO Lab, TU Darmstadt
github.com/seemoo-lab/nexmon_csi · verified: GitHub API 2026-10-11 (stars 475, last push 2026-09-30) - Grade C · official docs
Gi-z/CSIKit — Python CSI parsing and visualisation
G. Zhang
github.com/Gi-z/CSIKit · verified: GitHub API 2026-10-11 (stars 307, MIT, last push 2025-02-19) · Parses many formats: Atheros / Intel / Nexmon / ESP32 / FeitCSI / PicoScenes. - Grade C · official docs
citysu/csiread — fast Cython CSI parser
S. Zhu
github.com/citysu/csiread · verified: GitHub API 2026-10-11 (stars 142, MIT, last push 2024-10-12)
This page contains affiliate links (rel="sponsored"). Buying through them costs you nothing extra and earns this site a small commission.