ESP32-S3 CSI: yes it works — and when you need a 5 GHz chip instead
2026-10-11 · ESP32-S3, Wi-Fi CSI, esp-csi, 2.4 GHz, ESP32-C5 · 3 min read
The ESP32-S3 is the chip most people reach for when they outgrow the original ESP32: more RAM, more compute, USB, and a lower price than a Raspberry Pi. The question is always the same — does it do CSI, and is it good enough?
Short answer
- Yes, the ESP32-S3 supports Wi-Fi CSI. Espressif states that all ESP32 series chips support CSI, S3 included, and the ESP-IDF programming guide documents the S3 CSI payload in detail [1] [2].
- It is a 2.4 GHz part. The S3 CSI tables cover 20 MHz and 40 MHz channels only; there is no 5 GHz band to measure.
- You get tens to a few hundred complex subcarrier values per packet, not the 256 subcarriers an 80 MHz router gives you.
- If you specifically want 5 GHz CSI on Espressif silicon, the ESP32-C5 is the dual-band (2.4 GHz + 5 GHz) CSI part [3].
1. What the vendor docs actually say
The ESP-IDF guide for the ESP32-S3 describes CSI as "the channel frequency responses of sub-carriers … estimated when packets are received from the transmitter". Each subcarrier is stored as two signed bytes — imaginary part first, then real part — and up to three training fields can be present: LLTF, HT-LTF and STBC-HT-LTF [2].
That last detail matters more than it looks: the payload size per packet is not fixed. It depends on the packet type, the channel width and whether STBC is used. The S3 table ranges from 128 bytes (20 MHz non-HT, 64 complex values) up through larger HT-LTF cases. Log the reported length instead of hard-coding a subcarrier count — exactly the same rule we give for router CSI.
The ESP32-S3 also has a documented hardware quirk: when first_word_invalid is set, the first four bytes of the CSI
buffer are invalid and must be discarded [2]. Forgetting this puts a constant notch at the start
of every measurement.
2. Getting CSI out of an S3 (the four calls)
The ESP-IDF flow is short [2]:
- enable
Wi-Fi CSIinmenuconfig(Components config → Wi-Fi → Wi-Fi CSI); - register a receive callback with
esp_wifi_set_csi_rx_cb(); - configure it with
esp_wifi_set_csi_config(); - turn it on with
esp_wifi_set_csi().
Two practical notes from the same page:
- the callback runs in the Wi-Fi task — copy data to a queue and process it elsewhere;
- a connected station only receives packets from its AP, so the docs suggest enabling promiscuous mode to harvest more CSI frames.
On the application side, espressif/esp-csi ships ready-made sender/receiver examples and a csi_data_read_parse.py
parser; ESP32-CSI-Tool is the CSV-oriented alternative for datasets, and ESPectre wraps the whole thing into an
ESPHome presence sensor [1] [4] [5].
3. The 5 GHz question
Here is the trade-off nobody puts on the box:
| Chip | Band | CSI | Notes |
|---|---|---|---|
| ESP32 (classic) / ESP32-S3 | 2.4 GHz | yes | cheapest entry, 20/40 MHz |
| ESP32-C6 | 2.4 GHz | yes | Wi-Fi 6 (2.4 GHz only) |
| ESP32-C5 | 2.4 + 5 GHz | yes | dual-band Wi-Fi 6, WIFI_BAND_MODE_AUTO [3] |
| Router (MT7986 + mt76 CSI) | 5 GHz | yes | 80 MHz / 256 subcarriers / 8 chains |
Espressif's dual-band support is real — the C5 API exposes a band mode that operates on both 2.4 GHz and 5 GHz channels [3] — but note that no Espressif chip currently gives you an 80 MHz CSI view. For that class of resolution (breathing, fine motion) the router route is the practical option, and it is the one we built and measured on this site.
So the honest decision rule:
- Learning, IoT, smart-home presence: ESP32-S3 is plenty, and it is cheap [5].
- 5 GHz experiments on an MCU: ESP32-C5.
- Whole-home, high-resolution, 24/7 sensing: a CSI-capable router, not an ESP32.
4. Where this leaves you
The ESP32-S3 is a legitimate CSI platform with first-party documentation — treat the "S3 can't do CSI" claim as wrong, and treat "S3 does 80 MHz" as equally wrong. Pin down the band and the channel width first, then pick the hardware.
Related: ESP32 CSI getting started · ESP32 human detection · router CSI reproduction · 2.4 GHz vs 5 GHz
References and data sources
Every external claim carries a source and an evidence grade (grading scheme). Grade E marks first-party, reproducible measurements from this project.
- Grade C · official docs
espressif/esp-csi — Applications based on Wi-Fi CSI
Espressif Systems
github.com/espressif/esp-csi · verified: GitHub API 2026-10-11 (stars 1,679) · The official README states: "All ESP32 series support CSI, including ESP32 / ESP32-S2 / ESP32-C3 / ESP32-S3 / ESP32-C5 / ESP32-C6 / ESP32-C61." - Grade C · official docs
ESP-IDF — Wi-Fi Channel State Information (ESP32-S3)
Espressif Systems
docs.espressif.com/projects/esp-idf/en/stable/esp32s3/api-guides/wifi-driver/wifi-vendor-features.html#wi-fi-channel-state-information · verified: official docs fetched 2026-10-11 (ESP32-S3 CSI section: subcarrier/byte-count table and the first_word_invalid note) - Grade C · official docs
ESP-IDF — esp_wifi API (ESP32-C5): band mode 2.4G + 5G
Espressif Systems
docs.espressif.com/projects/esp-idf/en/stable/esp32c5/api-reference/network/esp_wifi.html · verified: official docs fetched 2026-10-11 (text includes "band mode 2.4G + 5G (WIFI_BAND_MODE_AUTO)" and 802.11anacax) - Grade C · official docs
StevenMHernandez/ESP32-CSI-Tool — active/passive CSI extraction for ESP32
S. M. Hernandez
github.com/StevenMHernandez/ESP32-CSI-Tool · verified: GitHub API 2026-10-11 (stars 571, MIT, last push 2024-07-16) - Grade C · official docs
francescopace/espectre — Wi-Fi CSI motion sensing for ESP32 (ESPHome)
F. Pace
github.com/francescopace/espectre · verified: GitHub API 2026-10-11 (stars 9,505)
This page contains affiliate links (rel="sponsored"). Buying through them costs you nothing extra and earns this site a small commission.