본문 바로가기

ESP32 CAM

ESP32-CAM 프로그래밍 시작 가이드

반응형

ESP32-CAM 프로그래밍 시작 가이드

 

지금은 시작가이드 문서지만 나중엔 마스터 교재가 된다.

 

이 글에서는 ESP32-CAM 모듈 프로그래밍에 대해 알아보겠습니다. ESP32 카메라 모듈은 비교적 저렴하고 간단한 감시 또는 모니터링 시스템을 구축하는 데 매우 유용합니다. 예를 들어, 밤에 정원의 동물을 자동으로 촬영하거나 웹캠을 통해 현관에 방문객이 왔을 때 알리는 것 등이 일반적인 활용 사례입니다.

 

하지만 실제로 일반적인 ESP32-CAM 개발 보드에 프로그램을 업로드하고 실행하는 것은 다소 까다롭습니다. 이 글에서는 ESP32-CAM 보드를 프로그래밍하고 문제를 해결하는 다양한 방법을 살펴보겠습니다.

 

 

 

목차는 아래와 같습니다.

 

개요

필수 부품

ESP32-CAM과 USB-TTL 쉴드

FTDI USB-TTL 어댑터

4GB 마이크로SD 카드

SD 카드 리더기

USB 데이터 케이블

아두이노 IDE

ESP32-CAM 개발 보드의 기본 사항

특징

명세서

전력 소비량

핀아웃

회로도

ESP32 코어 설치

추가 보드 관리자 URL

보드 매니저

보드 선택

프로그래밍 쉴드를 사용하여 코드를 업로드하세요.

프로그래밍 쉴드

프로그래밍 쉴드를 컴퓨터에 연결하기

프로그래밍 모드

실행 모드

ESP32-CAM 프로그래밍 쉴드용 테스트 코드

FTDI 프로그래머를 사용하여 코드를 업로드하세요.

FTDI 프로그래머와 ESP32-CAM 연결하기

ESP32-CAM 보드 선택

ESP32-CAM이 COM 포트에서 인식되지 않습니다.

프로그래밍 모드

실행 모드

FTDI 프로그래머를 사용한 ESP32-CAM 테스트 코드

SD 카드 테스트

라이브러리 및 초기화

설정 기능

반복문

시리얼 모니터 출력

기타 테스트

카메라 테스트 중

상수 및 라이브러리

카메라 설정

카운터 증가 함수

사진 건너뛰기

이미지 캡처 및 저장

설정 기능

반복문

카메라 웹 서버 예제

요약

링크

자주 묻는 질문

 

질문: ESP32-CAM이 Wi-Fi에 연결되지 않는 이유는 무엇입니까?

질문: 카메라 화질을 어떻게 개선할 수 있나요?

질문: GPIO를 더 추가하려면 어떻게 해야 하나요?

질문: ESP32-CAM이 선명한 이미지를 촬영하지 못하는 이유는 무엇입니까?

질문: ESP32-CAM이 시리얼 모니터의 명령에 응답하지 않으면 어떻게 해야 하나요?

질문: SD 카드가 인식되지 않는 이유는 무엇인가요?

질문: 제 ESP32-CAM이 뜨거워지는데, 정상인가요?

질문: ESP32-CAM의 전력 소모를 줄이려면 어떻게 해야 하나요?

질문: ESP32-CAM으로 촬영한 이미지가 재부팅 후 푸른색을 띠는 이유는 무엇입니까?

질문: ESP32-CAM이 이미지를 캡처하지 못하는 이유는 무엇입니까?

질문: ESP32-CAM에서 비디오를 스트리밍하려면 어떻게 해야 하나요?

질문: ESP32-CAM이 아두이노 IDE에서 인식되지 않는 이유는 무엇입니까?

질문: ESP32-CAM에 코드를 업로드하는 동안 "패킷 헤더를 기다리는 중 시간 초과" 오류가 계속 표시되는 이유는 무엇입니까?

질문: ESP32-CAM이 코드 업로드 중에 멈추면 어떻게 해야 하나요?

질문: ESP32-CAM에 무선으로 코드를 업로드할 수 있나요?

질문: ESP32-CAM이 코드 업로드를 위한 부트로더 모드로 진입하지 않는 이유는 무엇입니까?

Q: 코드 업로드 시 발생하는 "치명적인 오류가 발생했습니다: ESP32 연결 실패: 패킷 헤더 대기 시간 초과" 오류를 어떻게 해결할 수 있나요?

질문: ESP32-CAM에 코드를 업로드할 때 "esptool.FatalError: Timed out waiting for packet header" 오류가 발생하면 어떻게 해야 하나요?

질문: "정전 감지기가 작동했습니다"라는 오류 메시지가 표시되면 어떻게 해야 하나요?

 

필수 부품

 

아래에 프로젝트 제작에 필요한 부품 목록이 있습니다. USB 케이블, 마이크로 SD 카드, SD 카드 리더기 등 일부 부품은 이미 가지고 계실 수도 있습니다. 그런 경우에는 따로 구매하실 필요가 없습니다. 이 프로젝트에 특별히 필요한 부품은 없습니다.

 

FTDI USB-TTL 어댑터가 없다면 꼭 하나 장만하세요. ESP32 마이크로컨트롤러를 계속 다루다 보면 언젠가는 필요하게 될 겁니다. 여기 소개된 제품은 간단한 모델이지만 대부분의 경우에 충분할 겁니다.

 

ESP32-CAM과 USB-TTL 쉴드

FTDI USB-TTL 어댑터

4GB 마이크로SD 카드

SD 카드 리더기

USB 데이터 케이블

아두이노 IDE 2.x

 

ESP32-CAM 개발 보드의 기본 사항

 

ESP32-CAM 개발 보드는 ESP32-S 칩, 카메라, 내장 플래시 및 microSD 카드 슬롯을 결합한 소형 모듈입니다. 이 보드는 Wi-Fi와 블루투스가 내장되어 있으며 최대 200만 화소 해상도의 OV2640 또는 OV7670 카메라를 지원합니다.

 

 

ESP32-CAM 뒷면

 

ESP32-CAM 전면

 

 

보드의 상세 사양은 아래에서 확인할 수 있습니다. 예제 코드에서는 오리지널 AI-Thinker 모델의 ESP32-CAM 보드를 사용하지만, 동일하거나 유사한 사양의 복제품들이 많이 있다는 점에 유의하십시오.

 

일반적으로 프로그래밍 및 사용 방법은 동일합니다. 하지만 한 가지 예외가 있습니다. 보드의 핀 배열이 6줄(4줄이 아닌)인 경우 프로그래밍 쉴드를 사용하면 더 쉽게 프로그래밍할 수 있습니다. 아래 그림에서 비교해 보세요.

 

ESP32-CAM 보드의 6핀 버전과 4핀 버전 비교 ( 출처 )

 

또한 GND 핀(빨간색 화살표로 표시됨)에도 차이가 있습니다. 버전 1(왼쪽)에서는 이 핀에 GND/R이라고 표시되어 있으며 보드를 리셋하는 데 사용됩니다. 버전 2(오른쪽)에서는 이 핀이 접지(GN D) 역할을 합니다 .

 

