Skip to content

SurvCam: Self-Hosted ESP32-CAM CCTV with W5500 Ethernet and MQTT

SurvCam builds a self-hosted ESP32-CAM CCTV system using W5500 Hardwired TCP/IP for MJPEG streaming, MQTT monitoring, and remote OTA updates.

irina

Published November 09, 2026

Original author: DevarshiBohraOriginal source (new tab)

SurvCam: Self-Hosted ESP32-CAM CCTV with W5500 Ethernet and MQTT

Project description

SurvCam은 저가형 ESP32-CAM 여러 대와 Ubuntu 서버, Android 앱을 결합해 구성한 self-hosted multi-camera CCTV system입니다.

Camera node는 Wi-Fi, W5500 wired Ethernet, 또는 별도의 ESP32 bridge 방식으로 연결할 수 있으며, MJPEG video stream과 MQTT heartbeat를 서버에 전달합니다. Server에서는 recording, motion detection, camera health monitoring, snapshot, notification, firmware management 등을 처리합니다.

특히 W5500을 사용하는 LAN camera는 별도의 firmware로 구현되어 있으며, video streaming뿐 아니라 MQTT, setup/OTA web server, firmware download까지 모두 W5500 Ethernet을 통해 처리합니다.

1. 전체 시스템 구조

SurvCam은 크게 Camera Node, Ubuntu Server, Android App으로 구성됩니다.

ESP32-CAM Nodes
      │
      │ Wi-Fi / W5500 Ethernet
      ▼
Ubuntu SurvCam Server
      │
      ├── FastAPI
      ├── SQLite
      ├── OpenCV
      ├── FFmpeg
      └── Mosquitto MQTT
              │
              ▼
        Android App
1. 전체 시스템 구조

ESP32-CAM은 video와 camera 상태를 전달하고, Ubuntu server는 여러 camera를 중앙에서 관리합니다.

주요 기능은 다음과 같습니다.

  • Multi-camera live view
  • Scheduled recording
  • Motion-triggered recording
  • Cross-camera triggering
  • Snapshot management
  • Camera health monitoring
  • Reboot / dropout history
  • MQTT heartbeat
  • Remote reboot
  • Remote firmware update
  • Firmware rollback
  • Android notification

Repository에는 camera installation을 실제 배치해 운영한 구성도 설명되어 있으며, refurbished dual-core Intel i3 PC가 server로 사용되었습니다.

2. W5500 Wired Camera

SurvCam은 network 환경에 따라 세 종류의 camera firmware를 제공합니다.

FirmwareNetwork
esp32cam_ota_0.11.0-wifiWi-Fi
esp32cam_ota_0.11.0-lanW5500 Ethernet
esp32cam_ota_0.11.0-bridge-cameraNodeUART + ESP32 Bridge

WIZnet W5500을 사용하는 LAN firmware는 AI Thinker ESP32-CAM과 W5500 SPI Ethernet module을 연결합니다.

2. W5500 Wired Camera

W5500 Wiring

ESP32-CAMW5500
GPIO12MISO
GPIO13MOSI
GPIO14SCLK
GPIO2CS
GNDGND
VCCModule specification에 따른 3.3 V / 5 V

이 firmware에서는 Wi-Fi 대신 W5500이 camera의 network path를 담당합니다.

3. W5500 Hardwired TCP/IP

LAN firmware는 다음 library를 사용합니다.

#include <EthernetSPI2.h>

SurvCam source에서는 EthernetSPI2가 W5500을 ESP-IDF network interface로 등록하는 방식이 아니라 W5500 자체의 Hardwired TCP/IP socket을 사용하는 Arduino Ethernet 방식이라고 명확하게 설명합니다.

따라서 LAN firmware에서는 일반적인 ESP32 Wi-Fi application에서 사용하는:

WiFiClient
HTTPClient
esp_http_server

대신:

EthernetClient
EthernetServer

를 사용해 network service를 구현합니다.

전체 data path는 다음과 같습니다.

Camera Sensor
      │
      ▼
  ESP32-CAM
      │
      │ SPI
      ▼
    W5500
      │
      │ Hardwired TCP/IP
      ▼
 Ethernet LAN

