본문 바로가기

Arduino/[2] Arduino Module

[Arduino Module] #26. ESP32 CAM

728x90
반응형

1. ESP32-CAM소개

ESP32-CAM 모듈은 ESPressif Systems에서 개발한 ESP32 칩을 기반으로 한 카메라 모듈로, 매우 저렴한 가격에 강력한 기능을 제공한다. 이 모듈은 고성능 프로세서, Wi-Fi 및 블루투스 통신 기능, 카메라, SD 카드 슬롯 등을 통합하여 다양한 IoT 프로젝트에 활용할 수 있다. 기존 아두이노 모듈과 비슷한 가격으로 제공되며, 이를 통해 CCTV 녹화기, 동영상 스트리밍 장치, 원격 제어 자동차의 영상 송출 장치 등을 쉽게 개발할 수 있다.

주요 기능 및 구성 요소

ESP32-S 칩: 듀얼 코어 32비트 CPU를 탑재하여 고속 연산이 가능하다.

 OV2640 카메라 모듈: 2MP 해상도의 이미지를 촬영할 수 있다.

 Wi-Fi 및 블루투스: 무선 통신을 통해 데이터 전송 및 원격 제어가 가능하다.

 마이크로 SD 카드 슬롯: 이미지와 영상을 저장할 수 있다.

 내장 안테나 또는 외부 안테나 커넥터: 안정적인 무선 통신을 위한 안테나가 내장되어 있다.

2. ESP32-CAM 사양과 PIN맵

위와 같은 구조로 주요 사양은 다음과 같다. 

  • The smallest 802.11b/g/n Wi-Fi BT SoC module
  • Low power 32-bit CPU,can also serve the application processor
  • Up to 160MHz clock speed, summary computing power up to 600 DMIPS
  • Built-in 520 KB SRAM, external 4MPSRAM
  • Supports UART/SPI/I2C/PWM/ADC/DAC
  • Support OV2640 and OV7670 cameras, built-in flash lamp
  • Support image WiFI upload
  • Support TF card
  • Supports multiple sleep modes
  • Embedded Lwip and FreeRTOS
  • Supports STA/AP/STA+AP operation mode
  • Support Smart Config/AirKiss technology
  • Support for serial port local and remote firmware upgrades (FOTA)

 

 

핀별 기능의 배치는 다음과 같다.

VCC Power Supply (5V) 5V power input
GND Ground Ground connection
U0R UART RX UART receive pin
U0T UART TX UART transmit pin
GPIO0 Flash Mode Used to put ESP32 in flash mode
GPIO1 RXD0 (U0RXD) UART0 RXD
GPIO2 Camera D9 Connected to camera D9
GPIO3 TXD0 (U0TXD) UART0 TXD
GPIO4 Camera D8 Connected to camera D8
GPIO12 Camera D7 / HSPI MISO Connected to camera D7 or HSPI MISO
GPIO13 Camera D6 / HSPI MOSI Connected to camera D6 or HSPI MOSI
GPIO14 Camera D5 / HSPI CLK Connected to camera D5 or HSPI CLK
GPIO15 Camera D4 / HSPI CS Connected to camera D4 or HSPI CS
GPIO16 Camera D3 / ADC1_2 Connected to camera D3 or ADC1_2
GPIO17 Camera D2 / ADC1_0 Connected to camera D2 or ADC1_0
GPIO18 Camera D1 Connected to camera D1
GPIO19 Camera D0 Connected to camera D0
GPIO21 Camera PCLK Connected to camera PCLK
GPIO22 Camera VSYNC Connected to camera VSYNC
GPIO23 Camera HREF Connected to camera HREF
GPIO25 DAC2 / ADC2_8 Digital-to-Analog Converter 2 or ADC2_8
GPIO26 DAC1 / ADC2_9 Digital-to-Analog Converter 1 or ADC2_9
GPIO27 ADC2_7 Analog-to-Digital Converter 2_7
GPIO32 XCLK Connected to camera XCLK
GPIO33 LED Flash LED Flash control
GPIO34 ADC1_6 Analog-to-Digital Converter 1_6
GPIO35 ADC1_7 Analog-to-Digital Converter 1_7
GPIO36 ADC1_0 Analog-to-Digital Converter 1_0
GPIO39 ADC1_3 Analog-to-Digital Converter 1_3

