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

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]:

  1. enable Wi-Fi CSI in menuconfig (Components config → Wi-Fi → Wi-Fi CSI);
  2. register a receive callback with esp_wifi_set_csi_rx_cb();
  3. configure it with esp_wifi_set_csi_config();
  4. turn it on with esp_wifi_set_csi().

Two practical notes from the same page:

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:

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.

  1. 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."
  2. 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)
  3. 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)
  4. 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)
  5. 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.