오른쪽에 있는 4핀 버전 2는 코드 업로드 시 BOOT와 RST 버튼을 수동으로 눌러야 합니다(자세한 내용은 나중에 설명). 반면 버전 1은 이 과정을 자동으로 처리합니다. 하지만 버전 2가 상당히 흔하기 때문에 프로그래밍 쉴드를 사용하는 것보다 FTDI 프로그래머를 사용하는 것이 더 편리합니다.

 

특징

 

초소형 802.11b/g/n Wi-Fi + BT/BLE SoC 모듈.

저전력 듀얼 코어 32비트 CPU (애플리케이션 프로세서용).

최대 주파수 240MHz, 최대 연산 능력 600 DMIPS.

내장형 520KB SRAM, 외장형 4MB PSRAM.

UART/SPI/I2C/PWM/ADC/DAC 등의 인터페이스를 지원합니다.

OV2640 및 OV7670 카메라를 지원하며, 내장 플래시가 있습니다.

이미지 와이파이 업로드 지원, TF 카드 지원.

다양한 절전 모드 지원

STA/AP/STA+AP 작동 모드를 지원합니다.

 

사양

 

크기: 27*40.5*4.5(±0.2)mm

SPI 플래시: 기본값 32Mbit

RAM: 내장 520KB + 외장 4MB PSRAM

BT: BT 4.2BR/EDR 및 BLE 표준

WiFi: 802.11 b/g/n/e/i

지원 인터페이스: UARI, SPI, I2C, PWM

TF 카드 지원: 4G (최대 16GB까지 일반적으로 작동)

입출력 포트: 9

이미지 출력 형식: JPEG(OV2640에서만 지원), BMP, 흑백

안테나 형태: 온보드 안테나, 이득 2dBi

보안: WPA/WPA2/WPAS-Enterprise/WPS

전원 공급 범위: 5V

작동 온도: -20°C ~ 85°C

 

전력 소비량

 

플래시 미사용 시: 180mA@5V

플래시를 최대 밝기로 사용할 경우: 310mA@5V

심층 수면: 6mA@5V

모뎀 절전 모드: 20mA@5V

얕은 수면: 6.7mA@5V

 

핀아웃

 

다음 그림은 ESP32-CAM의 핀 배치도를 보여줍니다. 이론적으로 ESP32-CAM은 3.3V에서도 작동할 수 있지만, 불안정한 동작과 워터마크가 나타나는 사진이 보고된 바 있습니다. 따라서 권장 전원 공급 장치는 5V @ 2A입니다.

 

또한 IO0은 카메라의 XCLK 핀에 연결되어 있으므로 ESP32를 실행할 때는 연결하지 않고 그대로 두어야 합니다. 코드를 업로드할 때만 IO0을 GND에 연결해야 합니다. 이에 대한 자세한 내용은 나중에 설명하겠습니다.

 

 

ESP32-CAM AI-Thinker 모듈의 핀 배치도 ( 출처 )

 

일반 ESP32 보드와 비교했을 때 ESP32-CAM 보드는 사용 가능한 GPIO 핀 수가 훨씬 적습니다. 이는 대부분의 GPIO 핀이 카메라와 SD 카드 리더기에 사용되기 때문입니다. 또한 GPIO1, GPIO3, GPIO0은 보드 프로그래밍에 필요하므로 사용하지 않는 것이 좋습니다. 자세한 내용은 "ESP32-CAM의 추가 GPIO 핀 활용 " 튜토리얼을 참조하십시오.

 

일부 보드에서는 P_OUT 핀이 VCC로 표시되어 있습니다. 이 핀은 전원 출력 핀으로, 솔더 패드 에 따라 3.3V 또는 5V를 출력합니다 . 이 핀으로는 보드에 전원을 공급할 수 없습니다! 보드에 전원을 공급하려면 5V 핀을 사용하십시오.

 

접지 핀 사용 시에도 주의해야 합니다. GPIO1 옆에 있는 GND 핀은 절대 사용하지 마세요! 일부 ESP32-CAM 보드에서는 이 핀이 GND/R로 표시되어 있으며 보드 리셋에 사용됩니다. 이 핀은 접지로 사용할 수 없습니다. 안전을 위해 항상 GPIO0 근처의 GND 핀을 사용하는 것이 좋습니다.

 

마지막으로, GPIO 핀 2, 4, 12, 13, 14, 15는 SD 카드 리더기에 사용됩니다. SD 카드 리더기를 사용하지 않으면 이 핀들을 다른 GPIO 핀으로 사용할 수 있습니다. 내장 플래시 LED는 GPIO 4에 연결되어 있어 SD 카드 리더기를 사용할 때 플래시 LED가 켜집니다. 다음 코드를 사용하면 이를 방지할 수 있습니다.

 

SD_MMC.begin("/sdcard", true)

 

ESP32-CAM 보드의 핀 배치에 대한 자세한 정보는 RandomNerd의 다음 튜토리얼에서 확인할 수 있습니다: ESP32-CAM AI-Thinker 핀 배치 가이드: GPIO 사용법 설명

 

회로도

 

ESP32-CAM 보드의 내부 배선에 대한 자세한 이해가 필요하시면 다음 회로도를 참조하십시오. 그림을 클릭하면 고해상도 회로도가 포함된 PDF 파일을 열거나 다운로드할 수 있습니다 .

 

 

ESP32-CAM 회로도 ( 출처 )

 

ESP32 코어 설치

 

ESP32-CAM을 프로그래밍하려면 ESP32 보드 지원이 설치된 Arduino IDE가 필요합니다. 다행히 ESP32 코어 설치는 매우 간단합니다. Arduino IDE를 실행하고 아래 단계를 따라 진행하세요. 문제가 발생하면 "Arduino IDE로 ESP32 프로그래밍하는 방법" 튜토리얼에서 자세한 지침을 확인할 수 있습니다 .

 

보드 관리자 URL 추가

 

먼저 "파일" 메뉴에서 "환경설정..."을 선택하여 환경설정 대화 상자를 엽니다.

 

 

환경설정 대화 상자를 엽니다.

 

그러면 아래와 같은 환경설정 대화 상자가 열립니다. 설정 탭에서 대화 상자 하단에 " 추가 보드 관리자 URL "이라고 표시된 편집 상자를 찾을 수 있습니다.

 

이 입력란에 다음 URL을 복사하세요: “ https://espressif.github.io/arduino-esp32/package_esp32_dev_index.json“

 

 

이렇게 하면 아두이노 IDE가 ESP32 코어 라이브러리의 위치를 ​​알게 됩니다. 다음으로 보드 관리자를 사용하여 ESP32 코어 라이브러리를 실제로 설치하겠습니다.

 

보드 매니저

 

아래 그림과 같이 사이드바의 보드 아이콘을 클릭하여 보드 관리자를 엽니다.

 

 

사이드바의 보드 매니저 아이콘

 

사이드바 오른쪽에 보드 관리자가 나타납니다. 상단의 검색 필드에 "ESP32"를 입력하면 "Arduino ESP32 보드"와 " esp32 by Espressif" 두 종류의 ESP32 보드가 표시됩니다. 우리는 Espressif에서 제공하는 ESP32 라이브러리를 설치해야 합니다. 설치 버튼을 클릭하고 다운로드 및 설치가 완료될 때까지 기다리세요.

 

ESP32 코어 라이브러리를 설치합니다.

 

설치가 완료되면 보드 관리자는 다음과 같이 표시됩니다. 단, 실제 버전(여기서는 3.0.0-a)은 다를 수 있습니다.

 