• GPIO 1번과 3번은 Serial 통신을 위해 사용한다.

 GPIO 0번은 프로그램을 업로드할 때와 작동되는 상태를 구분하여 제어하기 위해 사용한다.

 다음 핀들은 내부적으로 SD카드리더기에 연결되어 있으므로 카드리더기를 사용할 때에는 다른 용도로 사용하지 않는다.  

  GPIO 2, GPIO 4, GPIO12 ~ GPIO15 

3. ESP32-CAM 연결

ESP32-CAM모듈에는 다양한 기능들이 구현되어 있는데 한 가지 불편한 점은 USB연결 포트가 별도로 없고 시리얼통신기능으로 프로그램을 업로드해 주어야 한다는 것이다. 이를 위해 통상 FTDI프로그래머라고 부르는 USB to Serial 컨버터를 중간에 연결하여 작업하는 방법과 USB연결이 되는 아두이노를 통해 연결하는 방법이 있다.

 

하지만 ESP32-CAM 업로드 보드를 사용하면 FTDI 어댑터 없이 쉽게 ESP32-CAM에 펌웨어를 업로드할 수 있다. 업로드 보드를 사용하여 ESP32-CAM을 설정하고 연결하는 방법은 3번을 확인한다.

[1] FTDI 컨버터를 이용해서 연결하는 방법

  

FTDI 컨버터를 이용

• ESP32-CAM모듈의 GPIO 0번과 GND를 연결해 준다.

프로그램 업로드를 끝내고 작동모드로 실행시킬 때에는 연결을 해제한다.

 ESP32-CAM GND -> FTDI GND

 ESP32-CAM UnR(RX) -> FTDI TX

 ESP32-CAM UoT(TX) -> FTDI RX

 ESP32-CAM UnR(5V) -> FTDI 5V

 

여기에서 주의해야 할 점은 양측 5V단자끼리 또는 양측 3.3V끼리 같은 Volt를 사용해야 한다는 것과 사용하는 FTDI 컨버터 모듈에 따라 별도의 드라이버를 설치해 주어야 하는 경우도 있다는 것이다.

[2]  아두이노를 이용해서 연결하는 방법

아두이노 이용

 ESP32-CAM모듈의 GPIO 0번과 GND를 연결해 준다.

 프로그램 업로드를 끝내고 작동모드로 실행시킬 때에는 연결 해제한다.

 ESP32-CAM GND -> 아두이노I GND

 ESP32-CAM UnR(RX) -> 아두이노 RX

 ESP32-CAM UoT(TX) -> 아두이노 TX

 ESP32-CAM UnR(5V) -> 아두이노 5V

 아두이노 측의 RESET핀과 GND핀을 연결해 준다.

[3] ESP32-CAM 업로드 보드를 사용

ESP32-CAM 업로드 보드를 사용하면 FTDI 어댑터 없이 쉽게 ESP32-CAM에 펌웨어를 업로드할 수 있다. 다음은 업로드 보드를 사용하여 ESP32-CAM을 설정하고 연결하는 방법이다.

ESP32-CAM 업로드 보드

 

 

보드 매니저 URL 추가

• Arduino IDE를 열고 "파일" -> "환경 설정"을 클릭한다. 추가 보드 매니저 URLs 필드에 다음 URL을 추가한다:

https://dl.espressif.com/dl/package_esp32_index.json

보드 및 포트 선택

 "도구" -> "보드" 메뉴에서 "AI Thinker ESP32-CAM"을 선택한다.

 "도구" -> "포트" 메뉴에서 업로드 보드가 연결된 포트를 선택한다.