즉 이 프로젝트에서 W5500은 단순 Ethernet interface가 아니라 TCP/IP communication을 처리하는 Hardwired TCP/IP controller로 사용됩니다.

4. 하나의 W5500을 통한 여러 Network Service

W5500 LAN camera에서는 여러 network service가 동시에 사용됩니다.

PortFunction
81MJPEG Stream
8080Identity / Setup / OTA
1883MQTT
8000SurvCam Server FastAPI

Camera 쪽 network flow는 다음과 같습니다.

Camera Sensor
      │
      ▼
  ESP32-CAM
      │
      │ SPI
      ▼
    W5500
      │
      ├── MJPEG Stream
      ├── MQTT Heartbeat
      ├── Remote Command
      ├── Firmware Download
      └── Setup / OTA Page
              │
              ▼
       SurvCam Server
4. 하나의 W5500을 통한 여러 Network Service

W5500 하나가 video streaming뿐 아니라 management와 firmware update network까지 담당합니다.

5. MJPEG Streaming

LAN camera는 port 81의 /stream endpoint를 통해 MJPEG video를 제공합니다.

Camera는 하나의 stream을 SurvCam server에 제공하고, server는 이를 여러 viewer에게 다시 전달합니다.

ESP32-CAM + W5500
        │
        │ One MJPEG Stream
        ▼
   SurvCam Server
        │
        ├── Viewer 1
        ├── Viewer 2
        └── Viewer N
5. MJPEG Streaming

여러 Android client가 각각 ESP32-CAM에 직접 접속하는 것이 아니라 server가 stream을 fan-out하는 구조입니다.

6. MQTT Camera Monitoring

SurvCam에서 MQTT는 video transport가 아니라 camera monitoring과 control channel 역할을 담당합니다.

Camera는 heartbeat를 통해 다음 정보를 전달합니다.

  • Camera ID
  • Camera name
  • IP address
  • Firmware version
  • Uptime
  • Reset reason
  • Restart cause
  • Free heap
  • Chip temperature
  • OTA state
  • OTA progress
  • Network type
  • Ethernet MAC address

LAN camera는 heartbeat에서 network type을 lan으로 표시합니다.

MQTT Last Will도 사용해 camera connection이 예기치 않게 종료된 경우 offline 상태를 감지합니다.

Server는 MQTT heartbeat 외에 별도의 TCP reachability probe도 사용해 camera, network, MQTT broker 장애를 구분합니다.

7. Ethernet Link Monitoring과 Self-Healing

W5500 LAN firmware는 Ethernet link와 DHCP 상태를 지속적으로 확인합니다.

Ethernet.linkStatus();
Ethernet.maintain();

Cable 또는 switch 문제로 Ethernet link가 끊겼다가 다시 복구된 경우 firmware는 network 상태를 회복하기 위해 camera를 restart할 수 있습니다.

매우 짧은 link glitch는 별도 count하고, 실제 link interruption과 구분합니다.

Firmware가 기록하는 restart cause에는 다음 항목들이 포함됩니다.

LAN_RECONNECT
LAN_CONNECT_TIMEOUT
LAN_DHCP_LOST
MQTT_LOST
OTA
OTA_FAIL
REMOTE_REBOOT
ROLLBACK

이 정보는 heartbeat와 camera history에 활용됩니다.

8. Remote OTA와 Rollback

SurvCam은 W5500 Ethernet camera의 remote firmware update를 지원합니다.

Backend / Android App
        │
        │ Signed MQTT Command
        ▼
    ESP32-CAM
        │
        │ HTTP Firmware Download
        ▼
      W5500
        │
        ▼
  SurvCam Server

Remote OTA command에는 HMAC-SHA256 signature가 적용됩니다.

Camera는 firmware image를 download한 뒤 SHA-256을 확인하고 설치합니다.

새 firmware가 일정 시간 동안 정상적으로 LAN 및 MQTT connection을 유지하지 못하거나 boot failure가 반복되면 이전 firmware partition으로 rollback할 수 있습니다.

Camera ID, name, password는 firmware image와 분리되어 flash에 저장되므로 하나의 .bin firmware를 여러 camera에 사용할 수 있습니다.

9. Ubuntu Server

