ruview @ v0.4.2-esp32
integrity
- size
- 34.9 MiB
- downloaded
- last checked
release notes
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 6
Explicitly 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:FF
Only 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:FF
Bug 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.bin
Provisioning 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:FF
Architecture
- 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)
download
unix · zip
curl -fL -o v0.4.2-esp32.zip https://ratatoskr.space/pkg/ruview/v0.4.2-esp32.zip
printf '%s %s\n' '1e1782ddbe2d2f11d826aee030d2fd26d4d754d83a89a35b4fdc60e99103f854' 'v0.4.2-esp32.zip' | sha256sum -c -
windows · zip
$url = "https://ratatoskr.space/pkg/ruview/v0.4.2-esp32.zip"
$out = "v0.4.2-esp32.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "1e1782ddbe2d2f11d826aee030d2fd26d4d754d83a89a35b4fdc60e99103f854") { throw "sha256 mismatch" }
unix · tar.gz
curl -fL -o v0.4.2-esp32.tar.gz https://ratatoskr.space/pkg/ruview/v0.4.2-esp32.tar.gz
printf '%s %s\n' '2ede52b69120d836f07994357d8df75184750f07384bdce5808392205e2752e8' 'v0.4.2-esp32.tar.gz' | sha256sum -c -
windows · tar.gz
$url = "https://ratatoskr.space/pkg/ruview/v0.4.2-esp32.tar.gz"
$out = "v0.4.2-esp32.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "2ede52b69120d836f07994357d8df75184750f07384bdce5808392205e2752e8") { throw "sha256 mismatch" }
download via yggdrasil mesh
unix · zip
curl -fL -o v0.4.2-esp32.zip http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.4.2-esp32.zip
printf '%s %s\n' '1e1782ddbe2d2f11d826aee030d2fd26d4d754d83a89a35b4fdc60e99103f854' 'v0.4.2-esp32.zip' | sha256sum -c -
windows · zip
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.4.2-esp32.zip"
$out = "v0.4.2-esp32.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "1e1782ddbe2d2f11d826aee030d2fd26d4d754d83a89a35b4fdc60e99103f854") { throw "sha256 mismatch" }
unix · tar.gz
curl -fL -o v0.4.2-esp32.tar.gz http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.4.2-esp32.tar.gz
printf '%s %s\n' '2ede52b69120d836f07994357d8df75184750f07384bdce5808392205e2752e8' 'v0.4.2-esp32.tar.gz' | sha256sum -c -
windows · tar.gz
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.4.2-esp32.tar.gz"
$out = "v0.4.2-esp32.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "2ede52b69120d836f07994357d8df75184750f07384bdce5808392205e2752e8") { throw "sha256 mismatch" }
| artifact | format | size | hashes |
|---|---|---|---|
| v0.4.2-esp32.zip | zip | 35.1 MiB |
blake3-24 1691428ce8e1e9e4320287212fe2318d6898382e4c214bc7
sha256 1e1782ddbe2d2f11d826aee030d2fd26d4d754d83a89a35b4fdc60e99103f854
sha1 1715e2d17aff28c1fae947f8f1448cb72d331d1c
|
| v0.4.2-esp32.tar.gz | tar.gz | 32.9 MiB |
blake3-24 ddc2df1a80af444d345f9e538f81648241b0ed6573c1216f
sha256 2ede52b69120d836f07994357d8df75184750f07384bdce5808392205e2752e8
sha1 f7f4915520f7cdb4425f31d547fbdbfa45b01a85
|
install
bazel
http_archive(
name = "ruview",
urls = ["https://ratatoskr.space/pkg/ruview/v0.4.2-esp32.tar.gz"],
integrity = "sha256-Lt5StpEg2DbweZQ1fY33UYR1Dwc4S9zlgIOSIF4nUug=",
strip_prefix = "ruview-v0.4.2-esp32",
)
zig
.url = "https://ratatoskr.space/pkg/ruview/v0.4.2-esp32.tar.gz",
install via yggdrasil mesh
bazel
http_archive(
name = "ruview",
urls = ["http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.4.2-esp32.tar.gz"],
integrity = "sha256-Lt5StpEg2DbweZQ1fY33UYR1Dwc4S9zlgIOSIF4nUug=",
strip_prefix = "ruview-v0.4.2-esp32",
)
zig
.url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.4.2-esp32.tar.gz",