예제 코드 열기

 "파일" -> "예제" -> "ESP32" -> "Camera" -> "CameraWebServer" 예제를 연다.

• 아래 접은 글의 코드 블록을 확인한다.

더보기
#include "esp_camera.h" // ESP32 카메라 라이브러리 포함
#include <WiFi.h> // WiFi 기능을 위한 라이브러리 포함

// 경고: UXGA 해상도와 고품질 JPEG를 위해 PSRAM IC가 필요합니다
// ESP32 Wrover 모듈 또는 PSRAM이 있는 다른 보드를 선택해야 합니다
// 이미지가 버퍼 크기를 초과하면 부분 이미지가 전송됩니다

// 카메라 모델 선택
//#define CAMERA_MODEL_WROVER_KIT // PSRAM이 있는 모델
//#define CAMERA_MODEL_ESP_EYE // PSRAM이 있는 모델
//#define CAMERA_MODEL_M5STACK_PSRAM // PSRAM이 있는 모델
//#define CAMERA_MODEL_M5STACK_V2_PSRAM // M5Camera 버전 B, PSRAM이 있음
//#define CAMERA_MODEL_M5STACK_WIDE // PSRAM이 있는 모델
//#define CAMERA_MODEL_M5STACK_ESP32CAM // PSRAM이 없는 모델
#define CAMERA_MODEL_AI_THINKER // PSRAM이 있는 모델
//#define CAMERA_MODEL_TTGO_T_JOURNAL // PSRAM이 없는 모델

#include "camera_pins.h" // 카메라 핀 정의 포함

const char* ssid = "oldcast1e"; // WiFi SSID 설정
const char* password = "dlgjstjd"; // WiFi 비밀번호 설정

void startCameraServer(); // 카메라 서버 시작 함수 선언