ESP32 코어가 설치되었습니다.

 

다음 단계에서는 프로그래밍할 ESP32 보드를 선택하는 방법을 보여드리겠습니다.

 

보드 선택

 

보드를 선택하려면 도구 메뉴로 이동하세요. 보드: "Arduino Uno"를 클릭합니다. 아래 그림과 다른 보드가 표시될 수도 있습니다. 괜찮습니다. 하위 메뉴로 이동하면 "Arduino AVR 보드" 아래에 "esp32"가 보일 것입니다(보시다시피 저는 esp8266 보드도 설치했습니다). "esp32"를 클릭하면 사용 가능한 보드 목록이 크게 표시됩니다.

 

 

Boards Manager에서 AI Thinker ESP32-CAM 보드를 확인하세요.

 

목록에서 AI Thinker ESP32-CAM 보드를 찾아 클릭하세요.

 

이제 ESP32-CAM 보드에 코드를 업로드하고 실행할 준비가 되었습니다. 두 가지 방법을 보여드리겠습니다. ESP32-CAM 모듈과 함께 판매되는 프로그래밍 쉴드를 사용하거나, 별도의 범용 FTDI 프로그래머를 사용할 수 있습니다. 먼저 프로그래밍 쉴드를 사용하는 방법부터 설명하겠습니다.

 

프로그래밍 쉴드를 사용하여 코드를 업로드

 

ESP32 칩을 직접 프로그래밍하려면 시리얼 UART 인터페이스를 사용해야 합니다. 이 인터페이스는 핀 배치도에서 볼 수 있는 U0TXD 및 UORXD 핀을 통해 사용할 수 있습니다. 하지만 우리는 컴퓨터의 USB 포트(및 Arduino IDE)를 사용하여 ESP32를 프로그래밍하려고 합니다. 이를 위해서는 USB-UART 변환기가 필요합니다.

 

프로그래밍 쉴드

 

ESP32를 사용하는 많은 개발 보드에는 USB를 UART로 변환하는 통합 칩( CH340 )이 있지만, ESP32-CAM 모듈에는 아쉽게도 이 칩이 없습니다. 따라서 아래 그림과 같은 프로그래밍 쉴드 또는 나중에 설명할 FTDI 프로그래머가 필요합니다.

* 무엇이든 직접적인 것이 좋습니다. USB to Serial Chip CH340 Data Sheet pdf 파일입니다.

 

35227cpdata.pdf
0.24MB

 

 

 

ESP32-CAM 프로그래밍 쉴드

 

아래 그림과 같이 ESP32-CAM 모듈을 프로그래밍 쉴드 위에 올려놓고, 프로그래밍 쉴드와 컴퓨터를 USB 케이블로 연결하면 바로 프로그래밍을 시작할 수 있습니다.

 

 

ESP32-CAM 모듈에 연결된 프로그래밍 쉴드

 

프로그래밍 쉴드를 컴퓨터에 연결하기

 

먼저 USB 케이블이 제대로 연결되어 작동하는지 확인하십시오. USB 케이블을 연결하면 컴퓨터에서 '핑' 소리가 나고 프로그래밍 쉴드의 빨간색 LED에 불이 들어와야 합니다. 다음으로 AI Thinker ESP32-CAM 보드와 올바른 시리얼 포트가 선택되었는지 확인하십시오. 아래 그림을 참조하십시오.

 

 

AI Thinker ESP32-CAM 보드 및 시리얼 포트 선택

 

표시되는 시리얼 포트는 컴퓨터와 ESP32-CAM 연결에 사용하는 USB 포트에 따라 다를 수 있습니다.

 

프로그래밍 모드

 

ESP32-CAM에 프로그램을 업로드하려면 다음 단계를 따르세요.

 

아두이노 IDE의 업로드 버튼을 통해 업로드를 시작하세요.

 

 

아두이노 IDE의 업로드 버튼

 

프로그래밍 쉴드에서 모듈 측면에 있는 IO0(io zero) 버튼을 길게 누르십시오.

 

 

프로그래밍 쉴드의 IO0 버튼

 

출력 패널에 "연결 중…"이라는 텍스트가 나타날 때까지 기다리십시오.

 

 

연결 대기 중

 

(IO0을 계속 누른 상태에서) ESP32-CAM( 프로그래밍 쉴드가 아닙니다! )의 RST 버튼을 0.5초 동안 눌렀다 놓습니다. 이 버튼은 위치가 매우 불편하지만, 프로그래밍 쉴드의 RST 버튼은 제대로 작동하지 않았습니다. 아래 이미지는 눌러야 하는 RST 버튼의 위치를 ​​보여줍니다.

 

 

ESP32-CAM 모듈의 RST(리셋) 버튼

 

"연결 중..."이라는 텍스트의 점들이 더 이상 나타나지 않으면 IO0 버튼에서 손을 떼셔도 됩니다. 그러면 출력 패널에 다음과 같은 텍스트가 나타나 코드가 업로드되고 있음을 보여줍니다.

 

 

시리얼 모니터에 업로드 진행 정보 표시

 

실행 모드

 

출력 패널에 "RTS 핀을 통한 하드 리셋..."이라는 문구가 나타나면 업로드가 완료된 것입니다. 이제 ESP32-CAM 모듈의 RST 버튼을 눌러 업로드된 프로그램을 실행할 수 있습니다. 이전과 마찬가지로 프로그래밍 쉴드의 RST 버튼이나 IO0 버튼은 사용하지 마십시오.

 

다음 테스트 코드를 사용하여 업로드를 시도해 볼 수 있습니다.

 

ESP32-CAM 프로그래밍 쉴드용 테스트 코드

 

이 프로그램은 ESP32-CAM의 플래시 LED를 10밀리초 동안 켜고 2초 동안 기다린 후 이 과정을 반복하는 간단한 깜빡임 프로그램입니다.

 

int flashPin = 4;

void setup() {
  pinMode(flashPin, OUTPUT);
}

void loop() {
  digitalWrite(flashPin, HIGH);
  delay(10);
  digitalWrite(flashPin, LOW);
  delay(2000);
}

 

 

LED가 깜빡이면 ESP32-CAM에 프로그램이 성공적으로 업로드된 것입니다.

 

ESP32-CAM에 코드를 업로드하는 과정이 상당히 번거롭다는 것을 눈치채셨을지도 모릅니다. 프로그래밍 쉴드가 ESP32를 자동으로 프로그래밍 모드로 전환해 주고 아무 버튼도 누를 필요가 없을 거라고 예상하셨겠지만, 제가 사용해 본 두 가지 프로그래밍 쉴드 모두에서 그런 기능이 작동하지 않았습니다.

 

그렇긴 하지만, 타이밍이 상당히 중요하고 통신도 불안정한 것 같습니다. 업로드를 성공적으로 완료하려면 여러 번 시도해야 하는 경우가 많았습니다. USB 케이블을 뽑았다 다시 꽂으면 도움이 되는 경우도 있었습니다. 때로는 USB 포트를 바꾸니 아무 버튼도 누르지 않아도 업로드가 시작되기도 했습니다.

 

다음 섹션에서는 FTDI 프로그래머 사용법을 보여드리겠습니다. FTDI 프로그래머를 사용하면 코드 업로드가 조금 더 쉬워지지만, 여전히 완전히 자동화되지는 않습니다.

 

FTDI 프로그래머를 사용하여 코드를 업로드

 

