diff --git a/firmware/esp32-csi-node/README.md b/firmware/esp32-csi-node/README.md index f75d053c..9be2509d 100644 --- a/firmware/esp32-csi-node/README.md +++ b/firmware/esp32-csi-node/README.md @@ -4,7 +4,7 @@ This firmware captures WiFi Channel State Information (CSI) from an ESP32-S3 (production) or ESP32-C6 (research target — Wi-Fi 6 / 802.15.4 / TWT / LP-core hibernation, see [ADR-110](../../docs/adr/ADR-110-esp32-c6-firmware-extension.md)) and transforms it into real-time presence detection, vital sign monitoring, and programmable sensing -- all without cameras or wearables. Part of the [WiFi-DensePose](../../README.md) project. -[![ESP-IDF v5.2](https://img.shields.io/badge/ESP--IDF-v5.2-blue.svg)](https://docs.espressif.com/projects/esp-idf/en/v5.2/) +[![ESP-IDF v5.4](https://img.shields.io/badge/ESP--IDF-v5.4-blue.svg)](https://docs.espressif.com/projects/esp-idf/en/v5.4/) [![Target: ESP32-S3 / ESP32-C6](https://img.shields.io/badge/target-ESP32--S3%20%7C%20ESP32--C6-purple.svg)](https://www.espressif.com/en/products/socs/esp32-s3) [![License: MIT OR Apache-2.0](https://img.shields.io/badge/license-MIT%20OR%20Apache--2.0-green.svg)](../../LICENSE) [![Binary: ~943 KB](https://img.shields.io/badge/binary-~943%20KB-orange.svg)](#memory-budget) @@ -48,10 +48,18 @@ with `--flash_size 4MB`. # From the repository root: MSYS_NO_PATHCONV=1 docker run --rm \ -v "$(pwd)/firmware/esp32-csi-node:/project" -w /project \ - espressif/idf:v5.2 bash -c \ + espressif/idf:v5.4 bash -c \ "rm -rf build sdkconfig && idf.py set-target esp32s3 && idf.py build" ``` +> **Display-less boards (ESP32-S3-DevKitC-1 and similar):** build with the +> `sdkconfig.defaults.devkitc` overlay instead — the default build compiles +> display support in, and the runtime panel probe false-positives on boards +> with no panel, which disables the RuView#893 MGMT+DATA CSI upgrade and +> collapses CSI yield to 0 pps. See the header of +> [`sdkconfig.defaults.devkitc`](sdkconfig.defaults.devkitc) for the exact +> build command. + ### 2. Flash Offsets must match `partitions_display.csv` (8 MB) or `partitions_4mb.csv` (4 MB): @@ -250,7 +258,7 @@ Offset Size Field # From the repository root: MSYS_NO_PATHCONV=1 docker run --rm \ -v "$(pwd)/firmware/esp32-csi-node:/project" -w /project \ - espressif/idf:v5.2 bash -c \ + espressif/idf:v5.4 bash -c \ "rm -rf build sdkconfig && idf.py set-target esp32s3 && idf.py build" ``` @@ -268,7 +276,7 @@ To change Kconfig settings before building: ```bash MSYS_NO_PATHCONV=1 docker run --rm -it \ -v "$(pwd)/firmware/esp32-csi-node:/project" -w /project \ - espressif/idf:v5.2 bash -c \ + espressif/idf:v5.4 bash -c \ "idf.py set-target esp32s3 && idf.py menuconfig" ``` diff --git a/firmware/esp32-csi-node/sdkconfig.defaults.devkitc b/firmware/esp32-csi-node/sdkconfig.defaults.devkitc new file mode 100644 index 00000000..8cb1962a --- /dev/null +++ b/firmware/esp32-csi-node/sdkconfig.defaults.devkitc @@ -0,0 +1,16 @@ +# DevKitC-1 (display-less) production overlay. +# +# The stock ESP32-S3-DevKitC-1 has no AMOLED panel, but the ADR-045 runtime +# probe false-positives on it: with no TCA9554 and floating QSPI pins, the +# SH8601 init sequence reports success, display_is_active() returns true, and +# main.c skips the RuView#893 MGMT+DATA promiscuous upgrade — CSI yield +# collapses to 0 pps (the exact symptom #893 fixed). Compiling display support +# out makes has_display constant-false so the upgrade always applies. +# +# Build (from repo root, per README "Docker — the only reliable method"): +# MSYS_NO_PATHCONV=1 docker run --rm \ +# -v "$(pwd)/firmware/esp32-csi-node:/project" -w /project \ +# espressif/idf:v5.2 bash -c \ +# "rm -rf build sdkconfig && idf.py -DSDKCONFIG_DEFAULTS='sdkconfig.defaults;sdkconfig.defaults.devkitc' set-target esp32s3 && idf.py -DSDKCONFIG_DEFAULTS='sdkconfig.defaults;sdkconfig.defaults.devkitc' build" + +# CONFIG_DISPLAY_ENABLE is not set