void setup() {
  Serial.begin(115200); // 시리얼 통신 시작 및 속도 설정
  Serial.setDebugOutput(true); // 디버그 출력 설정
  Serial.println(); // 빈 줄 출력

  camera_config_t config; // 카메라 설정 구조체 선언
  config.ledc_channel = LEDC_CHANNEL_0; // LED 컨트롤 채널 설정
  config.ledc_timer = LEDC_TIMER_0; // LED 타이머 설정
  config.pin_d0 = Y2_GPIO_NUM; // 데이터 핀 설정
  config.pin_d1 = Y3_GPIO_NUM;
  config.pin_d2 = Y4_GPIO_NUM;
  config.pin_d3 = Y5_GPIO_NUM;
  config.pin_d4 = Y6_GPIO_NUM;
  config.pin_d5 = Y7_GPIO_NUM;
  config.pin_d6 = Y8_GPIO_NUM;
  config.pin_d7 = Y9_GPIO_NUM;
  config.pin_xclk = XCLK_GPIO_NUM; // XCLK 핀 설정
  config.pin_pclk = PCLK_GPIO_NUM; // PCLK 핀 설정
  config.pin_vsync = VSYNC_GPIO_NUM; // VSYNC 핀 설정
  config.pin_href = HREF_GPIO_NUM; // HREF 핀 설정
  config.pin_sscb_sda = SIOD_GPIO_NUM; // SSCB SDA 핀 설정
  config.pin_sscb_scl = SIOC_GPIO_NUM; // SSCB SCL 핀 설정
  config.pin_pwdn = PWDN_GPIO_NUM; // PWDN 핀 설정
  config.pin_reset = RESET_GPIO_NUM; // 리셋 핀 설정
  config.xclk_freq_hz = 20000000; // XCLK 주파수 설정
  config.pixel_format = PIXFORMAT_JPEG; // 픽셀 형식 설정 (JPEG)
  
  // PSRAM이 있으면 UXGA 해상도와 높은 JPEG 품질로 초기화
  // 더 큰 프레임 버퍼를 미리 할당
  if(psramFound()){
    config.frame_size = FRAMESIZE_UXGA; // 해상도 설정
    config.jpeg_quality = 10; // JPEG 품질 설정 (낮을수록 품질 좋음)
    config.fb_count = 2; // 프레임 버퍼 수 설정
  } else {
    config.frame_size = FRAMESIZE_SVGA; // PSRAM이 없으면 해상도 낮춤
    config.jpeg_quality = 12; // JPEG 품질 설정 (낮을수록 품질 좋음)
    config.fb_count = 1; // 프레임 버퍼 수 설정
  }

#if defined(CAMERA_MODEL_ESP_EYE)
  pinMode(13, INPUT_PULLUP); // 특정 카메라 모델의 핀 설정
  pinMode(14, INPUT_PULLUP);
#endif

  // 카메라 초기화
  esp_err_t err = esp_camera_init(&config); // 카메라 초기화 함수 호출
  if (err != ESP_OK) { // 초기화 실패 시
    Serial.printf("Camera init failed with error 0x%x", err); // 오류 메시지 출력
    return; // 함수 종료
  }

  sensor_t * s = esp_camera_sensor_get(); // 카메라 센서 정보 가져오기
  // 초기 센서는 수직으로 뒤집혀 있고 색상이 약간 과포화됨
  if (s->id.PID == OV3660_PID) { // 특정 센서 ID 확인
    s->set_vflip(s, 1); // 수직으로 뒤집기 설정
    s->set_brightness(s, 1); // 밝기 약간 올리기
    s->set_saturation(s, -2); // 채도 낮추기
  }
  // 초기 프레임 속도를 높이기 위해 해상도 낮춤
  s->set_framesize(s, FRAMESIZE_QVGA);

#if defined(CAMERA_MODEL_M5STACK_WIDE) || defined(CAMERA_MODEL_M5STACK_ESP32CAM)
  s->set_vflip(s, 1); // 특정 카메라 모델의 수직 플립 설정
  s->set_hmirror(s, 1); // 수평 미러링 설정
#endif

  WiFi.begin(ssid, password); // WiFi 연결 시작

  while (WiFi.status() != WL_CONNECTED) { // WiFi 연결 대기
    delay(500); // 500ms 대기
    Serial.print("."); // 진행 표시 출력
  }
  Serial.println("");
  Serial.println("WiFi connected"); // WiFi 연결 완료 메시지 출력

  startCameraServer(); // 카메라 서버 시작

  Serial.print("Camera Ready! Use 'http://"); 
  Serial.print(WiFi.localIP()); // 로컬 IP 주소 출력
  Serial.println("' to connect"); // 연결 주소 출력
}

void loop() {
  // 메인 코드 반복 실행
  delay(10000); // 10초 대기
}

app_httpd.cpp
0.04MB
camera_index.h
0.14MB
camera_pins.h
0.01MB
CameraWebServer.ino
0.00MB
partitions.csv
0.00MB

각 파일의 기능 설명

더보기

1. CameraWebServer.ino

기본 설정 및 초기화

 Wi-Fi 연결 설정.

 NTP 시간 동기화 설정.

 LittleFS 파일 시스템 초기화.

 웹 서버 초기화 및 시작.

 

핸들러 등록

 루트 경로 (/)에 대한 리디렉션 핸들러 등록.

 파일 목록 반환 API (/api/list) 핸들러 등록.

 시스템 정보 반환 API (/api/sysinfo) 핸들러 등록.

 정적 파일 제공 및 파일 업로드/삭제 핸들러 등록.

 기본 404 응답 핸들러 등록.

 

주요 함수

 handleRedirect(): 루트 경로 접근 시 index.html 또는 업로드 페이지로 리디렉션.

 handleListFiles(): 파일 시스템에 존재하는 모든 파일을 JSON 형식으로 반환.

 handleSysInfo(): 시스템 정보를 JSON 형식으로 반환.

 

2. app_httpd.cpp

HTTP 서버 구현

 HTTP 서버 초기화 및 설정.

 클라이언트 요청 처리 로직 구현.

 웹 소켓 지원.

 카메라 스트림을 위한 MJPEG 스트림 핸들러 구현.

 