FTDI 프로그래머 또는 FTDI USB-TTL 어댑터는 ESP32-CAM용 프로그래밍 쉴드와 기본적으로 동일한 기능을 수행합니다. USB 신호를 직렬 신호로 변환하여 UART 인터페이스를 통해 아두이노 및 ESP32와 같은 마이크로컨트롤러를 프로그래밍할 수 있도록 해줍니다.

 

 

FTDI 프로그래머

 

프로그래밍 쉴드와 달리 FTDI 프로그래머는 특정 보드에 국한되지 않고 시리얼 통신을 지원하는 모든 마이크로컨트롤러에서 사용할 수 있습니다. FTDI 프로그래머는 더 유연하지만, 프로그래머와 마이크로컨트롤러 간의 배선을 직접 해야 합니다. 다음 섹션에서는 이 배선 작업을 진행할 것입니다.

 

FTDI 프로그래머와 ESP32-CAM 연결하기

 

다음 그림은 FTDI 프로그래머를 ESP32-CAM 모듈에 연결하는 방법을 보여줍니다.

 

 

FTDI 프로그래머와 ESP32-CAM의 배선

 

연결은 간단합니다. 먼저 프로그래머의 접지선(GND)과 ESP32-CAM 모듈의 접지선(파란색 선)을 연결합니다. 그런 다음 5V 전원 공급 장치(빨간색 선)도 같은 방식으로 연결합니다. 일부 FTDI 프로그래머에는 3.3V와 5V를 전환하는 점퍼 또는 스위치가 있으므로 이 점에 유의하십시오.

 

다음으로 ESP32-CAM의 U0T(U0TXD) 핀을 프로그래머의 RXD 핀(노란색 선)에 연결합니다. 마찬가지로 U0R 핀은 TXD 핀(녹색 선)에 연결합니다. 이렇게 하면 시리얼 통신이 설정됩니다.

 

ESP32-CAM을 프로그래밍 모드로 전환하려면 IO0 핀을 접지(GND)에 연결해야 합니다. 하지만 프로그램을 실행하려면 IO0 핀을 연결하지 않은 상태로 두어야 합니다. 따라서 프로그래밍 모드와 실행 모드를 전환할 수 있도록 IO0 핀과 GND 핀 사이에 스위치(보라색 선)를 추가했습니다. 아래 그림을 참조하세요.

 

 

ESP32-CAM의 프로그래밍 모드를 활성화하려면 이 스위치를 켜십시오.

 

ESP32-CAM 보드 선택

 

ESP32-CAM이 연결된 FTDI 프로그래머를 USB 포트에 꽂고, Arduino IDE에서 드롭다운 메뉴를 클릭한 다음 "다른 보드 및 포트 선택..."을 클릭합니다.

 

 

보드 선택을 위한 드롭다운 메뉴

 

그러면 검색창에 "ESP32-CAM"을 입력하는 대화 상자가 열립니다. 보드 목록에서 "AI Thinker ESP32-CAM" 보드를 찾을 수 있습니다. 해당 보드를 클릭하고 COM 포트를 선택하여 활성화한 다음 확인을 클릭하세요.

 

 

AI Thinker ESP32-CAM을 이용한 보드 선택 대화 상자

 

ESP32-CAM이 COM 포트에서 인식되지 않습니다.

 

ESP32-CAM이 FTDI 프로그래머를 통해 USB 포트에 연결되었는데도 포트를 선택할 수 없다면 CP210X 드라이버가 설치되어 있지 않은 것입니다. SILICON LABS 소프트웨어 다운로드 페이지에서 사용 중인 운영체제에 맞는 CP210x 드라이버를 다운로드하십시오. 예를 들어 Windows의 경우 "CP210x VCP Windows"를 다운로드하면 됩니다.

 

 

CP210X 드라이버 다운로드

 

그러면 ZIP 파일이 다운로드됩니다. 압축을 풀고 설치 프로그램을 실행하세요. 설치가 완료되면 ESP32-CAM이 USB 포트에 연결된 것으로 표시됩니다. 문제가 계속 발생하는 경우 FTDI 프로그래머용 FTDI 드라이버도 설치해야 할 수 있습니다 .

 

프로그래밍 모드

 

FTDI 프로그래머를 사용한 프로그래밍은 프로그래밍 쉴드를 사용한 프로그래밍과 매우 유사합니다. 먼저 스위치를 켜서 ESP32-CAM 모듈을 프로그래밍 모드로 전환하십시오(IO0은 GND에 연결).

 

그런 다음 아두이노 IDE에서 업로드 버튼을 누르세요 .

 

 

아두이노 IDE의 업로드 버튼

 

시리얼 모니터에 "연결 중…"이라는 텍스트가 나타날 때까지 기다리세요.

 

 

연결 대기 중

 

그다음 ESP32-CAM의 RST 버튼을 빠르게 눌렀다 놓으세요.

 

 

ESP32-CAM 모듈의 RST(리셋) 버튼

 

"연결 중..." 뒤의 점들이 더 이상 나타나지 않고 출력 패널에 업로드 진행 상황이 표시될 것입니다.

 

 

출력 패널에 업로드 진행 정보 표시

 

ESP32-CAM을 프로그래밍 모드로 전환(스위치를 켠다)한 다음 RST 버튼을 눌렀다 놓고 아두이노 IDE에서 업로드 버튼을 누르는 방법도 효과가 있는 것 같습니다. 이렇게 하면 연결 메시지를 기다리는 시간을 조절할 필요가 없습니다.

 

실행 모드

 

출력 패널에 "RTS 핀을 통한 하드 리셋..."이라는 텍스트가 나타나면 업로드가 완료된 것입니다. 스위치를 조작하여 프로그래밍 모드에서 실행 모드로 전환한 후 ESP32-CAM의 RST 버튼을 눌러 프로그램을 시작하십시오.

 

위에서 보여준 것과 동일한 테스트 코드를 사용하거나, 다음 코드처럼 조금 더 고급스러운 코드를 시도해 볼 수도 있습니다.

 

FTDI 프로그래머를 사용한 ESP32-CAM 테스트 코드

 

이 프로그램은 기본적으로 깜빡임 프로그램과 동일하지만, 플래시 LED의 밝기를 255단계에 걸쳐 천천히 증가시킨 다음 1초 동안 끄고 이 과정을 반복합니다.

 

int flashPin = 4;

void setup() {
  pinMode(flashPin, OUTPUT);
}

void loop() {
  for (int b = 0; b < 255; b++) {
    analogWrite(flashPin, b);
    delay(1);
  }
  analogWrite(flashPin, 0);
  delay(1000);
}

 

 

(FTDI 프로그래머를 사용하더라도) 프로그래밍 과정이 여전히 복잡하기 때문에, 보다 복잡한 프로그램을 실행하기 전에 먼저 SD 카드와 카메라의 기능을 테스트하는 것이 좋습니다. 다음 두 섹션에서 그 방법을 설명합니다.

 

SD 카드 테스트

 

데이터시트에 따르면 ESP32-CAM은 4GB 마이크로 SD 카드만 지원합니다. 그러나 8GB 및 16GB 마이크로 SD 카드는 일반적으로 정상 작동합니다. 더 큰 용량의 카드는 FAT32로 재포맷해야 합니다. 더 큰 SD 카드를 FAT32로 포맷하려면 ridgecrop의 guiformat.exe 소프트웨어를 사용하십시오.

 

