Embedded camera node for ESP32-S3 with a modular C++ architecture for real-time computer vision. This project demonstrates professional embedded CV engineering: camera bring-up, modular pipelines, efficient frame handling, and lowβpower vision processing.
Workβinβprogress: Part of the CCM Code Embedded Vision toolkit.
Designed as a portfolioβquality example of clean, modern ESPβIDF C++ development.
- ESP-IDF C++ project with multi-component architecture
- C++
CameraNodecomponent using theesp32-cameramanaged component - CvPipeline with Grayscale, ROI, Downsampling, Thresholding, and Blob Detection
- Host-Based Simulator (
simulation/) for fast PC-based testing - Persistent Settings using NVS (Non-Volatile Storage)
- Real-time FPS measurement and per-stage profiling
- MJPEG WiβFi streaming server (
stream_server) - Color blob detector (HSV)
- UART debug dashboard (FPS, memory, timings)
- Example: simple color-object tracker
For full component documentation, see:
π docs/architecture.md
ccm-esp32-vision-node/
β
βββ components/
β βββ camera_node/ # Camera bring-up abstraction
β βββ cv_pipeline/ # Modular image processing pipeline (WIP)
β βββ stream_server/ # Wi-Fi streaming endpoint (planned)
β βββ drivers/ # Camera/sensor-specific helpers
β βββ utils/ # Logging, timers, profiling
β
βββ firmware/
β βββ main/ # App entry point (main.cpp)
β βββ CMakeLists.txt
β
βββ docs/
β βββ architecture.md
β βββ media/ # diagrams (placeholder)
β
βββ examples/
βββ basic_fps_logger/ # First working demo
Developed and tested with:
- Chip: ESP32-S3
- SDK: ESP-IDF (Linux / WSL)
- Environment: Windows 10 + WSL Ubuntu
- Tools: VS Code,
idf.py, CMake
Validated hardware:
- ESP32-S3 dev boards with PSRAM
- OV2640 camera modules
- OV5640 (planned, not yet validated)
Target boards:
- ESP32-S3 dev board with PSRAM
- Camera modules:
- OV2640 (supported)
- OV5640 (planned)
Recommended specs:
- 8 MB PSRAM
- QVGA or VGA frame sizes for initial demos
- Stable 5V USB power
If using boards such as Seeed XIAO ESP32βS3 Sense, adjust only camera_config_t in camera_node.
https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/get-started/
git clone https://github.com/CahillMeyer/ccm-esp32-vision-node.git
cd ccm-esp32-vision-node/firmwareidf.py set-target esp32s3
idf.py menuconfigidf.py build
idf.py flash monitorI (0) cpu_start: Starting scheduler on PRO CPU.
I (0) main: Initialising camera...
I (250) camera_node: Camera init OK (320x240, PIXFORMAT_JPEG)
I (260) main: Captured frame 1 (size=32768 bytes)
I (270) main: FPS: 18.7
I (323) main: Captured frame 2 (size=32768 bytes)
I (333) main: FPS: 19.5
...
| Resolution | Pixel Format | Pipeline Stages | Avg FPS | Notes |
|---|---|---|---|---|
| 320Γ240 | RGB565 | None (raw) | TBD | Baseline |
| 320Γ240 | Gray | grayscale | TBD | First CV test |
| 320Γ240 | Gray+TH | gray+threshold | TBD | Planned |
| 640Γ480 | RGB565 | None | TBD | PSRAM required |
| 320Γ240 | Gray + Threshold | ~4.5 ms | ~28 | Host Sim |
| 320Γ240 | Gray + ROI + Downsample (2x) | ~1.0 ms | ~90+ | Host Sim (80x60 effective) |
Benchmarks will be updated as the pipeline matures.
- Add
cv_pipelinegrayscale + threshold stage - Add ROI cropping + reduction steps
- Add MJPEG WiβFi streaming server
- Add diagrams under
docs/media/
- Add blob detection demo
- Add region extraction example
- Add JSON status endpoint
- Add host-side tests
A reusable, modular Embedded Vision Node for ESP32-S3:
Setup board β configure pipeline β get structured vision output via UART or WiβFi.
- Embedded firmware engineers exploring ESP-IDF C++ patterns
- Robotics / IoT teams evaluating lowβpower embedded vision
- Engineering leads reviewing CCM Codeβs architecture + code quality
- Clients needing a reference implementation for ESP32βbased smart camera nodes
- ESP-IDF C++ multi-component project structure
- Camera bring-up via
esp32-camera - Continuous capture loop with real-time FPS logging
- Builds and flashes cleanly from WSL β ESP32-S3
- Early example demo under
examples/basic_fps_logger
MIT License β see LICENSE.
Christie Cahill Meyer
Embedded Vision Engineer
GitHub: https://github.com/CahillMeyer
Building real-time embedded vision systems is complex. This repo is a starting point, but every hardware setup is unique.
- Stuck on integration? I offer a Priority Issue Review tier on GitHub Sponsors. I'll prioritize your bug reports and config questions. Get Priority Support
- Need a custom driver? Book a Technical Quick-Sync to discuss your specific sensor or board requirements.