Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

esp-csi-litegui-rs

esp-csi-litegui-rs is a no_std firmware application for ESP32-S3 boards that renders live Wi-Fi CSI as an AMOLED heatmap. It is built on esp-csi-rs for collection, embedded-graphics for drawing, and rm690b0-rs for driving the panel.

Like esp-csi-litetui-rs it is a Tier 1 front-end with no host in the loop, but it is narrower by design: one view, rendered as well as the hardware allows, with gesture control and nothing else. Where the LiteTUI is an instrument you configure, the LiteGUI is a display you point at a room.

It is not published to crates.io; build it from the repository.

Supported Boards

Exactly one board feature must be enabled — waveshare-esp32-s3-touch-amoled-1_8 or lilygo-t4. Touch handling is board-specific: the LilyGo reads CST226 gestures, while the Waveshare uses FT3x68 gesture IDs with a coordinate-based swipe fallback.

Runtime Architecture

CSI processing runs on the main executor and display rendering runs on a dedicated second-core executor. That split is what keeps the display responsive when packets arrive faster than frames can be drawn — the renderer falls behind gracefully instead of stalling the capture path.

Capture Modes

This board is always a collector. It renders a heatmap, so it needs CSI to render; the mode features differ only in where the measurable frames come from.

FeatureCapture path
mode-snf (default)Promiscuous capture on a locked channel; no peer configuration
mode-staAssociate to an AP and capture CSI from that link
mode-apsoftAP (esp-csi-ap) with DHCP; captures an associated station’s uplink

Only one of mode-sta and mode-ap may be enabled at a time.

cargo run --release --features="lilygo-t4"                      # sniffer
cargo run --release --features="lilygo-t4,mode-sta"
cargo run --release --features="waveshare-esp32-s3-touch-amoled-1_8,mode-ap"

For station mode, set the SSID and password in src/main.rs where the station configuration is created, before flashing.

The logging features mirror the library’s: println, defmt, external-defmt-logger, async-print, jtag-serial, and uart.

Pairing It

In the default sniffer mode the board needs something to measure. Pair it with a second board running the esp-csi-rs ht20_emitter or ht40_emitter example — an emitter needs no association, so nothing has to be configured on the LiteGUI side beyond the channel.

Check the channel first. This application uses channel 1, while the ht20_emitter and ht40_emitter examples default to channel 7. Change one side to match the other, or the heatmap will show only ambient traffic and look, misleadingly, as though the emitter is not transmitting. This is the single most common first-run failure with this pairing.

In mode-ap, any Wi-Fi station that joins esp-csi-ap works — the esp-csi-rs wifi_station example, or a phone. Clients get a 192.168.13.x lease from the built-in DHCP server, and CSI flows as soon as one associates.

Source: csi-rs/esp-csi-litegui-rs