다음 테스트 프로그램은 테스트 파일을 생성하고, 파일에 텍스트를 쓰고, 파일에서 텍스트를 읽어옵니다. 이 프로그램이 정상적으로 작동하면 SD 카드가 정상입니다.

 

#include "SD_MMC.h"
#include "FS.h"
#include "LittleFS.h"

int flashPin = 4;

void setup() {
  Serial.begin(115200);  
  SD_MMC.begin();
  LittleFS.begin(true);

  File file = LittleFS.open("/test.txt", FILE_WRITE);
  file.print("*** Test successful ***");
  file.close();

  file = LittleFS.open("/test.txt");
  while (file.available()) {
    Serial.write(file.read());
  }
  file.close();

  pinMode(flashPin, OUTPUT);
  analogWrite(flashPin, 0);
}

void loop() {
}

 

 

다음은 해당 코드에 대한 보다 자세한 설명입니다.

 

라이브러리 및 초기화

 

SD 카드 및 파일 시스템 작업을 위해 필요한 라이브러리인 SD_MMC.h, FS.h, LittleFS.h를 포함하는 것으로 시작합니다.

 

#include "SD_MMC.h"
#include "FS.h"
#include "LittleFS.h"

 

flashPin또한 플래시 LED에 연결된 핀을 나타내는 변수를 정의합니다 .

 

int flashPin = 4;

 

setup 함수 

 

이 setup()함수에서는 직렬 통신을 115200의 전송률로 초기화합니다.

 

void setup() {
  Serial.begin(115200);

 

다음으로 SD 카드와 LittleFS 파일 시스템을 초기화합니다. ` --` 옵션 LittleFS.begin을 사용하여 함수를 호출하면 trueLittleFS 파일 시스템이 생성됩니다. 일반적으로 이 작업은 한 번만 수행하면 되지만, 매번 이와 같은 방식으로 함수를 호출해도 아무런 문제가 없습니다.

 

  SD_MMC.begin();
  LittleFS.begin(true);

 

다음으로, 쓰기 모드로 파일을 생성하고 test.txt, 테스트 메시지를 파일에 쓴 다음 파일을 닫습니다.

 

  File file = LittleFS.open("/test.txt", FILE_WRITE);
  file.print("*** Test successful ***");
  file.close();

 

파일을 읽기 모드로 다시 열고, 내용을 문자 단위로 읽어 시리얼 모니터에 출력합니다.

 

  file = LittleFS.open("/test.txt");
  while (file.available()) {
    Serial.write(file.read());
  }
  file.close();

 

 

마지막으로 flashPin을 출력 핀으로 설정하고 PWM 값을 0으로 설정하여 플래시 LED를 끕니다. SD 카드에 쓰기 작업 시 플래시 LED가 자동으로 켜지는 것이 성가시기 때문입니다. 이 두 줄 없이도 테스트 코드는 정상 작동하지만, 테스트를 실행할 때마다 눈부신 플래시 LED가 마음에 들지 않았습니다.

 

 

  pinMode(flashPin, OUTPUT);
  analogWrite(flashPin, 0);

 

 

loop 함수

 

모든 작업은 setup 함수 내에서 이루어지므로 해당 loop()함수는 비어 있습니다. 프로그램을 다시 실행하려면 ESP32-CAM을 재설정해야 합니다.

 

void loop() {
}

 

시리얼 모니터 출력

 

모든 것이 정상적으로 작동한다면 시리얼 모니터에 다음과 같은 줄이 표시될 것입니다. 마지막 줄에 "*** 테스트 성공 ***"이라는 문구가 표시되는데, 이는 SD 카드에 데이터를 쓰고 읽는 데 성공했음을 나타냅니다.

 

 

시리얼 모니터에서 SD 카드 테스트가 성공적으로 완료되었습니다.

 

기타 테스트

 

또는 ESP32 라이브러리에 포함된 더 복잡한 테스트를 실행할 수도 있습니다. 이 테스트는 추가적인 디버깅 출력을 제공하므로 유용할 수 있습니다. SDMMC_Test.ino 스케치를 참조하세요 . 동일한 코드는 스케치 예제에서도 확인할 수 있습니다. 파일 -> 예제 -> AI-Thinker ESP32-CAM용 예제 -> SDMMC -> SDMMC_Test를 방문하세요.

 

카메라 테스트

 

SD 카드 사용 후 카메라 기능을 테스트하려고 합니다. 아래 코드는 더 복잡한 프로그램의 간소화된 버전입니다. ESP32-CAM이 시작될 때마다(리셋 버튼을 누를 때마다) 사진을 촬영하여 SD 카드에 저장합니다.

 

이 코드는 AI-Thinker 모델에 특화되어 있지만, PSRAM이 있는 대부분의 ESP32 기반 카메라 보드에서도 잘 작동합니다( 모델 정의 참조). 모델에 맞게 핀 정의 만 수정하면 됩니다 .

 

 

#include "esp_camera.h"
#include "soc/rtc_cntl_reg.h"
#include "SD_MMC.h"
#include "EEPROM.h"

// CAMERA_MODEL_AI_THINKER
#define PWDN_GPIO_NUM 32
#define RESET_GPIO_NUM -1
#define XCLK_GPIO_NUM 0
#define SIOD_GPIO_NUM 26
#define SIOC_GPIO_NUM 27
#define Y9_GPIO_NUM 35
#define Y8_GPIO_NUM 34
#define Y7_GPIO_NUM 39
#define Y6_GPIO_NUM 36
#define Y5_GPIO_NUM 21
#define Y4_GPIO_NUM 19
#define Y3_GPIO_NUM 18
#define Y2_GPIO_NUM 5
#define VSYNC_GPIO_NUM 25
#define HREF_GPIO_NUM 23
#define PCLK_GPIO_NUM 22

void configCamera() {
  camera_config_t config;
  config.ledc_channel = LEDC_CHANNEL_0;
  config.ledc_timer = LEDC_TIMER_0;
  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;
  config.pin_pclk = PCLK_GPIO_NUM;
  config.pin_vsync = VSYNC_GPIO_NUM;
  config.pin_href = HREF_GPIO_NUM;
  config.pin_sscb_sda = SIOD_GPIO_NUM;
  config.pin_sscb_scl = SIOC_GPIO_NUM;
  config.pin_pwdn = PWDN_GPIO_NUM;
  config.pin_reset = RESET_GPIO_NUM;
  config.xclk_freq_hz = 20000000;
  config.pixel_format = PIXFORMAT_JPEG;
  config.frame_size = FRAMESIZE_UXGA;
  config.jpeg_quality = 10;
  config.fb_count = 2;
  esp_err_t err = esp_camera_init(&config);

  sensor_t* s = esp_camera_sensor_get();
  s->set_brightness(s, 0);
  s->set_contrast(s, 0);
  s->set_saturation(s, 0);
  s->set_special_effect(s, 0);
  s->set_whitebal(s, 1);
  s->set_awb_gain(s, 1);
  s->set_wb_mode(s, 0);
  s->set_exposure_ctrl(s, 1);
  s->set_aec2(s, 0);
  s->set_ae_level(s, 0);
  s->set_aec_value(s, 300);
  s->set_gain_ctrl(s, 1);
  s->set_agc_gain(s, 0);
  s->set_gainceiling(s, (gainceiling_t)0);
  s->set_bpc(s, 0);
  s->set_wpc(s, 1);
  s->set_raw_gma(s, 1);
  s->set_lenc(s, 1);
  s->set_hmirror(s, 0);
  s->set_vflip(s, 0);
  s->set_dcw(s, 1);
  s->set_colorbar(s, 0);
}

unsigned int incCounter() {
  unsigned int cnt = 0;
  int adr = 0;
  EEPROM.get(adr, cnt);
  EEPROM.put(adr, cnt + 1);
  EEPROM.commit();
  return cnt;
}

void skipPictures(int n) {
  for(int i=0; i<n; i++) {
    camera_fb_t* fb = esp_camera_fb_get();
    esp_camera_fb_return(fb);
  }
}

void takePicture() {
  camera_fb_t* fb = esp_camera_fb_get();
  unsigned int cnt = incCounter();
  String path = "/pic" + String(cnt) + ".jpg";
  Serial.println(path);
  File file = SD_MMC.open(path.c_str(), FILE_WRITE);
  file.write(fb->buf, fb->len);
  file.close();
  esp_camera_fb_return(fb);
}

void setup() {
  WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);
  Serial.begin(115200);
  SD_MMC.begin();
  EEPROM.begin(16);
  configCamera();
  skipPictures(n);
  takePicture();
  esp_deep_sleep_start();
}

