Repository navigation
v1.2.0 — Camera QR Wi-Fi provisioning on both board revisions
Camera QR Wi-Fi provisioning now works end to end on both ESP32-P4 board
revisions — point the on-board camera at your router's Wi-Fi QR code and the
analyzer fills in the SSID and password for you.
On the newer ESP32-P4X (silicon rev 3.x) the camera had never streamed at all.
This release fixes that, along with a UI freeze, and adds optional front-panel
hardware keys.
Highlights
Camera QR provisioning works on rev-3 silicon. The scanner reached
VIDIOC_STREAMON and failed there on every P4X. Two independent causes:
- esp_video 1.4.1 left
esp_isp_awb_config_t.subwindowuninitialised and
passed stack garbage to the ISP driver. Only chip revision ≥ 3.0 validates
that field — rev < 3 warns and ignores it — so the bug was invisible on the
older board and fatal on the newer one. Fixed by moving to esp_video 2.3.0
(2.2.0 carries Espressif's fix). - The generated ISP tuning table was never actually linked.
esp_ipa's
prebuilt library ships a placeholder built from a dummy sensor config, and
its build files let that placeholder win the link — so white-balance gains
were never set for any sensor. The project build now strips it at CMake
configure time.
The display no longer appears frozen after a scan. The camera's control bus
and the touch controller share the same two I2C pins. Starting the camera took
those pins, and teardown reset them outright, leaving touch and audio dead
until the next reboot while the screen kept drawing. The pins are now handed
back on teardown.
Real error messages. A failed scan used to report a bare "Scanner stopped"
— the actual reason was discarded before it could reach the screen. Each stage
now reports what to check, e.g. "No camera detected. Check the MIPI-CSI camera
module is connected and fully seated in its connector."
Optional front-panel keycaps. Support for up to two Seeed Grove-Mech
Keycaps — mechanical keys with RGB status LEDs, wired to the J1 header. They sit
on the GPIO matrix rather than the contended I2C bus, so they keep working while
touch is suspended for a camera scan.
- Key 1 — cycles the colour theme; aborts a running QR scan instead; a 2 s
hold restarts the board. - Key 2 — cycles the spectrum display mode.
- Each LED shows the colour of what its key currently selects, so the panel
reports state without waking the screen.
Wiring, pin rationale and a 3.3 V-only warning are in
hardware-setup.md. The feature compiles out cleanly if you
don't fit the hardware.
A bigger, undistorted QR preview — 640×420, aspect-preserved instead of
squashed, and the scanner no longer starves the UI or blocks it while stopping.
An idle scan now gives up after 45 seconds rather than holding the camera open.
Known limitation
The camera can only be started once per restart. esp_video 2.3.0's teardown
reports success but does not unregister the CSI video device, so a second scan
in the same session fails. The QR screen now detects this up front and tells you
to restart rather than opening a camera that cannot work. A scan that
successfully decodes a code reboots to join the network anyway, so the normal
path is unaffected.
Upgrade notes
espressif/esp_videomoves 1.4.1 → 2.3.0, which also pulls
esp_cam_sensor2.3.0 andesp_ipa2.2.0. Do not pin below esp_video 2.2.0
on rev-3 silicon.- Sensor-format Kconfig keys were renamed upstream
(CAMERA_SC2336_MIPI_RAW8_*→CAMERA_SC2336_MIPI_DEFAULT_FMT_RAW8_*). The
effective capture format is unchanged. - Two build environments remain, one per silicon revision:
pio run -e esp32-p4-evboardfor the v1.5.2 board (chip rev 1.x) and
pio run -e esp32-p4x-evboardfor the P4X v1.6 board (chip rev 3.x).
tools/check_chip_rev.pyblocks flashing the wrong image. - No settings migration is required.
Housekeeping
Around 130 lines of dead code removed — leftovers from three earlier refactors
(SD noise-floor persistence, spectrum pinch-zoom, and a Phase-1 status-bar stub)
where the replacement landed but the old path was never deleted. No behaviour
change.
Full detail in CHANGELOG.md.