---
title: "ESP32-CAM_MJPEG2SD"
url: "https://maker.wiznet.io/lawrence/projects/esp32-cam-mjpeg2sd/"
markdown_url: "https://maker.wiznet.io/lawrence/projects/esp32-cam-mjpeg2sd/md"
type: "UCC: User Created Content"
author: "lawrence"
author_url: "https://maker.wiznet.io/lawrence/"
original_url: "https://github.com/s60sc/ESP32-CAM_MJPEG2SD"
published: "2025-11-26"
language: "en"
likes: 0
views: 1458
comments: 0
source: "WIZnet Makers (https://maker.wiznet.io/)"
---

# ESP32-CAM_MJPEG2SD

> ESP32-CAM_MJPEG2SD

Original source: https://github.com/s60sc/ESP32-CAM_MJPEG2SD

## Article

### 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 ![](https://maker.wiznet.io/upload/ckeditor5/1071068733%5F1764337257%2Epng)

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](https://github.com/s60sc/ESP32-CAM_MJPEG2SD?utm_source=chatgpt.com)) |
| **빌드 환경** | 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 노드 대비 신뢰성이 높습니다.

![](https://github.com/s60sc/ESP32-CAM_MJPEG2SD/raw/master/extras/TinyML.png)

### 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 카메라**로 끌어올립니다.

---

Source: https://maker.wiznet.io/lawrence/projects/esp32-cam-mjpeg2sd/