SurvCam backend는 다음 component를 사용합니다.

  • FastAPI
  • SQLite
  • OpenCV
  • FFmpeg
  • Mosquitto MQTT

Server는 여러 camera의 stream을 받아 recording과 motion detection을 수행합니다.

H.264 recording은 Intel VAAPI hardware encoding을 사용할 수 있으며, hardware encoding을 사용할 수 없는 경우 libx264 software encoding으로 fallback합니다.

Camera에서는 MJPEG를 전달하며, H.264 encoding은 server 쪽에서 처리됩니다.

10. Motion Detection과 Recording

SurvCam은 continuous recording과 motion-triggered recording을 함께 사용합니다.

Default 구성에서는 특정 시간대에 continuous recording을 수행하고, 그 외 시간에는 motion detection을 기반으로 recording을 시작합니다.

한 camera에서 motion event가 발생했을 때 다른 camera의 recording도 함께 시작할 수 있는 cross-camera triggering 기능도 포함됩니다.

따라서 camera node는 image acquisition과 streaming에 집중하고, motion processing과 recording policy는 중앙 server가 처리합니다.

11. Android Application

Native Android app에서는 다음 기능을 사용할 수 있습니다.

  • Multi-camera live view
  • Single camera live view
  • Live FPS
  • Recording playback
  • Snapshot browsing
  • Camera status
  • Reboot / dropout history
  • Notification
  • Remote reboot
  • Firmware update
  • Firmware rollback

Camera와 직접 Internet communication을 구성하는 대신 Android app은 SurvCam backend를 통해 camera system에 접근합니다.

12. Remote Access

Camera의 network port와 MQTT broker는 Internet에 직접 공개하지 않습니다.

Camera Stream      → LAN Only
Setup / OTA Page   → LAN Only
MQTT Broker        → LAN Only

Remote access가 필요한 경우 FastAPI backend를 Cloudflare Tunnel을 통해 외부에 제공합니다.

ESP32-CAM + W5500
        │
        │ Private LAN
        ▼
   SurvCam Server
        │
        ▼
 Cloudflare Tunnel
        │
        ▼
    Android App

Camera 자체에 Internet port forwarding을 구성하지 않는 구조입니다.

13. Wi-Fi와 W5500은 별도 Firmware

SurvCam은 Wi-Fi와 W5500 Ethernet을 모두 지원하지만 한 camera에서 두 network를 동시에 사용하는 방식은 아닙니다.

Wi-Fi Camera
    └── Wi-Fi Firmware

W5500 Camera
    └── LAN Firmware

Bridge Camera
    └── Bridge Firmware

14. Known Limitations

현재 repository에 명시된 주요 제한사항은 다음과 같습니다.

  • Camera firmware의 MQTT username/password authentication 미지원
  • MQTT broker는 trusted LAN 내부 사용
  • Camera stream 및 setup service는 LAN 내부 HTTP
  • MJPEG stream은 약 10–12 fps 수준의 surveillance 용도
  • Android client 중심
  • Recording schedule과 일부 retention 값은 code constant
  • Hardware H.264 encoding은 Intel VAAPI 기준

15. Related WIZnet Maker Projects

SurvCam과 비교할 수 있는 WIZnet Maker 프로젝트에는 ESP32 camera와 W5500을 이용한 wired video streaming 및 CCTV application이 있습니다.

Project Comparison

FeatureSurvCamEthernetSPI2ESP32-CameraWebServer-ov5640ESP32-S3 CCTV Camera
W5500 Ethernet✅✅✅✅
ESP32 Camera✅✅✅✅
Wired Video Streaming✅✅✅✅
MQTT✅––✅
Multi-Camera Backend✅–––
Central Recording✅–––
Local SD Recording–––✅
Motion DetectionServer––Camera
Remote OTA✅–––
Android Application✅–––
Camera Health Monitoring✅––MQTT Telemetry
Hardwired TCP/IP✅✅Ethernet Library❌
TOEYY–N

SurvCam은 W5500 기반 ESP32-CAM node를 중앙 Ubuntu server와 연결해 multi-camera streaming, centralized recording, motion detection, monitoring과 firmware management를 하나의 system으로 구성합니다.