핸들러 함수

 카메라 스트림 핸들러: 실시간 비디오 스트림 제공.

 JPEG 스냅샷 핸들러: 정적 이미지 제공.

 설정 및 제어 핸들러: 카메라 설정 변경 및 제어.

 

3. camera_index.h

HTML 콘텐츠

 웹 서버에서 제공할 기본 HTML 페이지 내용 정의.

 주로 카메라 스트리밍 인터페이스를 제공하는 HTML 코드 포함.

 

4. camera_pins.h

핀 설정

 ESP32-CAM 모듈의 핀맵 정의.

 카메라 모듈과 관련된 GPIO 핀 설정.

 

5. partitions.csv

파티션 테이블

 ESP32 플래시 메모리의 파티션 구조 정의.

 각 파티션의 시작 주소, 크기, 유형 및 이름 설정. 예: 앱 파티션, SPIFFS 또는 LittleFS 파티션 등.

 

요약

이 프로젝트는 ESP32-CAM을 웹 서버로 설정하여 실시간 비디오 스트림을 제공하고, 파일 업로드/삭제 및 시스템 정보 API를 제공하는 기능을 구현한다. CameraWebServer.ino 파일은 주요 설정과 초기화를 담당하며, app_httpd.cpp는 HTTP 서버와 관련된 주요 기능을, camera_index.h는 웹 서버에서 제공할 HTML 콘텐츠를, camera_pins.h는 핀 설정을, partitions.csv는 플래시 메모리의 파티션 구조를 정의한다.

카메라 모델 설정

예제코드 확보 : 아두이노 IDE > 파일 > 예제 > ESP32 > Camera > CameraWebServer

보드 설정 : 아두이노 IDE > 툴 > 보드 > ESP32 Arduino > AI Thinker ESP32-CAM

포트 설정 : 사용할 포드로 지정

예제코드에서 아래 부분의 주석을 반드시 풀어야 한다.
또한 "AI Thinker ESP32-CAM" 이외의 보드를 선택하면 컴파일이 불가능하다.
#define CAMERA_MODEL_AI_THINKER // Has PSRAM

 

 예제 코드에서 다음 부분을 찾아 수정한다:

// Select camera model
//#define CAMERA_MODEL_WROVER_KIT
//#define CAMERA_MODEL_ESP_EYE
//#define CAMERA_MODEL_M5STACK_PSRAM
//#define CAMERA_MODEL_M5STACK_WIDE
//#define CAMERA_MODEL_AI_THINKER

#define CAMERA_MODEL_AI_THINKER

코드 업로드

 "업로드" 버튼을 클릭하여 코드를 ESP32-CAM에 업로드한다.

 업로드가 시작되면 ESP32-CAM 모듈의 리셋 버튼을 눌러 업로드를 완료한다.

5. 웹 서버 접속

  1. ESP32-CAM 리셋
  2. 코드 업로드가 완료되면 ESP32-CAM을 리셋한다.
  3. IP 주소 확인
  4. Arduino IDE의 시리얼 모니터를 열고 보드의 IP 주소를 확인한다.
  5. 웹 브라우저 접속
  6. 웹 브라우저에서 시리얼 모니터에 표시된 IP 주소를 입력하여 ESP32-CAM의 실시간 영상을 확인한다.

ESP32 카메라의 이미지를 180도 회전시키기 위해서는 수직 및 수평 반전을 모두 적용해야 한다. 이 작업은 sensor_t 구조체를 통해 카메라 설정에서 수행할 수 있다.

영상을 180도 회전하기 위한 코드는 아래를 확인한다.

더보기
#include "esp_camera.h"
#include <WiFi.h>

// 경고: UXGA 해상도와 고품질 JPEG를 위해 PSRAM IC가 필요합니다
// ESP32 Wrover 모듈 또는 PSRAM이 있는 다른 보드를 선택해야 합니다
// 이미지가 버퍼 크기를 초과하면 부분 이미지가 전송됩니다

