스마트 디바이스 3주차 GPIO LED제어 - yubiine/25-1_smartdevice GitHub Wiki
⭐목표
- ESP32에서 GPIO 핀을 설정하고 사용하는 방법을 이해한다.
- 디지털 출력 및 입력을 통해 LED 및 버튼을 제어하는 실습을 진행한다.
📌GPIO란?
-
GPIO는 마이크로컨트롤러/보드에서 다용도로 사용되는 디지털 핀
-
입력(센서, 버튼) / 출력(LED, 모터)으로 설정 가능
-
소프트웨어에서 제어 가능하며, IoT·로봇·임베디드 시스템에서 많이 사용됨
📌ESP32 GPIO
ESP32 GPIO의 주요 특징으로는 다음과 같다.
1. 최대 39개의 GPIO 핀 제공
-
일반적인 ESP32-WROOM-32 모듈에서는 34개의 GPIO 핀을 사용할 수 있음.
-
일부 핀은 특정 기능(I2C, SPI, PWM 등)에 할당되어 있음.
2. 입력(Input) / 출력(Output) 지원
-
기본적인 디지털 입력 및 출력 기능 제공
-
내부 풀업(Pull-up), 풀다운(Pull-down) 저항 설정 가능
3. 3.3V 동작 (5V 호환 아님)
-
ESP32의 GPIO는 3.3V 로직 레벨을 사용하며, 5V 입력을 직접 연결하면 손상될 수 있음.
-
5V 신호를 사용할 경우 로직 레벨 변환기 필요
4. 고속 GPIO 지원
-
최대 80MHz 속도로 동작 가능
-
고속 펄스 생성 및 처리 가능
5. PWM(펄스 폭 변조) 지원
-
모터 제어, LED 밝기 조절 등에 활용
-
최대 16개의 PWM 채널 사용 가능
6. ADC (아날로그-디지털 변환) 지원
-
12비트 해상도, 18채널 ADC 입력 지원
-
0~3.3V 전압 측정 가능
7. DAC (디지털-아날로그 변환) 기능
-
2개의 DAC 핀 (GPIO25, GPIO26)
-
아날로그 신호 출력을 지원하여 오디오 출력 가능
8. 인터럽트(Interrupt) 기능 지원
-
GPIO 핀에서 인터럽트 발생 가능
-
상승(↑), 하강(↓), 변경(↑↓) 이벤트 감지 가능
9. I2C, SPI, UART 등 통신 인터페이스 포함
-
I2C: GPIO를 사용하여 센서, 디스플레이 등과 통신 가능
-
SPI: 고속 데이터 전송 가능
-
UART: 직렬 통신 (소프트웨어 및 하드웨어 지원)
✅ ESP32 GPIO 핀맵 (주요 핀 정리)
핀 번호 | 기능 | 사용 가능 여부 |
---|---|---|
GPIO0 | 부트 모드 선택 | O (주의 필요) |
GPIO1, 3 | UART TX/RX | X (기본 UART 사용 중) |
GPIO2 | 부트 모드, LED 연결 | O |
GPIO6~11 | SPI Flash 관련 | X (사용 불가) |
GPIO12 | 부트 모드 영향 (MTDI) | O (주의 필요) |
GPIO34~39 | 입력 전용 핀 | O (출력 불가) |
🔹 ⚠️ 사용 시 주의할 점
-
GPIO6 ~ GPIO11 → SPI 플래시 메모리에 사용되므로 사용 불가
-
GPIO0, GPIO2, GPIO12 → 부팅 과정에 영향을 미칠 수 있으므로 특정 설정 시 주의 필요
-
GPIO34 ~ GPIO39 → 입력 전용 핀, 출력 불가능
📌실습
1. 디지털 출력 – LED 켜고 끄기
✅ GPIO 핀의 HIGH(1) LOW(0)를 이용하여 ESP32의 LED 제어하기(켜고 끄기)
- ESP32 GPIO 4 → LED 모듈 S
- ESP32 GND → LED 모듈 G
- ESP32 3.3V → LED 모듈 V #define LED_PIN 4
void setup() {
pinMode(LED_PIN, OUTPUT); // LED 핀을 출력으로 설정
}
void loop() {
digitalWrite(LED_PIN, HIGH); // LED 켜기
delay(1000); // 1초 대기
digitalWrite(LED_PIN, LOW); // LED 끄기
delay(1000); // 1초 대기
}
https://github.com/user-attachments/assets/c3247b34-a517-45ee-b2ed-656939b8000f
2. 디지털 입력 – 버튼을 이용한 LED 제어
✅ 버튼을 누르면 LED가 켜지고 , 놓으면 꺼지는 기능 구현
https://github.com/user-attachments/assets/f3f840ef-9447-4860-9805-decc8b542538
조건문을 바꾸면 반대도 가능
https://github.com/user-attachments/assets/a4ca862d-0985-488b-87db-05db600c628a