EthernetSPI2와 ESP32-CameraWebServer-ov5640은 wired camera streaming 자체에 집중하고, ESP32-S3 CCTV Camera는 recording과 motion processing을 camera node 내부에서 수행합니다.

EthernetSPI2

EthernetSPI2 | WIZnet Makers

EthernetSPI2는 ESP32-CAM과 W5500을 이용한 wired JPEG streaming project입니다.

ESP32-CAM의 camera interface와 SPI resource 사용을 고려해 W5500을 HSPI로 연결하며, Arduino Ethernet library를 기반으로 W5500 중심으로 수정된 EthernetSPI2 library를 사용합니다.

Camera
   │
   ▼
ESP32-CAM
   │ HSPI
   ▼
 W5500
   │
Ethernet
   │
   ▼
Web Client

SurvCam의 LAN firmware도 EthernetSPI2를 사용하지만 streaming 외에 MQTT, OTA, link monitoring, firmware rollback과 multi-camera backend를 추가합니다.

 ESP32-CameraWebServer-ov5640

ESP32-CameraWebServer-ov5640 | WIZnet Makers

이 프로젝트는 ESP32-CAM, OV5640 camera와 W5500을 결합해 wired Ethernet을 통한 real-time browser video streaming을 구현합니다.

OV5640
   │
   ▼
ESP32-CAM
   │ SPI
   ▼
 W5500
   │
Ethernet LAN
   │
   ▼
Web Browser

ESP32-CameraWebServer-ov5640은 개별 camera의 direct web streaming에 집중하고, SurvCam은 여러 camera를 Ubuntu backend에서 통합 관리합니다.

 ESP32-S3 CCTV Camera

ESP32-S3 CCTV Camera — IoT Surveillance Camera Firmware with W5500 Ethernet Support

ESP32-S3 CCTV Camera는 ESP32-S3, OV3660, W5500, MicroSD, MQTT와 Web UI를 결합한 CCTV / IoT camera firmware입니다.

Camera node 자체에서 streaming, motion detection, SD recording, timestamp OSD와 MQTT telemetry를 수행합니다.

Camera
   │
   ▼
ESP32-S3
   ├── Motion Detection
   ├── SD Recording
   ├── Web UI
   └── MQTT
          │
          ▼
      W5500 Ethernet

SurvCam은 motion detection과 recording을 Ubuntu server에서 수행하는 centralized architecture입니다.

두 프로젝트의 W5500 사용 방식도 다릅니다.

SurvCam
EthernetSPI2
   ↓
W5500 Hardwired TCP/IP Socket
   ↓
TOE = Y
ESP32-S3 CCTV Camera
ETH / esp_netif / lwIP
   ↓
W5500 Ethernet Interface
   ↓
TOE = N

ESP32-S3 CCTV Camera에서는 W5500을 ESP32 ETH / esp_netif / lwIP network-interface path로 사용하며, W5500 hardware socket API를 직접 사용하지 않습니다.

FAQ

Q1. SurvCam에서 W5500은 실제로 사용되나요?

네. esp32cam_ota_0.11.0-lan이라는 별도의 ESP32-CAM + W5500 firmware가 포함되어 있습니다.

Q2. W5500은 video streaming에도 사용되나요?

네. W5500 LAN firmware는 port 81에서 MJPEG stream을 제공합니다.

Q3. MQTT도 W5500을 통해 전달되나요?

네. LAN camera의 MQTT heartbeat와 remote command도 W5500 Ethernet을 통해 전달됩니다.

Q4. W5500 Hardwired TCP/IP를 사용하나요?

네. LAN source는 EthernetSPI2가 W5500 자체의 TCP/IP socket을 사용하는 구조라고 명시하고 있습니다.

Q5. Wi-Fi와 W5500을 동시에 사용하나요?

아닙니다. Wi-Fi와 LAN은 서로 다른 firmware build입니다.

Q6. ESP32-CAM에서 H.264 encoding을 하나요?

아닙니다. Camera는 MJPEG stream을 제공하며 H.264 recording은 Ubuntu server의 FFmpeg가 수행합니다.

Q7. Camera를 Internet에 직접 공개하나요?

아닙니다. Camera stream과 MQTT는 LAN 내부에서 사용하고 remote access는 SurvCam backend를 통해 처리합니다.


