Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

RFC feat(firmware): XIAO ESP32S3 Sense camera node — CSI + OV3660 /snap + /stream on :8081 (compile-time optional)#1013

Open
stuinfla wants to merge 1 commit into
ruvnet:main from
stuinfla:feat/esp32s3-camera-node
Open

RFC feat(firmware): XIAO ESP32S3 Sense camera node — CSI + OV3660 /snap + /stream on :8081 (compile-time optional) #1013
stuinfla wants to merge 1 commit into
ruvnet:main from
stuinfla:feat/esp32s3-camera-node

Conversation

@stuinfla

@stuinfla stuinfla commented Jun 11, 2026

Copy link
Copy Markdown

RFC: optional onboard camera for the S3 CSI node (XIAO ESP32S3 Sense)

Feature proposal — marked RFC because it adds a new hardware capability rather than fixing a defect. Happy to adjust scope/naming to taste.

Motivation

The Seeed XIAO ESP32S3 Sense is an S3 CSI node with a free OV3660 camera on board. Having the same node serve ground-truth snapshots/video alongside its CSI stream is directly useful for labeling and sanity-checking pose/presence work (e.g. ADR-150-style training captures) without adding a second device to the rig.

What this adds

  • main/camera_node.c / camera_node.h (~190 lines): OV3660 init with the hardware-verified XIAO ESP32S3 Sense pin map (sensor PID 0x3660), plus an HTTP server with
    • GET /snap — single fresh JPEG (one stale framebuffer discarded first)
    • GET /stream — multipart MJPEG at ~5 fps
  • Kconfig menu: CONFIG_CAMERA_ENABLE (default n, depends on IDF_TARGET_ESP32S3) and CONFIG_CAMERA_HTTP_PORT (default 8081 — the OTA/WASM server owns 8032; httpd ctrl_port offset to 32769 since the OTA instance owns 32768)
  • idf_component.yml: espressif/esp32-camera ^2.0.0 with rules: if target == esp32s3, so non-S3 builds never fetch it
  • sdkconfig.defaults.s3cam build overlay: octal PSRAM (required for framebuffers), display/WASM trimmed (those pins collide with the camera on the XIAO)
  • main.c: starts the camera after WiFi is up; init failure is non-fatal by design — logs a warning and CSI streaming continues unaffected

CSI-coexistence design notes

  • QVGA JPEG, fb_count=2, CAMERA_GRAB_LATEST, quality 12 in PSRAM is the proven-reliable config from a probe firmware (SVGA with fb_count=1 overflowed: FB-OVF); bounded per-frame airtime keeps the CSI promiscuous callback from being starved
  • httpd tasks pinned to core 1, away from WiFi/CSI work on core 0
  • Zero impact when disabled: camera_node.c is only compiled under CONFIG_CAMERA_ENABLE, and the default for every existing target/overlay is off — the C6 and stock S3 builds are byte-identical to main

Hardware/test evidence

🤖 Generated with claude-flow

... /stream on :8081 (compile-time optional)
Adds an optional onboard-camera module to the esp32-csi-node firmware for
the Seeed XIAO ESP32S3 Sense: same CSI node, plus GET /snap (single JPEG)
and GET /stream (~5 fps MJPEG) served on CONFIG_CAMERA_HTTP_PORT
(default 8081; OTA owns 8032). Off by default (CONFIG_CAMERA_ENABLE=n),
S3-only Kconfig, esp32-camera managed component gated to target==esp32s3,
graceful degradation: camera init failure leaves CSI streaming untouched.
Includes sdkconfig.defaults.s3cam build overlay (octal PSRAM for
framebuffers, display/WASM trimmed — pins collide with the camera).
Build verified on IDF v5.5.2 (esp32s3) and exercised on hardware.
Co-Authored-By: claude-flow <ruv@ruv.net>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

No reviews

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

1 participant

AltStyle によって変換されたページ (->オリジナル) /