ESP32 카메라 설치
외출 시 간단하게 집 안 모니터링을 위해 CCTV를 찾아보고 있었는데, 적당한 가격의 CCTV 중 privacy 문제가 없는 제품을 찾기 어려웠다.
CCTV를 제대로 설치하려면 생각보다 복잡했다. 조건은:
- 클라우드 기반이 아닌 로컬에서도 동작해야 하고
- CCTV를 위한 closed network를 따로 설정하고
- CCTV에 접근할 수 있는 기기를 설정해야 한다.
현재 집에서 외출 시 모니터링 용으로 사용하는 CCTV가 있다. CCTV에 대해 잘 모르는 상태에서 급하게 주문을 했고, 로컬이 아닌 클라우드 기반으로 설정해서 사용하고 있다. Privacy에 대한 대비책으로는 스마트 플러그와 같이 사용하고 있어 평상시에는 전원을 차단하고 필요할 때만 잠깐 사용한다. 다행히 로컬로도 동작하는 기기이지만 아직 설정은 못했다.
마침 추가로 CCTV를 설치하려고 CCTV에 대해 틈틈히 알아보다 공돌이 마인드로 싸게 제작하기로 한다. 가격도 가격이지만 그냥 해보고 싶어서였다.
ESP32 Cam은 ESP32 개발보드에 작은 카메라를 설치한 것으로 아두이노 기반으로 동작한다. 가격은 알리에서 대당 약 $7 정도였다. 동작 원리는 ESP32에 아두이노로 웹 서버를 올리고 웹 서버를 통해 JPG 스트림을 전송하는 방식이다 (OV2640).
아두이노는 처음해보는 것이기에 설정 방법을 간단히 작성해본다.
아두이노 IDE 설치
아두이노 IDE를 설치한다 (https://www.arduino.cc/en/software). 현재 (23년 1월) 최신 버전은 IDE 2 이다. 그리고 다음과 같이 ESP32 패키지를 추가한다.
File->Preferences->Additional Boards Manager
# Add the following URL
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
ESP32는 드라이버 호환성 문제가 있을 수 있어, 예전 버전인 IDE 1을 설치하라는 가이드도 있다. 하지만 호환성 문제는 ESP 32 패키지와 관련 있기에 IDE는 최신으로 설치하고, 혹시 호환성 문제 발생 시 ESP 32 패키지의 버전을 낮추는 방향으로 해결한다.
ESP32-CAM 설치
ESP32 CAM은 다음과 같이 AI Thinker 보드로 설치한다.
Tools->Board->Esp32->AI Thinker ESP32-CAM
그리고 제어판->장치관리자에서 USB Serial 포트가 잡히는지 확인한다. 혹시 보드가 안 잡히면 보드 USB 연결을 뺐다가 다시 해본다. 그리고 COM 포트 넘버를 기억한다.
다시 IDE로 돌아와서 ESP32보드와 연결한다.
Tools->port 로 연결
연결 후 통신 내용은 Serial Monitor (IDE에서 오른쪽 위 버튼)에서 115200 baud로 설정 후 확인할 수 있다.
Camera Web Server 설치
ESP32 보드에 샘플 Camera Web Server를 설치한다.
File->Examples->ESP32->Camera->CameraWebServer 설치
그리고 샘플 파일에서 다음과 같이 ESP32 모델과 WIFI의 SSID를 설정한다. 참고로 WIFI는 2.4G만 지원한다.
# CameraWebServer.ino
# Enable only the following line
#define CAMERA_MODEL_AI_THINKER // Has PSRAM
# Set up SSID and password
const char* ssid = "my-ssid-here";
const char* password = "my-password-here";
Upload 버튼 (왼쪽 위 '->' 모양 버튼)을 눌러 컴파일하고 보드에 올린다.
이때 Serial Monitor로 보면 ESP32의 IP주소가 나온다. 아니면 라우터의 DHCPv4를 잘 살펴보면 ESP32 디바이스가 연결된 것이 보인다. IP를 확인했으면, 그 IP를 사용하여 웹 브라우저를 통해 디바이스에 연결하면 된다.
디바이스의 웹 인터페이스를 통해 JPG 스트리밍을 볼 수 있다.
Troubleshooting
ESP32 디바이스 2대 중 한 대는 아래와 같이 에러 발생하며 로딩이 안됐다.
e (324) psram: psram id read error: 0xffffffff
PSRAM칩셋이 고장난 것일 수도 있지만, ESP32와 드라이버간 버전 문제일 수도 있다. ESP32 espressif 설치할 때 1.x버전을 설치하고 다시 Camera Web Server를 컴파일 & 설치한다. 다행히 최신 1버전인 1.0.6에서 동작했다.
에러는 없어졌지만 다른 1대에 비해 스트리밍 속도가 느렸다. 칩셋이 망가진 것으로 보이지만 교환은 어려우니 (알리...) 아쉬운데로 이렇게 사용해야겠다. 아니면 ESP32에 블루투스가 있으니 블루투스 proxy로 설정할까...
Ref: https://randomnerdtutorials.com/installing-the-esp32-board-in-arduino-ide-windows-instructions/