A perceive→act node for the ESP32-CAM: watch the frame, detect something, then act — snapshot + notify, or drive a GPIO. Image/data egress over WiFi/HTTP; BLE for live control and telemetry.
It's a standalone firmware tree built to be flashed and driven by
esp32-loop — the host-side CLI that runs
the whole write → flash → observe → control arc on a real board:
uv run --project ../esp32-loop esp32loop flash <board> --project . --watch
uv run --project ../esp32-loop esp32loop gatt <board> # see the service shape
uv run --project ../esp32-loop esp32loop sub <board> # stream telemetry
uv run --project ../esp32-loop esp32loop send <board> ... # drive a pin
Baseline forked from esp32-loop's ble_control example: a connectable BLE GATT service
exposing a command characteristic (write [gpio, level] → set a pin) and a
telemetry characteristic (read + notify live {up, heap, pin, lvl}). This is the
act + observe half, drivable today.
The camera perceive half — frame capture, on-device detection, and WiFi/HTTP egress —
is the build target. See main/esp32-spotter_main.c.
main/esp32-spotter_main.c firmware entry — BLE service + (TODO) camera loop
CMakeLists.txt ESP-IDF project
sdkconfig.defaults* per-target defaults (esp32, esp32c3)
MIT © Jonas Neves