ESP32-S3 CSI Node Firmware v0.4.2 — Channel Override + MAC Filter (ADR-060)
Boot Proof (COM7, 2026-03-13)
I (229) app_init: Project name: esp32-csi-node
I (233) app_init: App version: v0.4.2-esp32-dirty
I (238) app_init: Compile time: Mar 13 2026 08:37:29
I (243) app_init: ELF file SHA256: 6fac16e35...
I (260) efuse_init: Chip rev: v0.2
I (291) spi_flash: detected chip: gd
I (294) spi_flash: flash io: dio
I (370) nvs_config: No NVS config found, using compiled defaults
I (370) main: ESP32-S3 CSI Node (ADR-018) — Node ID: 1
I (390) wifi:wifi firmware version: 48ea317a7
I (530) wifi:mode : sta (3c:0f:02:ec:c2:28)
I (530) main: WiFi STA initialized, connecting to SSID: wifi-densepose
Firmware Binary Hashes (SHA-256)
| File | Size | SHA-256 |
|---|---|---|
esp32-csi-node.bin
| 978,064 bytes | 4884001780fff646946003a462498daf6f14b70e4f369d444d9eb0f5dbb68877
|
bootloader.bin
| 18,880 bytes | 7fb987037d737a6f87fe955d4fa8ae1f872f1e4f7998a572910ee669989d84fb
|
partition-table.bin
| 3,072 bytes | 67222c257c0477501fd4002275638dc4262b34eb68235b8289fb1337054d322b
|
New Features
Channel Override (--channel)
python provision.py --port COM7 --channel 6Explicitly set CSI channel (1-14 for 2.4GHz, 36-177 for 5GHz). When omitted, firmware auto-detects channel from connected AP using esp_wifi_sta_get_ap_info().
MAC Address Filter (--filter-mac)
python provision.py --port COM7 --filter-mac AA:BB:CC:DD:EE:FFOnly collect CSI from frames matching the specified source MAC. Reduces noise in multi-AP environments.
Combined Example
python provision.py --port COM7 --ssid "MyWiFi" --password "secret" \
--target-ip 192.168.1.20 --channel 6 --filter-mac AA:BB:CC:DD:EE:FFBug Fixes
- Channel mismatch — Auto-detect AP channel after WiFi connect instead of hardcoding (#247)
- MAC filter — Drop non-matching CSI frames before processing (#229)
Capabilities Verified on Hardware
| Capability | Status |
|---|---|
| ESP32-S3 boot (QFN56 rev v0.2) | PASS |
| 8MB GD flash detection | PASS |
| NVS config load (defaults) | PASS |
| WiFi STA init + connect retry | PASS |
| ADR-018 binary frame format | PASS |
| ADR-060 channel/MAC filter fields | PASS |
| CSI collector init | PASS |
| Edge intelligence defaults (tier 2) | PASS |
| TDM defaults (slot 0, count 1) | PASS |
Flash Instructions
python -m esptool --chip esp32s3 --port COM7 --baud 460800 write_flash \
0x0 bootloader.bin \
0x8000 partition-table.bin \
0x20000 esp32-csi-node.binProvisioning All Options
python provision.py --port COM7 \
--ssid "MyWiFi" --password "secret" \
--target-ip 192.168.1.20 --target-port 5005 \
--node-id 1 \
--tdm-slot 0 --tdm-total 3 \
--edge-tier 2 \
--channel 6 \
--filter-mac AA:BB:CC:DD:EE:FFArchitecture
- ADR-060: Channel override and MAC filter design
- NVS keys:
csi_channel(u8),filter_mac(6-byte blob) - Auto-channel:
esp_wifi_sta_get_ap_info()after WiFi connect - MAC filter:
memcmp(info->mac, ...)in CSI callback
Built with ESP-IDF v5.4 | Target: ESP32-S3 | Flash: 8MB (53% free)