void loop() {
}

 

 

이 코드는 고급 사용 사례를 위한 좋은 출발점입니다. 예를 들어, 움직임 감지 센서나 조도 센서가 작동했을 때 사진을 찍거나, 특정 시간 간격으로 사진을 찍고 싶을 때 활용할 수 있습니다. 아래에서는 이 코드의 작동 방식에 대해 좀 더 자세히 설명합니다.

 

상수 및 라이브러리

 

먼저, esp_camera.h, soc/rtc_cntl_reg.h, SD_MMC.h, EEPROM.h와 같은 필수 라이브러리를 포함합니다. 이 라이브러리들은 카메라 설정, SD 카드 작업, EEPROM 사용을 위한 기능을 제공합니다.

 

#include "esp_camera.h"
#include "soc/rtc_cntl_reg.h"
#include "SD_MMC.h"
#include "EEPROM.h"

 

카메라 설정

 

이 configCamera()함수는 LEDC 채널, 데이터 라인 핀(D0-D7), XCLK, PCLK, VSYNC, HREF, SCCB SDA, SCCB SCL, PWDN, RESET과 같은 카메라 구성 매개변수와 픽셀 형식, 프레임 크기, JPEG 품질 등과 같은 다양한 카메라 설정을 구성합니다.

 

void configCamera() {
  camera_config_t config;
  config.ledc_channel = LEDC_CHANNEL_0;
  config.ledc_timer = LEDC_TIMER_0;
  config.pin_d0 = Y2_GPIO_NUM;
  config.pin_d1 = Y3_GPIO_NUM;
  ...

  sensor_t* s = esp_camera_sensor_get();
  s->set_brightness(s, 0);
  s->set_contrast(s, 0);
  s->set_saturation(s, 0);
  ...
}

 

앞서 언급했듯이 카메라 종류에 따라 핀 정의가 달라질 수 있습니다. 또한 사진 품질이 만족스럽지 않다면 여러 매개변수를 조정해 볼 수 있습니다.

 

카운터 증가 함수

 

이 incCounter()함수는 EEPROM 메모리에 저장된 카운터 값을 읽고 증가시킵니다. 현재 카운트 값을 가져와서 1 증가시킨 후, 다시 EEPROM에 기록하고 이전 카운트 값을 반환합니다.

 

unsigned int incCounter() {
  unsigned int cnt = 0;
  int adr = 0;
  EEPROM.get(adr, cnt);
  EEPROM.put(adr, cnt + 1);
  EEPROM.commit();
  return cnt;
}

 

이렇게 하면 사진 촬영 시 EPS32-CAM을 재설정하더라도 촬영된 사진 수를 지속적으로 계산할 수 있습니다. 또한 이 카운터는 SD 카드에 저장하는 이미지 파일에 고유한 파일 이름을 지정하는 데 사용됩니다.

 

카운터를 초기화하려면 다음 코드를 업로드하고 실행하면 됩니다.

 

#include "EEPROM.h"
  
void setup() {
  EEPROM.begin(512);
  unsigned int cnt = 0;
  int adr = 0;
  EEPROM.put(adr, cnt);
  EEPROM.commit();
}

void loop() {
}

 

 

처음 사진 건너뛰기

 

이 SkipPictures(n)기능은 n이미지를 캡처한 후 삭제합니다. 이렇게 하는 이유는 다음과 같습니다. 카메라에는 자동 화이트 밸런스와 같은 여러 자동 기능이 내장되어 있는데, 이러한 기능은 주변 환경에 맞춰 조정하는 데 시간이 걸리고 여러 장의 이미지 프레임이 필요합니다. 따라서 절전 모드에서 깨어난 후에는 카메라가 조정될 시간을 조금 주어야 합니다.

 

void skipPictures(int n) {
  for(int i=0; i<n; i++) {
    camera_fb_t* fb = esp_camera_fb_get();
    esp_camera_fb_return(fb);
  }
}

 

재부팅 후 첫 번째 이미지를 촬영하면 화질이 매우 떨어지는 것을 알 수 있습니다. 일반적으로 푸른색 색조가 강하거나 너무 어둡거나 밝게 나타납니다. 하지만 처음 몇 프레임을 건너뛰면 대부분 (항상 그런 것은 아니지만) 양호한 화질의 사진을 얻을 수 있습니다.

 

카메라 설정에서 자동 화이트 밸런스 및 기타 자동 기능을 비활성화하는 방법도 있지만, 다른 설정을 조정하려면 비교적 안정적인 환경이 필요합니다. 그렇지 않으면 고품질 사진을 얻기 어려울 수 있습니다.

 

이미지 캡처 및 저장

 

다음 함수는 카메라를 사용하여 이미지를 캡처하고 SD 카드에 저장합니다. 카메라 프레임 버퍼를 불러와 카운터를 증가시키고, 이미지에 대한 고유한 파일 경로를 생성하고, 이미지 데이터를 파일에 기록한 후 프레임 버퍼를 해제합니다.

 

void takePicture() {
  camera_fb_t* fb = esp_camera_fb_get();
  unsigned int cnt = incCounter();
  String path = "/pic" + String(cnt) + ".jpg";
  Serial.println(path);
  File file = SD_MMC.open(path.c_str(), FILE_WRITE);
  file.write(fb->buf, fb->len);
  file.close();
  esp_camera_fb_return(fb);
}

 

참고로, 파일 경로 이름을 만들 때 카운터 변수를 사용합니다. 파일 이름이 마음에 들지 않으면 여기서 변경할 수 있습니다.

 

setup 함수

 

setup() 함수에서 먼저 브라운아웃 감지기를 비활성화합니다. ESP32-CAM은 전원이 시작될 때 낮은 전류를 공급하면 지나치게 쉽게 브라운아웃 오류를 발생시킵니다. WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0)를 호출하면 이 문제를 방지할 수 있습니다.

 

