ESP32 칩, 모듈, 개발 기판의 차이
ESP32 칩은 프로그램을 실행하고 무선 통신과 입출력을 처리하는 핵심 부품이다. ESP32 모듈은 그 칩을 중심으로 만든 부품이며, 개발 기판은 모듈에 USB 연결부, 전원 회로, 버튼, 핀 헤더 등을 더해 실험하기 쉽게 만든 보드이다.
이 글은 ESP32-DevKitC V4를 대표 사례로 삼는다. 이 기판은 ESP32-WROOM-32E 모듈, USB-UART 변환 칩, Micro-USB 포트, EN·BOOT 버튼, 양쪽 핀 헤더를 갖춘다. 대부분의 모듈 핀을 헤더로 꺼내 점퍼선이나 브레드보드에 연결할 수 있다. 기판의 전원 LED는 전원 공급 상태를 보여 주는 LED이므로, 프로그램으로 제어할 LED가 있다고 가정해서는 안 된다.1
ESP32-S3·ESP32-C3 계열이나 다른 제조사의 기판은 핀 배열, USB 연결 방식, 내장 부품이 다를 수 있다. 아래의 GPIO 번호와 버튼 설명을 다른 기판에 그대로 적용하지 말고, 손에 든 기판의 실크 인쇄와 회로도를 먼저 확인해야 한다.
연결과 전원 안전
ESP32-DevKitC V4의 Micro-USB 포트는 기판에 전원을 공급하고 컴퓨터와 직렬 통신하는 데 쓰인다. USB-UART 변환 칩은 컴퓨터의 USB 연결을 ESP32와의 통신으로 이어 준다. 전원은 Micro-USB, 5V·GND 핀, 3V3·GND 핀 중 한 가지 방법으로만 공급해야 한다. 여러 전원 경로를 동시에 연결하면 기판이나 전원 장치가 손상될 수 있다.1
ESP32의 GPIO에는 3.3V 신호를 사용한다. 외부 센서나 모듈이 5V 신호를 출력한다면 GPIO에 바로 연결하지 말고 전압을 맞춰야 한다. 전원 핀의 표기와 GPIO의 신호 전압도 서로 구분하자. 연결을 바꾸기 전에는 전원을 끄고, GND가 올바르게 연결됐는지 확인하는 편이 안전하다.
EN은 기판을 재설정하는 버튼이다. BOOT는 펌웨어 다운로드 모드로 들어갈 때 쓴다. ESP32-DevKitC V4에서는 BOOT를 누른 채 EN을 눌러 다운로드 모드를 시작할 수 있다.1
GPIO를 고를 때 확인할 점
GPIO는 LED를 켜거나 버튼 상태를 읽는 등 외부 장치와 신호를 주고받는 핀이다. 하지만 ESP32 칩에 존재하는 GPIO가 모두 개발 기판의 헤더에 나와 있거나 자유롭게 사용 가능한 것은 아니다. 예제의 핀 번호를 쓰기 전에 기판 표기와 회로도를 대조해야 한다.
기본 ESP32의 GPIO34~39는 입력 전용이다. LED 출력용으로 사용할 수 없으며, 소프트웨어로 켜는 내부 풀업·풀다운 저항도 없다. GPIO6~11과 GPIO16~17은 모듈에서 플래시 또는 PSRAM에 연결되는 경우가 많아 다른 용도로 쓰지 않는 것이 좋다. GPIO0, 2, 5, 12, 15는 시작 동작에 영향을 주는 부트 스트랩 핀이므로, 연결한 회로가 부팅을 방해하지 않는지 확인해야 한다. Wi-Fi를 사용하면서 ADC2 핀의 아날로그 값을 읽으려면 제약이 있으므로 ADC1 핀을 검토한다.2
이 제약은 여기서 다루는 기본 ESP32를 기준으로 한다. ESP32-S3·C3의 사용 가능한 핀을 정할 때는 해당 칩과 기판의 문서를 별도로 확인해야 한다.
첫 연결부터 GPIO 테스트까지
먼저 기판과 USB 포트에 눈에 띄는 손상이 없는지 살핀다. ESP32-DevKitC V4를 데이터 전송이 가능한 Micro-USB 케이블로 컴퓨터에 연결하고, 컴퓨터에 직렬 포트가 나타나는지 확인한다. 개발 환경은 Espressif의 ESP-IDF 또는 Arduino IDE 중 하나를 선택할 수 있다. ESP-IDF는 공식 개발 환경을 따라 프로젝트를 설정하고 예제를 빌드·업로드하는 방식으로 시작하면 된다.1
처음에는 기판에 내장된 사용자 LED를 가정하기보다 외부 LED로 출력을 시험하는 편이 분명하다. 아래는 기본 ESP32에서 GPIO23을 사용할 수 있음을 기판 표기와 회로도로 확인한 뒤 실행하는 Arduino IDE 예제다. GPIO23에서 저항을 거쳐 LED의 긴 다리(양극)로, LED의 짧은 다리(음극)에서 GND로 연결한다. 저항은 예를 들어 330Ω을 사용할 수 있다.
const int ledPin = 23;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
digitalWrite(ledPin, HIGH);
delay(500);
digitalWrite(ledPin, LOW);
delay(500);
}Arduino IDE에서 사용 중인 기판에 맞는 보드 설정과 직렬 포트를 선택해 업로드한다. LED가 약 0.5초 간격으로 켜지고 꺼지면 USB 연결, 업로드, GPIO 출력의 기본 흐름을 확인한 것이다. ESP-IDF를 선택했다면 GPIO 출력 예제로 같은 원리를 시험할 수 있다.2
활용과 문제 해결
ESP32 개발 기판은 버튼 입력과 LED 제어부터 센서값 읽기, 모터 제어 신호 출력, 무선 통신을 이용한 간단한 자동화 실험까지 폭넓게 활용할 수 있다. 실제 회로에서는 센서의 전압, 필요한 전류, 사용하려는 핀의 기능을 각각 확인해야 한다.
컴퓨터에 포트가 보이지 않으면 충전 전용 케이블이 아닌지 확인하고, USB 포트와 필요한 USB-UART 드라이버를 점검한다. 업로드가 실패하면 선택한 포트와 보드 설정을 다시 확인하고, 다른 프로그램이 직렬 포트를 사용 중인지 살핀다. 다운로드 모드 진입이 잘되지 않을 때는 ESP32-DevKitC V4에서 BOOT를 누른 채 EN을 누르는 방법을 시도할 수 있다.1
업로드 후 동작하지 않으면 코드를 바꾸기 전에 LED 방향, 저항과 GND 연결, 코드의 GPIO 번호와 실제 핀 표기를 확인한다. 부팅이 반복되거나 시작하지 않는다면 부트 스트랩 핀에 연결한 회로와 전원 공급 방식을 살펴본다. ESP32-S3·C3나 다른 제조사의 기판에서는 이 글의 버튼 조작과 핀 번호 대신 해당 기판의 회로도와 사용 설명서를 기준으로 문제를 좁혀야 한다.
참고
이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.