스마트 디바이스 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 제어하기(켜고 끄기) image

  • 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가 켜지고 , 놓으면 꺼지는 기능 구현

image

https://github.com/user-attachments/assets/f3f840ef-9447-4860-9805-decc8b542538

조건문을 바꾸면 반대도 가능

https://github.com/user-attachments/assets/a4ca862d-0985-488b-87db-05db600c628a