그런 다음 시리얼 통신을 초기화하고, SD 카드를 시작하고, EEPROM을 초기화하고, 카메라를 구성하고, 이미지를 캡처한 다음, 딥 슬립 모드로 들어갑니다. 즉, ESP32-CAM이 시작되거나 재설정될 때마다 새로운 사진이 촬영되어 SD 카드에 저장됩니다.

 

void setup() {
  WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);
  Serial.begin(115200);
  SD_MMC.begin();
  EEPROM.begin(512);
  configCamera();
  takePicture();
  esp_deep_sleep_start();
}

 

loop 함수

 

해당 loop()기능은 비어 있습니다. 모든 작업은 설정 중에 수행되며 단 한 장의 사진만 촬영된 후 보드는 절전 모드로 전환되어 재시작을 기다립니다.

 

카메라 웹 서버 예제

 

ESP32의 Wi-Fi 기능을 활용한 테스트를 원하신다면 CameraWebServer 예제가 좋습니다. 파일 -> 예제 -> ESP32 -> 카메라 -> CameraWebServer에서 찾을 수 있습니다.

 

 

CameraWebServer 예제

 

CameraWebServer.ino 파일의 코드를 약간 수정해야 합니다. 먼저 사용 중인 카메라 모델을 정의해야 합니다. 반드시 보유한 모델만 정의하도록 하십시오!

 

// ===================
// Select camera model
// ===================
//#define CAMERA_MODEL_WROVER_KIT // Has PSRAM
//#define CAMERA_MODEL_ESP_EYE // Has PSRAM
...
//#define CAMERA_MODEL_M5STACK_UNITCAM // No PSRAM
#define CAMERA_MODEL_AI_THINKER // Has PSRAM
//#define CAMERA_MODEL_TTGO_T_JOURNAL // No PSRAM
//#define CAMERA_MODEL_XIAO_ESP32S3 // Has PSRAM

 

다음으로, 집 와이파이 네트워크의 와이파이 자격 증명을 입력해야 합니다.

 

// ===========================
// Enter your WiFi credentials
// ===========================
const char* ssid = "**********";
const char* password = "**********";

 

코드를 업로드하고 ESP32-Cam을 재설정하면 시리얼 모니터에 다음 텍스트가 표시됩니다.

 

 

CameraWebServer의 IP 주소

 

마지막 줄을 보시면 웹 서버가 실행 중인 URL(IP 주소)이 나와 있습니다. 이 URL을 복사해서 브라우저 주소창에 붙여넣으면 ESP32-CAM에서 촬영한 사진을 웹 브라우저로 스트리밍하는 웹사이트가 나타날 것입니다.

 

 

브라우저의 CameraWebServer

 

 

자, 여기까지입니다! 이 정도면 ESP32-CAM 모듈을 시작하는 데 필요한 정보와 예시를 충분히 얻으셨을 겁니다.

 

간단한 동영상 스트리밍 예제 코드가 필요하시면 ESP32-CAM을 이용한 동영상 스트리밍 튜토리얼을 참고하세요. 동작 감지 카메라에 대한 내용은 동작 감지 ESP32-CAM 튜토리얼을 참조하세요.

 

요약

 

ESP32-CAM 모듈은 일단 작동시키면 훌륭하고 성능도 뛰어난 보드입니다. 하지만 모듈에 코드를 안정적으로 업로드하는 과정은 꽤 번거롭습니다. 저는 종종 여러 번 시도하고 USB 케이블을 뽑았다 꽂았다 해야 제대로 작동했습니다. 실제로 가장 안정적인 방법은 다음과 같습니다.

 

  1. USB 케이블을 뽑으세요
  2. 스위치보드를 프로그래밍 모드로 전환
  3. USB 케이블을 연결하세요
  4. 아두이노 IDE에서 업로드를 시작하세요

 

이 방법은 항상 잘 작동했고, 업로드 중에 RST 버튼을 누를 필요도 없었습니다. ESP32-CAM을 실행하려면 프로그래밍 모드를 비활성화하고 리셋 버튼만 누르면 됐습니다. USB 케이블을 뽑을 필요도 없었죠. 새 프로그램을 업로드할 때만 보드를 분리하고 위의 단계를 다시 거쳐야 했습니다.

 

제가 발견한 또 다른 팁은 보드가 프로그래밍 모드로 진입하지 못할 때 SD 카드를 제거하는 것이 도움이 된다는 것입니다. 이 문제는 이전에 플래싱한 코드가 SD 카드를 사용했을 때 자주 발생했습니다.

 

ESP32-CAM 보드 사용에 어려움이 있는 경우, 아래 링크에서 추가 정보와 자주 묻는 질문 및 답변을 확인할 수 있습니다.

 

마지막으로, 별도의 프로그래밍 쉴드나 FTDI 프로그래머 없이 펌웨어를 플래싱할 수 있는 보드를 찾고 있다면 ESP32-WROVER CAM을 살펴보세요. 이 제품은 GPIO 핀도 더 많지만 크기가 더 큽니다. 아주 작은 보드와 마이크가 필요하다면 XIAO-ESP32-S3-Sense를 추천합니다 .

 

이것저것 만져보고 조립하는 재미를 느껴보세요!

 

모래밭

 

ESP32-CAM 사용을 시작하는 데 유용한 링크 몇 개를 찾았습니다.

 

ESP32-CAM 시작하기

ESP32-CAM AI-Thinker에 코드를 프로그래밍/업로드하는 방법 (아두이노 IDE)

ESP32-CAM 문제 해결 가이드: 가장 흔한 문제 해결 방법

ESP32-CAM AI-Thinker 핀 배치 가이드: GPIO 사용법 설명

ESP32-CAM으로 사진을 촬영하고 MicroSD 카드에 저장하세요

카메라 핀 정의

지원되는 카메라 모델

 

 

 

자주 묻는 질문

 

다음은 문제 해결에 도움이 될 수 있는 몇 가지 일반적인 질문과 해결책입니다.

 

질문: ESP32-CAM이 Wi-Fi에 연결되지 않는 이유는 무엇입니까?

 

A: 인증 코드에 올바른 SSID와 비밀번호를 입력했는지 확인하세요. Wi-Fi 네트워크가 범위 내에 있고 정상적으로 작동하는지 확인하십시오.

 

질문: 카메라 화질을 어떻게 개선할 수 있나요?

 

A: 이미지 품질을 최적화하려면 코드에서 카메라 설정을 조정하세요. 다양한 해상도와 프레임 속도를 실험하여 프로젝트에 가장 적합한 설정을 찾아보세요.

 

질문: GPIO를 더 추가하려면 어떻게 해야 하나요?

 

A: SD 카드 인터페이스를 1비트 모드로 초기화하면 GPIO 핀 두 개를 추가로 확보할 수 있습니다. 자세한 내용은 ESP32-CAM의 GPIO 핀 추가 활용 튜토리얼을 참조하세요.

 

질문: ESP32-CAM이 선명한 이미지를 촬영하지 못하는 이유는 무엇입니까?

 

A: 조명이 좋지 않으면 이미지 품질이 저하될 수 있습니다. 선명한 이미지를 촬영하려면 카메라에 적절한 조명을 확보하십시오. 최적의 이미지 품질을 위해 코드에서 카메라 설정을 조정하십시오. 또한 렌즈 보호 필름을 제거했는지 확인하십시오.

 

렌즈 보호 필름

 

렌즈 보호 필름

 

질문: ESP32-CAM이 시리얼 모니터의 명령에 응답하지 않으면 어떻게 해야 하나요?

 

