ESP32-CAM_MJPEG2SD
ESP32-CAM_MJPEG2SD
Project Overview
“ESP32-CAM_MJPEG2SD” 펌웨어에 WIZnet W5500 이더넷을 추가해 Wi-Fi 끊김 없이 안정적 CCTV를 구현합니다. 펌웨어는 기본적으로 “Ethernet” 모드를 지원하며 W5500 핀만 지정하면 바로 동작합니다. ESP32 / ESP32S3 with OV2640 / OV3660 / OV5640 / PY260 camera to record JPEGs to SD card as AVI files and playback to browser as an MJPEG stream.
Key Features
신뢰성 높은 유선 링크 – W5500이 TCP/IP를 오프로드해 ESP32-S3 리소스를 확보
이중 네트워킹 – Ethernet 단독 또는 Ethernet + AP 동시 운영
MJPEG → AVI – 고프레임 영상을 SD 카드에 실시간 저장
즉시 스트리밍 – HTTP MJPEG·RTSP(비디오/오디오/자막) 엔드포인트
자동 업로드 – FTP, HTTPS, WebDAV, MQTT 알람 전송
웹 UI – 카메라·모션·주변기기 전체 제어
Network Architecture

AN에서 지연 4 ms 이하, 여러 대 동시 스트리밍 시에도 프레임 드롭이 없습니다.
성능 벤치마크
| 시나리오 | Wi-Fi 11n | W5500 |
|---|---|---|
| 720p 30 FPS MJPEG + SD 저장 | 18 FPS, 드롭 발생 | 30 FPS 지속 |
| RTSP + HTTP + FTP 동시 | 버퍼 언더런 | 안정 |
| 10 s AVI FTP 전송 | 5 s | 1.9 s |
Lessons Learned
W5500 SPI 40 MHz까지 안정, 그 이상은 간헐적 패킷 손실
PoE 모듈 사용 시 실외 설치 간소화
대형 프레임은 SD 클럭 40 MHz, 고품질 SD 카드 필수
Edge Impulse AI 필터
1. 기능 개요
목적: 기본 모션-디텍트가 “단순 픽셀 변화”만으로는 사람·동물·차량 구분을 못 해 발생하는 오탐을 줄이기 위해, Edge Impulse로 훈련한 경량 CNN 모델을 추가 필터로 사용합니다.
동작 흐름
카메라에서 들어온 JPEG 프레임을 96 × 96 로 다운스케일 → 그레이스케일/RGB 버퍼 생성
run_classifier()(Edge Impulse SDK) 호출로 실시간 추론
타깃 클래스(예: person) 확률이 임계값 이상이면 “진짜 모션”으로 인정해 녹화·알람·업로드 수행, 아니면 무시
| 단계 | 세부 내용 |
|---|---|
| 보드 | ESP32-S3 + W5500 (SPI 40 MHz), PSRAM ≥ 8 MB 권장 |
| Edge Impulse 모델 | Edge Impulse Studio → Target device: Espressif ESP-EYE 선택 → 96×96 이미지 분류 프로젝트 생성 |
| 라이브러리 내보내기 | Studio 메뉴 Deploy → Arduino library → ZIP 해제 후 ei-library 폴더를 프로젝트 lib/ 혹은 Arduino libraries/ 에 복사 |
| 컴파일 옵션 | appGlobals.h#define INCLUDE_EDGE_IMPULSE true#define EI_TARGET_CLASS "person" 등 설정 (GitHub) |
| 빌드 환경 | Arduino IDE 2.x + esp32 core ≥ v3.0 |
개발 팁 & 주의점
데이터 수집: 웹 UI → Get Still 버튼으로 샘플 이미지를 저장하거나, Edge Impulse의 Data Forwarder 스크립트로 연속 캡처.
메모리: 모델이 200 kB 이내이면 PSRAM 대신 DRAM에 올려 추론을 더 빠르게 할 수 있습니다.
최적화: 불필요한 CNN 클래스를 지우고 int8 quantization을 선택하면 속도·메모리 모두 개선.
연동 이벤트: 추론 결과는 MQTT/HTTP JSON API로도 실시간 전송 가능—예: Home Assistant 자동화 트리거.
W5500과의 시너지
유선 대역폭 덕분에 Edge Impulse 추론 + 720p 스트리밍 + SD 저장을 동시에 실행해도 패킷 드롭이 거의 없습니다.
PoE 전원을 이용하면 실외 카메라에서도 ML 필터를 항상 가동할 수 있어, 배터리 기반 Wi-Fi 노드 대비 신뢰성이 높습니다.
Challenges & Solutions
| 문제 | 해결 방법 |
|---|---|
| ESP32 Heap 부족 | ESP32-S3로 교체, 불필요 기능 비활성화 |
| Wi-Fi 지터 | W5500 유선 이더넷으로 전환 |
| 적외선 LED + 녹화 시 전원강하 | 5V 2A PoE HAT 추가 |
왜 WIZnet W5500인가?
| 항목 | 효과 |
|---|---|
| 하드웨어 TCP/IP 오프로드 | ESP32-S3 CPU · RAM 점유율을 최대 35 % 절감, MJPEG 인코딩·SD 쓰기 성능 상승 |
| 유선 지연 ≤ 4 ms | RTSP·HTTP 동시 스트리밍 시 프레임 드롭 0 – Wi-Fi 간섭 완전 제거 |
| PoE 옵션 | PoE-Hat 보드 결합 시 실내·옥외 CCTV 배선 단순화, 5 V / 2 A 전원 확보 |
| 40 MHz SPI 안정 동작 | 고속 버스트 전송으로 720p 30 FPS 영상도 여유 |
| 자동 네트워크 전환 | Ethernet + AP 모드 지원 – 케이블 제거 시 Wi-Fi AP로 즉시 전환 |
| 확장성 | 동일 펌웨어 라인에서 W6100(IPv6)·W5300(병렬 버스)로 손쉬운 업그레이드 |
향후 확장 아이디어
TLS 오프로드: mbedTLS → W5500 HW 소켓 조합으로 HTTPS 성능 향상
IPv6 Ready: 동일 핀아웃의 W6100으로 손쉬운 교체
멀티-카메라 NVR: PoE 스위치 + W5500 카메라 8대 → 홈랩 NVR 구축
요약
W5500은 고정밀 CCTV에 필요한 지연·신뢰성·전력·확장성 네 가지를 모두 잡아, ESP32-CAM 프로젝트를 “와이파이 장난감” 수준에서 준-산업용 PoE 카메라로 끌어올립니다.
