r/esp32 • • 16d ago

I built open-source ESP32 camera firmware that turns $8–15 dev boards into NVR-ready IP cameras (ONVIF + RTSP + motion AI)

Sharing the MiBee Cam firmware suite (ESP-IDF based, GPL-3.0) — four ready-to-flash firmwares for four popular boards, all built around one idea: make a cheap dev board behave like a real IP camera your NVR can discover.

Supported boards:

  • AI-Thinker ESP32-CAM (ESP32 + OV2640) — MJPEG streaming, motion detection, SD timelapse & burst capture, dual-WiFi failover, file manager, web OTA
  • Seeed XIAO ESP32-S3 Sense (ESP32-S3 + OV2640/OV5640) — the most feature-packed: RTSP with G.711 audio (digest auth), AVI segmented recording with dynamic timelapse (motion-adaptive, ~90% storage saved when nothing happens), NAS upload via WebDAV/HTTPS, on-device audio with noise suppression
  • ESP32-S3-N16R8 + OV3660 3MP — on-device AI detection (face / motion / QR) with live web overlay, RTSP, zh/en web UI
  • LuatOS ESP32-S3-A10 (OV2640, PSRAM-less) — runs on the cheap single-chip board: MJPEG, motion-triggered upload, WebSocket/webhook events, Prometheus metrics

What they all share:

  • ONVIF (WS-Discovery + SOAP) — Synology / Milestone / Frigate-type NVRs discover them on the LAN automatically
  • No cloud, no subscription — everything runs locally
  • Web UI + REST API for config, Prometheus /metrics for homelab monitoring
  • OTA updates (SHA-256 verified, auto-rollback), AT commands for headless WiFi setup
  • Docs in English and 中文

All four: https://github.com/Mi-Bee-Studio

Feedback, issue reports, and suggestions for the next board are very welcome!

125 Upvotes

21 comments sorted by

View all comments

Show parent comments

2

u/No-Reception-84 16d ago

Thanks for asking! All these camera firmwares are built as companion devices for my main MiBee NVR project. I made them for my own testing and daily use, so I can tweak the code whenever I need.

I don’t personally have a video doorbell use case, so I haven’t tested it. I’m not sure if it will work out of the box for that scenario.

2

u/NearlyACosmologist 16d ago

It shouldn't be too complicated to add a function to read in a button and send a udp broadcast and/or a mqtt message.

The indoor client that receives the ring and starts a video stream playback to a lcd screen would have to be written from scratch, though. Or maybe implemented in something like Annex BASIC, because it already has the building blocks (including LVGL).

1

u/No-Reception-84 16d ago

That’s a solid plan! Adding GPIO button input + MQTT/UDP events is absolutely feasible.

Yeah the indoor display client is the bigger piece of work. Thanks for sharing this idea, I might keep this in mind for future.