Skip to content

CahillMeyer/ccm-esp32-vision-node

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

22 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

ccm-esp32-vision-node

ESP-IDF Platform Language License: MIT CI

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.


πŸš€ Features (Current & Planned)

βœ… Implemented

  • ESP-IDF C++ project with multi-component architecture
  • C++ CameraNode component using the esp32-camera managed 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

πŸ›  In Progress

  • MJPEG Wi‑Fi streaming server (stream_server)
  • Color blob detector (HSV)

πŸ“Œ Planned

  • UART debug dashboard (FPS, memory, timings)
  • Example: simple color-object tracker

🧱 Project Architecture

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

πŸ§ͺ Tested / Target Environment

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)

πŸ“Έ Hardware Requirements

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.


πŸ–₯️ Getting Started (ESP-IDF)

1. Install ESP-IDF

https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/get-started/

2. Clone the repository

git clone https://github.com/CahillMeyer/ccm-esp32-vision-node.git
cd ccm-esp32-vision-node/firmware

3. Configure the target

idf.py set-target esp32s3
idf.py menuconfig

4. Build & flash

idf.py build
idf.py flash monitor

πŸ“Ÿ Example Serial Output (FPS Logger)

I (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
...

πŸ“Š Early Benchmarks (Placeholder)

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.


πŸ—ΊοΈ Roadmap

Near-term

  • Add cv_pipeline grayscale + threshold stage
  • Add ROI cropping + reduction steps
  • Add MJPEG Wi‑Fi streaming server
  • Add diagrams under docs/media/

Mid-term

  • Add blob detection demo
  • Add region extraction example
  • Add JSON status endpoint
  • Add host-side tests

Vision

A reusable, modular Embedded Vision Node for ESP32-S3:
Setup board β†’ configure pipeline β†’ get structured vision output via UART or Wi‑Fi.


Who Is This For?

  • 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

What Works Today (v0.1.0 – Alpha)

  • 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

πŸ“„ License

MIT License β€” see LICENSE.


πŸ‘€ Author

Christie Cahill Meyer
Embedded Vision Engineer
GitHub: https://github.com/CahillMeyer


πŸ› οΈ Support & Custom Integration

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.

About

Embedded camera node for ESP32-S3/ESP32-CAM with real-time CV processing.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Sponsor this project

 

Packages

 
 
 

Contributors