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 컨버터를 이용해서 연결하는 방법
• 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을 설정하고 연결하는 방법이다.
보드 매니저 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초 대기
}
각 파일의 기능 설명
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. 웹 서버 접속
- ESP32-CAM 리셋
- 코드 업로드가 완료되면 ESP32-CAM을 리셋한다.
- IP 주소 확인
- Arduino IDE의 시리얼 모니터를 열고 보드의 IP 주소를 확인한다.
- 웹 브라우저 접속
- 웹 브라우저에서 시리얼 모니터에 표시된 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. 개발환경 준비와 프로그래밍
'Arduino > [2] Arduino Module' 카테고리의 다른 글
#28. OLED 0.96인치 128x64 SPI 6핀 A37 디스플레이 (0) | 2024.12.24 |
---|---|
#27. L293D 모터 드라이버 쉴드 (0) | 2024.08.12 |
[Arduino Module] #25. Wemos D1 R32 (1) | 2024.04.08 |
[Arduino Module] #24. 와이파이 모듈(NodeMcu/ESP8266) (0) | 2024.04.01 |
[Arduino Module] #23. 센서모듈(MPU6050) (0) | 2024.04.01 |