Forge a Sensor Node

WiFi CSI  ⚔  2.4 GHz mesh  ⚔  presence · motion · people-count

Two longships to choose from. Either board listens to 2.4 GHz WiFi Channel State Information — up to 114 subcarriers at ~100 Hz — and reports back to your RuSense server, where it surfaces under the Nodes tab once provisioned. Pick a board, plug it in, raise the sails.

🛰️ Provision WiFi (do this after forging)

Forging erases the node's saved config, so it falls back to the wrong defaults and won't connect. Enter your 2.4 GHz WiFi and the RuSense server IP (your Ragnar box), then write it to the node. Works for both S3 and C6.

⚠️ Give each node a unique Node ID (1, 2, 3…). Two nodes sharing an ID collide, so only one shows up in RuSense.

📡 Point every node at the same WiFi access point on one fixed 2.4 GHz channel. If several routers or a mesh/extenders share one SSID, nodes latch onto different APs, their clocks can't sync, and sensing drops offline. Use a single AP (a dedicated 2.4 GHz SSID served by one router is ideal) and disable auto-channel.

⚠️ Don't mix S3 and C6 in one mesh. Pick a single chip type and flash every node the same — the two capture different CSI widths, and the server's multistatic fusion needs them identical. A mixed fleet breaks fusion (you lose accurate people-count, positioning, pose & vital-signs). All-S3 is recommended; choose C6 only if you want Wi-Fi 6 — and then make them all C6.

📡 ESP32-S3 AMOLED Node (display board · self-ping sensing)

Dual-core LX7 @240 MHz, 8 MB flash. The recommended platform for live CSI sensing — the steadiest, best-tested ship in the fleet. Plug it into USB, provision it to your RuSense server, and it starts streaming CSI immediately.

Before the forge fires
  1. Close Arduino IDE, Serial Monitor, or any other app holding the port
  2. Use a data-capable USB-C cable (charge-only cables are runes that do nothing)
  3. Click Forge and pick USB JTAG/serial debug unit from the port list
  4. If the board isn’t spotted, hold BOOT while tapping RST
ESP32-S3 · 8 MB flash

📶 ESP32-S3-DevKitC-1 (N16R8 · headless · best sensing)

Plain dual-core LX7 @240 MHz, 16 MB flash, no display. With no AMOLED panel to protect, it captures the full MGMT+DATA WiFi traffic — the rich multipath a moving person actually shows up in. This is the recommended sensor for presence / motion / people-count; AMOLED boards sense on a single self-ping link and struggle to separate empty from occupied.

Before the forge fires
  1. Close Arduino IDE, Serial Monitor, or any other app holding the port
  2. Use a data-capable USB-C cable (charge-only cables are runes that do nothing)
  3. Click Forge and pick USB JTAG/serial debug unit from the port list
  4. If the board isn’t spotted, hold BOOT while tapping RST
ESP32-S3 · 16 MB flash · no display

🛰️ ESP32-C6 CSI Node (Wi-Fi 6 · the scout)

RISC-V @160 MHz, 4 MB flash, dual-band Wi-Fi 6 (802.11ax) and 802.15.4. The research target — HE-LTF subcarrier tagging and a wider channel view for experiments. Same CSI-node firmware, tuned for the C6 radio.

Before the forge fires
  1. Close Arduino IDE, Serial Monitor, or any other app holding the port
  2. Use a data-capable USB-C cable (charge-only cables are runes that do nothing)
  3. Click Forge and pick USB JTAG/serial debug unit from the port list
  4. If the board isn’t spotted, hold BOOT while tapping RST
ESP32-C6 · 4 MB flash · Wi-Fi 6

📡 Skald’s Ear (serial monitor)

Open a browser-based serial monitor for any forged CSI node. Default baud is 115200. On boot the node announces itself, then emits CSI capture rate and status lines — handy for confirming packets-per-second before you provision the node to your RuSense server.

Web Serial only sails in Chromium-based browsers (Chrome, Edge, Opera) on desktop. Firefox and Safari are unworthy ships for this voyage.