[Arduino-IDE] Seeed Studio XIAO ESP32S3 Sense 기본 예제 및 에러 조치
Seeed Studio XIAO ESP32S3 Sense는 카메라(OV2640)와 디지털 마이크가 내장된 ESP32-S3 기반 개발 보드로, Wi-Fi를 통해 영상 스트리밍이 가능합니다.
아래에서는 HamoniKR 7 환경에서 작성하였습니다.
1. Arduino IDE 기본 세팅
Arduino IDE 실행 > 파일 > 기본 설정 > (중간) Language 에 한국어 선택 후 [확인]을 누릅니다.
Arduino IDE 실행 > 파일 > 기본 설정 > (맨아래) 추가 보드 관리자 URL 에 아래 내용입력 후 [확인]을 누릅니다.
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
Arduino IDE 실행 > 도구 > 보드 > 보드매니저 실행해서 아래 두개를 설치합니다.
- Arduino ESP32 Boards
- esp32
Arduino IDE 실행 > 도구 > 보드 > esp32 > 아래로 한참 내려서 XIAO_ESP32S3를 선택합니다.
USB 에 기기 연결 후, 상단 셀렉트 옵션에서 해당 보드를 선택합니다.
2. 시리얼 포트 접근 권한 추가
리눅스 시스템에서 시리얼 포트에 대한 접근 권한을 주어야 합니다.
권한이 없을 경우, 아래와 같은 에러 메세지가 출력됩니다.
[Errno 13] could not open port /dev/ttyACM0: [Errno 13] Permission denied: '/dev/ttyACM0'
다음과 같이 사용자를 dialout 그룹에 추가합니다.
$ sudo usermod -a -G dialout $USER
시리얼 포트에 직접 권한을 부여 합니다.
$ sudo chmod 666 /dev/ttyACM0
두번째 명령은 임시적인 해결책으로, 재부팅 후에는 다시 권한을 설정해야 합니다.
3. 예제 입력 및 컴파일
Arduino IDE에는 여러가지 예제가 준비되어 있습니다.
ESP32S3 카메라를 올바르게 사용하기 위해 기본 제공되는 예제를 사용해 봅니다.
Arduino IDE 실행 > 파일 > 예제 > ESP32 > Camera > CameraWebServer를 선택합니다.
열려진 예제 코드에서 아래 두군데를 수정합니다.
1) 카메라 모델 변경
기본 카메라 모델 define CAMERA_MODEL_ESP_EYE 을 주석 처리하고,
#define CAMERA_MODEL_XIAO_ESP32S3을 주석 해제 합니다. (사용 한다는 뜻)
2) WiFi 설정 변경
연결 가능한 Wifi의 SSID값과 패스워드를 정확히 입력합니다.
const char* ssid = "CDH"; // Wi-Fi SSID
const char* password = "12345678"; // Wi-Fi 비밀번호
그리고 메뉴 : 파일 > 도구 > PSRAM: disabled 를 "OPI PSRAM"으로 변경합니다.
업로드를 실행 합니다.
아래와 같은 결과가 출력되면 성공한 것입니다.
[출력]
스케치는 프로그램 저장 공간 990114 바이트(29%)를 사용. 최대 3342336 바이트.
전역 변수는 동적 메모리 62996바이트(19%)를 사용, 264684바이트의 지역변수가 남음. 최대는 327680 바이트.
...
(생략)
...
riting at 0x000f8f09... (97 %)
Writing at 0x000fef8b... (100 %)
Wrote 990256 bytes (646409 compressed) at 0x00010000 in 6.7 seconds (effective 1174.6 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting with RTC WDT...
4. 실시간 영상 확인
Wifi 또는 핫스팟 기기에서 할당받은 ESP32S3 sense 웹서버IP 주소를 확인을 위해 '시리얼 모니터' 를 열면 되는데,
/dev/ttyACM0 에 연결할 수 없다고 할 것입니다.
(업로드 하면 자동으로 기기가 동작되어 업로드 상태가 해제됩니다)
그래서, 이상태 그대로 위 '2번' 항목의 명령을 다시 실행하면, 시리얼 모니터에 기기 IP 주소가 출력됩니다.
$ sudo usermod -a -G dialout $USER
$ sudo chmod 666 /dev/ttyACM0
그 주소로 접속하여 실시간 영상을 확인할 수 있습니다.
5. 참고 : 에러 모음
[ 에러 ]
/dev/ttyACM0 가 보였다 안보였다 하는 증상은 Arduino IDE 에서 포트가 보였다 안보였다 하는 증상과 같습니다.
이는 업로드를 이미 했거나, 하는중 오류가 발생하였거나 기타 등등의 문제로 인해 생기는데,
해결책은 아래와 같습니다.
[ 해결 ]
데이터 케이블과 ESP32S3 Sense (기기) 와 분리합니다.
C-Type 머리가 보이게, 그리고 위로 올린 방향으로 두면 C-Type 오른쪽으로 보이는 버튼이 BOOT 버튼입니다.
BOOT 버튼을 누른채 데이터 케이블을 연결하면 불이 깜빡이며, 멈추었을때 손을 떼면 초기화 됩니다.
초기화 된 상태에서 다시 케이블을 분리하면 원래대로 돌아갑니다.
그러므로 연결된 상태 그대로 소스코드를 수정하고 업로드 해야 합니다.
※ BootLoader 모드란?
- 공장 초기화가 아닌, 새로운 펌웨어를 강제로 업로드할 수 있도록 하는 모드
- 기존의 프로그램이 손상되었거나 업로드가 실패할 때, 이 모드를 통해 새로운 펌웨어를 강제로 설치 가능
- 일반적인 운영 중에는 사용되지 않으며, 포트 인식 오류나 업로드 문제 해결 시 사용
[ 에러 ]
업로드시 아래와 같은 에러메세지가 출력된다면, 현재 사용자에게 장치 접근 권한을 추가해야 합니다.
스케치는 프로그램 저장 공간 1000446 바이트(76%)를 사용. 최대 1310720 바이트. 전역 변수는 동적 메모리 62908바이트(19%)를 사용, 264772바이트의 지역변수가 남음. 최대는 327680 바이트. esptool.py v4.8.1 Serial port /dev/ttyACM0 A fatal error occurred: Could not open /dev/ttyACM0, the port is busy or doesn't exist. ([Errno 13] could not open port /dev/ttyACM0: [Errno 13] Permission denied: '/dev/ttyACM0') Hint: Try to add user into dialout or uucp group. Failed uploading: uploading error: exit status 2
[ 해결 ]
# sudo usermod -a -G dialout $USER
그런 다음 로그아웃, 로그인없이 적용하기 위해서 현재 터미널에서 새 그룹 권한을 바로 적용합니다.
# newgrp dialout
이제 android-ide 를 실행하면 /dev/ttyACM0 장치에 대한 접근권한이 생깁니다.
'프로그래밍 > C, C++' 카테고리의 다른 글
[C] 자신과 동일한 프로세스 이름이 가동중인지 확인하는 코드 (중복 실행 차단) (0) | 2024.08.27 |
---|---|
[C++] 파일쓰기 예제 (0) | 2023.12.11 |
C/C++ 프로그레스바 (ProgressBar) (0) | 2023.06.16 |
[C/C++] int 를 char 또는 const char* 로 변환하기 (0) | 2022.06.30 |
C++ 프로그램 중복 실행 방지 (윈도우 기반) (0) | 2021.05.18 |