A: 코드의 시리얼 통신 설정을 확인하고 코드와 시리얼 모니터 모두에서 올바른 보드율(115200)이 설정되어 있는지 확인하십시오. ESP32-CAM 보드와 컴퓨터 간의 연결 상태도 확인하십시오.

 

질문: SD 카드가 인식되지 않는 이유는 무엇인가요?

 

A: SD 카드가 슬롯에 제대로 삽입되었는지, 그리고 FAT32 형식으로 올바르게 포맷되었는지 확인하십시오. SD 카드 초기화가 올바르게 수행되었는지 코드를 확인해 보세요. 4~16GB 카드는 문제없이 작동해야 합니다. 용량이 더 큰 카드는 문제를 일으킬 수 있습니다.

 

질문: 제 ESP32-CAM이 뜨거워지는데, 정상인가요?

 

A: ESP32-CAM이 작동 중에 따뜻해지는 것은 정상입니다. 하지만 과도하게 뜨거워진다면 단락이나 전원 공급 문제를 확인해 보세요.

 

질문: ESP32-CAM의 전력 소모를 줄이려면 어떻게 해야 하나요?

 

A: 불필요한 주변 장치를 비활성화하고 코드를 최적화하여 전력 소비를 최소화하십시오. 보드를 사용하지 않을 때는 절전 모드를 활용하여 전력을 절약하는 것을 고려해 보세요.

 

질문: ESP32-CAM으로 촬영한 이미지가 재부팅 후 푸른색을 띠는 이유는 무엇입니까?

 

A: 카메라에는 자동 화이트 밸런스와 같은 자동 기능이 있는데, 이러한 기능은 주변 환경에 맞춰 조정되는 데 시간이 걸립니다. 이 기능을 사용하지 않으면 사진이 파랗게 나오거나 너무 어둡거나 밝게 나올 수 있습니다. 이를 방지하는 쉬운 방법은 카메라를 재시작한 후 여러 장의 사진을 찍고 그 결과는 무시하는 것입니다. 자세한 방법은 skipPictures()튜토리얼 영상을 참고하세요.

 

질문: ESP32-CAM이 이미지를 캡처하지 못하는 이유는 무엇입니까?

 

A: 카메라 모듈이 ESP32-CAM 보드에 제대로 연결되어 있는지 확인하십시오. 카메라 핀이 올바르게 배선되었는지, 그리고 코드에서 카메라 모듈을 지원하는지 확인하십시오.

 

질문: ESP32-CAM에서 비디오를 스트리밍하려면 어떻게 해야 하나요?

 

A: ESP32-CAM-Webserver 와 같은 라이브러리를 사용하여 ESP32-CAM에 스트리밍 서버를 구현하고 Wi-Fi를 통해 비디오를 스트리밍하세요. 네트워크 대역폭이 비디오 스트리밍에 필요한 대역폭을 충분히 감당할 수 있는지 확인하십시오.

 

질문: ESP32-CAM이 아두이노 IDE에서 인식되지 않는 이유는 무엇입니까?

 

A: 아두이노 IDE에 필요한 ESP32 보드 지원 패키지가 설치되어 있는지 확인하십시오. USB 케이블과 포트 연결을 확인하여 ESP32-CAM 보드와의 올바른 통신을 보장하십시오.

 

질문: ESP32-CAM에 코드를 업로드하는 동안 "패킷 헤더를 기다리는 중 시간 초과" 오류가 계속 표시되는 이유는 무엇입니까?

 

A: 이 오류는 USB 연결 속도가 느리거나 불안정할 때 발생할 수 있습니다. 다른 USB 케이블이나 포트를 사용해 보시고, 코드를 업로드하기 전에 ESP32-CAM 보드의 전원이 켜져 있고 부트로더 모드인지 확인하십시오.

 

질문: ESP32-CAM이 코드 업로드 중에 멈추면 어떻게 해야 하나요?

 

A: USB 케이블을 분리하고 ESP32-CAM 보드를 재설정한 후 코드를 다시 업로드해 보세요. 업로드 과정 중에 보드가 멈추거나 충돌하는 원인이 코드가 아닌지 확인하십시오.

 

질문: ESP32-CAM에 무선으로 코드를 업로드할 수 있나요?

 

A: 네, OTA(Over-The-Air) 프로그래밍을 사용하여 ESP32-CAM에 무선으로 코드를 업로드할 수 있습니다. 코드에 OTA 기능을 구현하고 USB 연결 없이 코드를 업로드하는 데 필요한 단계를 따르세요.

 

질문: ESP32-CAM이 코드 업로드를 위한 부트로더 모드로 진입하지 않는 이유는 무엇입니까?

 

A: ESP32-CAM 보드의 GPIO0 핀과 GND 연결이 제대로 되어 있는지 다시 한번 확인하십시오. 코드 업로드를 위해 부트로더 모드로 진입하려면 리셋 버튼을 올바른 시점에 눌러야 합니다.

 

Q: 코드 업로드 시 발생하는 "치명적인 오류가 발생했습니다: ESP32 연결 실패: 패킷 헤더 대기 시간 초과" 오류를 어떻게 해결할 수 있나요?

 

A: 이 오류는 전송 속도 설정이 잘못되었거나 USB 케이블에 문제가 있을 때 발생할 수 있습니다. 아두이노 IDE 설정에서 전송 속도를 변경하거나 다른 USB 케이블을 사용하여 ESP32-CAM 보드와 안정적인 연결을 설정해 보세요.

 

질문: ESP32-CAM에 코드를 업로드할 때 "esptool.FatalError: Timed out waiting for packet header" 오류가 발생하면 어떻게 해야 하나요?

 

A: 이 오류는 컴퓨터와 ESP32-CAM 보드 간의 통신 시간 초과 문제를 나타낼 수 있습니다. USB 케이블, 포트 및 보드 연결 상태를 확인하십시오. IDE를 다시 시작하고 보드를 재설정한 후 코드를 다시 업로드해 보세요.

 

질문: "정전 감지기가 작동했습니다"라는 오류 메시지가 표시되면 어떻게 해야 하나요?

 

A: 이 오류는 일반적으로 ESP32-CAM에 공급되는 전원이 부족하여 전압이 떨어질 때 발생합니다. ESP32의 내부 회로가 이 문제를 감지하면 시리얼 모니터에 오류 메시지를 표시하고 보드를 재설정합니다. ESP32-CAM의 5V 핀에 1A 전류를 공급할 수 있는 전원 어댑터를 사용하여 전원을 공급해야 합니다. 자세한 내용은 ESP32 -CAM 전압 강하 문제 해결 튜토리얼을 참조하십시오.

 

 

이 튜토리얼의 원문 참고 문서

 

Programming the ESP32-CAM

In this article you will learn how the programming of the ESP32-CAM development board. With examples on how to test the camera and SD card.

www.makerguides.com

 

 

반응형

캐어랩 고객 지원

취업, 창업의 막막함, 외주 관리, 제품 부재!

당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약, 아이디어는 있지만 구현할 기술이 없는 막막함.

우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.

이제 고민을 멈추고, 캐어랩을 만나세요!

코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.

제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!

귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.

지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.

카카오 채널 추가하기

카톡 채팅방에서 무엇이든 물어보세요

당신의 성공을 위해 캐어랩과 함께 하세요.

캐어랩 온라인 채널 바로가기

캐어랩