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.
| Feature | Capture path |
|---|---|
mode-snf (default) | Promiscuous capture on a locked channel; no peer configuration |
mode-sta | Associate to an AP and capture CSI from that link |
mode-ap | softAP (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_emitterandht40_emitterexamples 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.
Relevant Links & Resources
Source: csi-rs/esp-csi-litegui-rs