// 카메라 모델 선택
//#define CAMERA_MODEL_WROVER_KIT // PSRAM이 있는 모델
//#define CAMERA_MODEL_ESP_EYE // PSRAM이 있는 모델
//#define CAMERA_MODEL_M5STACK_PSRAM // PSRAM이 있는 모델
//#define CAMERA_MODEL_M5STACK_V2_PSRAM // M5Camera 버전 B, PSRAM이 있음
//#define CAMERA_MODEL_M5STACK_WIDE // PSRAM이 있는 모델
//#define CAMERA_MODEL_M5STACK_ESP32CAM // PSRAM이 없는 모델
#define CAMERA_MODEL_AI_THINKER // PSRAM이 있는 모델
//#define CAMERA_MODEL_TTGO_T_JOURNAL // PSRAM이 없는 모델

#include "camera_pins.h" // 카메라 핀 정의 포함

const char* ssid = "oldcast1e"; // WiFi SSID 설정
const char* password = "dlgjstjd"; // WiFi 비밀번호 설정

void startCameraServer(); // 카메라 서버 시작 함수 선언

void setup() {
  Serial.begin(115200); // 시리얼 통신 시작 및 속도 설정
  Serial.setDebugOutput(true); // 디버그 출력 설정
  Serial.println(); // 빈 줄 출력

  camera_config_t config; // 카메라 설정 구조체 선언
  config.ledc_channel = LEDC_CHANNEL_0; // LED 컨트롤 채널 설정
  config.ledc_timer = LEDC_TIMER_0; // LED 타이머 설정
  config.pin_d0 = Y2_GPIO_NUM; // 데이터 핀 설정
  config.pin_d1 = Y3_GPIO_NUM;
  config.pin_d2 = Y4_GPIO_NUM;
  config.pin_d3 = Y5_GPIO_NUM;
  config.pin_d4 = Y6_GPIO_NUM;
  config.pin_d5 = Y7_GPIO_NUM;
  config.pin_d6 = Y8_GPIO_NUM;
  config.pin_d7 = Y9_GPIO_NUM;
  config.pin_xclk = XCLK_GPIO_NUM; // XCLK 핀 설정
  config.pin_pclk = PCLK_GPIO_NUM; // PCLK 핀 설정
  config.pin_vsync = VSYNC_GPIO_NUM; // VSYNC 핀 설정
  config.pin_href = HREF_GPIO_NUM; // HREF 핀 설정
  config.pin_sscb_sda = SIOD_GPIO_NUM; // SSCB SDA 핀 설정
  config.pin_sscb_scl = SIOC_GPIO_NUM; // SSCB SCL 핀 설정
  config.pin_pwdn = PWDN_GPIO_NUM; // PWDN 핀 설정
  config.pin_reset = RESET_GPIO_NUM; // 리셋 핀 설정
  config.xclk_freq_hz = 20000000; // XCLK 주파수 설정
  config.pixel_format = PIXFORMAT_JPEG; // 픽셀 형식 설정 (JPEG)
  
  // PSRAM이 있으면 UXGA 해상도와 높은 JPEG 품질로 초기화
  // 더 큰 프레임 버퍼를 미리 할당
  if(psramFound()){
    config.frame_size = FRAMESIZE_UXGA; // 해상도 설정
    config.jpeg_quality = 10; // JPEG 품질 설정 (낮을수록 품질 좋음)
    config.fb_count = 2; // 프레임 버퍼 수 설정
  } else {
    config.frame_size = FRAMESIZE_SVGA; // PSRAM이 없으면 해상도 낮춤
    config.jpeg_quality = 12; // JPEG 품질 설정 (낮을수록 품질 좋음)
    config.fb_count = 1; // 프레임 버퍼 수 설정
  }

#if defined(CAMERA_MODEL_ESP_EYE)
  pinMode(13, INPUT_PULLUP); // 특정 카메라 모델의 핀 설정
  pinMode(14, INPUT_PULLUP);
#endif

  // 카메라 초기화
  esp_err_t err = esp_camera_init(&config); // 카메라 초기화 함수 호출
  if (err != ESP_OK) { // 초기화 실패 시
    Serial.printf("Camera init failed with error 0x%x", err); // 오류 메시지 출력
    return; // 함수 종료
  }

  sensor_t * s = esp_camera_sensor_get(); // 카메라 센서 정보 가져오기
  // 초기 센서는 수직으로 뒤집혀 있고 색상이 약간 과포화됨
  if (s->id.PID == OV3660_PID) { // 특정 센서 ID 확인
    s->set_vflip(s, 1); // 수직으로 뒤집기 설정
    s->set_brightness(s, 1); // 밝기 약간 올리기
    s->set_saturation(s, -2); // 채도 낮추기
  }
  // 이미지 180도 회전 설정
  s->set_vflip(s, 1); // 수직 플립 설정
  s->set_hmirror(s, 1); // 수평 미러링 설정

#if defined(CAMERA_MODEL_M5STACK_WIDE) || defined(CAMERA_MODEL_M5STACK_ESP32CAM)
  s->set_vflip(s, 1); // 특정 카메라 모델의 수직 플립 설정
  s->set_hmirror(s, 1); // 수평 미러링 설정
#endif

  WiFi.begin(ssid, password); // WiFi 연결 시작

  while (WiFi.status() != WL_CONNECTED) { // WiFi 연결 대기
    delay(500); // 500ms 대기
    Serial.print("."); // 진행 표시 출력
  }
  Serial.println("");
  Serial.println("WiFi connected"); // WiFi 연결 완료 메시지 출력

  startCameraServer(); // 카메라 서버 시작

  Serial.print("Camera Ready! Use 'http://"); 
  Serial.print(WiFi.localIP()); // 로컬 IP 주소 출력
  Serial.println("' to connect"); // 연결 주소 출력
}