SurvCam is a self-hosted multi-camera CCTV system built around ESP32-CAM nodes, an Ubuntu server, and a native Android application.

Camera nodes can operate over Wi-Fi, W5500 wired Ethernet, or a separate ESP32 bridge configuration. They provide MJPEG video streams and MQTT heartbeats, while the central server handles recording, motion detection, camera monitoring, storage, and firmware management.

A dedicated W5500 LAN firmware is provided for wired cameras.

W5500 LAN Architecture

Camera Sensor
      │
      ▼
  ESP32-CAM
      │ SPI
      ▼
    W5500
      │
      │ Hardwired TCP/IP
      ▼
 Ethernet LAN
      │
      ▼
 SurvCam Server
W5500 LAN Architecture

The LAN firmware uses EthernetSPI2, which operates the W5500's own TCP/IP sockets through the Arduino Ethernet-style interface.

The wired path carries:

  • MJPEG streaming
  • MQTT heartbeat and control
  • camera setup
  • OTA management
  • firmware downloads
  • Ethernet health monitoring
  • Network Services
PortPurpose
81MJPEG Stream
8080Setup / Identity / OTA
1883MQTT
8000Backend API
W5500 LAN Architecture

Camera Monitoring

MQTT heartbeat messages provide camera status including firmware version, uptime, reset cause, network type, memory status, OTA state, and Ethernet identity.

Ethernet link monitoring and DHCP maintenance are handled in the camera firmware, and restart causes are reported to the backend.

Remote OTA

Firmware updates are initiated through signed MQTT commands.

The camera downloads the firmware through W5500 Ethernet, verifies the image, installs it, and can roll back if the new firmware does not remain healthy.

SurvCam: Self-Hosted ESP32-CAM CCTV with W5500 Ethernet and MQTT, Remote OTA

Server Architecture

The Ubuntu backend combines:

  • FastAPI
  • SQLite
  • OpenCV
  • FFmpeg
  • Mosquitto

The server performs centralized recording and motion detection for multiple camera nodes.

Android Client

The Android application provides:

  • live multi-camera view
  • recording playback
  • snapshots
  • camera health
  • reboot history
  • firmware management
  • notifications
SurvCam: Self-Hosted ESP32-CAM CCTV with W5500 Ethernet and MQTT, Android Client

Related WIZnet Maker Projects

EthernetSPI2

EthernetSPI2 | WIZnet Makers

EthernetSPI2 combines ESP32-CAM and W5500 to provide wired JPEG streaming and serves as the Ethernet foundation also used in the SurvCam LAN firmware.

ESP32-CameraWebServer-ov5640

ESP32-CameraWebServer-ov5640 | WIZnet Makers

This project combines ESP32-CAM, OV5640 and W5500 to stream real-time video directly to a browser over wired Ethernet.

ESP32-S3 CCTV Camera

ESP32-S3 CCTV Camera | WIZnet Makers

This ESP32-S3 CCTV firmware combines W5500 Ethernet, camera-based motion detection, SD recording, MQTT telemetry and a web UI.

Unlike SurvCam, its W5500 operates through the ESP32 ETH / esp_netif / lwIP network-interface path rather than the W5500 Hardwired TCP/IP socket API.

Comparison

FeatureSurvCamEthernetSPI2CameraWebServer OV5640ESP32-S3 CCTV
W5500✅✅✅✅
Video Streaming✅✅✅✅
MQTT✅––✅
Multi-Camera Backend✅–––
Server Recording✅–––
SD Recording–––✅
Motion DetectionServer––Camera
OTA✅–––
Android App✅–––
TOEYY–N

FAQ

Does SurvCam use W5500 directly?
Yes. A dedicated LAN firmware connects ESP32-CAM to W5500 through SPI.

Is video streamed through W5500?
Yes. MJPEG streaming uses the wired Ethernet path.

Is MQTT also carried over W5500?
Yes. Wired camera heartbeat and control traffic use W5500 Ethernet.

Does the LAN firmware use W5500 Hardwired TCP/IP?
Yes. It uses EthernetSPI2 and the W5500's own TCP/IP sockets.

Are Wi-Fi and Ethernet used at the same time?
No. They are separate camera firmware variants.

Comments

Similar projects you might like

Comments