void loop() {
  // 메인 코드 반복 실행
  delay(10000); // 10초 대기
}

OV2640 카메라 해상도별 화질

카메라가 움직일 경우 딜레이와 잔상 현상이 있으며 해상도를 CIF 이상으로 설정할 경우 와이파이를 통한 초당 전송 프레임이 급격히 감소한다.

  해상도
UXGA(1600x1200) 약 8 fps 
SXGA(1280x1024) 약 15 fps 
XGA(1024x768)  약 19 fps 
SVGA(800x600) 약 25 fps 
VGA(640x480) 약 37 fps 
CIF(400x296) 약 47 fps 
QVGA(320x240) 약 50 fps 
HQVGA(240x176) 약 50 fps 
QQVGA(160x120) 약 52 fps

ESP32 CAM 설정 창 기능 설명

XCLK MHz 카메라의 외부 클럭 주파수 설정
Resolution 이미지 해상도 선택
Quality JPEG 이미지 품질 설정
Brightness 이미지 밝기 조정
Contrast 이미지 대비 조정
Saturation 이미지 채도 조정
Special Effect 이미지에 적용할 특별한 효과 선택
AWB 자동 화이트 밸런스 설정
AWB Gain 자동 화이트 밸런스 시 이득 조정
WB Mode 화이트 밸런스 모드 선택
AEC SENSOR 자동 노출 제어 설정
AEC DSP DSP에서의 자동 노출 제어 설정
AE Level 자동 노출 레벨 조정
AGC 자동 게인 제어 설정
Gain Ceiling 게인 상한 설정
BPC 불량 픽셀 보정 설정
WPC 백색 픽셀 보정 설정
Raw GMA 원시 감마 보정 설정
Lens Correction 렌즈 왜곡 보정 설정
H-Mirror 이미지 수평 반전
V-Flip 이미지 수직 반전
DCW 해상도 줄이는 기능 설정
Color Bar 테스트용 컬러 바 표시
LED Intensity LED 밝기 조절
Face Detection 얼굴 인식 설정
Face Recognition 얼굴 인식 설정

 

4. 개발환경 준비와 프로그래밍

728x90
반응형
댓글