3주차: ESP32 GPIO 입출력 실습 - dhryu60/SmartDevice_2025-1 GitHub Wiki

📌 3주차: ESP32 GPIO 입출력 실습


📖 1장: 강의 개요

  • 목표: ESP32의 GPIO를 활용하여 디지털 및 아날로그 입출력을 실습한다.
  • 핵심 개념: GPIO, 디지털 입력/출력, 아날로그 입력/출력, PWM, ADC
  • 실습 장비: ESP32 개발 보드, LED 모듈, 버튼 모듈, 가변 저항, 점퍼 케이블

📖 2장: ESP32의 GPIO란?

  • GPIO (General Purpose Input Output)란?
    • 다목적 입출력 핀으로, 디지털 신호를 입력받거나 출력할 수 있다.
    • ESP32는 최대 34개의 GPIO 핀을 제공한다.
  • GPIO 핀의 역할
    • 디지털 입력/출력 (HIGH, LOW)
    • 아날로그 입력 (ADC)
    • PWM 출력 (LED 밝기 조절, 모터 속도 조절)

image


📖 3장: ESP32의 GPIO 핀 구성

  • 사용 가능한 핀
    • 대부분의 GPIO 핀은 자유롭게 사용할 수 있다.
    • 단, 일부 핀은 특정 기능이 예약되어 있다.
  • 입력 전용 핀: GPIO 34, 35, 36, 39
  • PWM/DAC 출력 가능 핀
    • PWM: GPIO 0-19, 21-23, 25-27, 32-33
    • DAC: GPIO 25, 26
  • Wi-Fi 사용 시 제한되는 핀: ADC2 핀 (GPIO 4, 0, 2, 15, 13, 12, 14, 27, 25, 26)

📖 4장: 디지털 출력 – LED 켜고 끄기

  • 디지털 출력이란?
    • GPIO 핀을 HIGH(1) 또는 LOW(0)로 설정하여 전자 장치를 제어하는 방식.
  • 실습 목표:
    • ESP32를 이용하여 LED를 제어해 보자.

📖 5장: 디지털 출력 회로 연결

📌 필요한 부품
✅ ESP32 보드
✅ LED 모듈
✅ 점퍼 케이블

image

📌 회로 연결 방법

  • ESP32 GPIO 4 → LED 모듈 S
  • ESP32 GND → LED 모듈 G
  • ESP32 3.3V → LED 모듈 V
    image

📖 6장: 디지털 출력 코드 작성

#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초 대기
}

📖 7장: 아날로그 출력(PWM) – LED 밝기 조절

PWM(Pulse Width Modulation)란?

  • 디지털 신호를 일정한 비율로 조절하여 아날로그처럼 동작하게 하는 방식.
  • LED 밝기 조절, 모터 속도 제어 등에 사용된다. ESP32의 PWM 기능
  • 0~255 값 범위 설정 가능 (LED 밝기 조절)

📖 8장: 아날로그 출력 회로 연결

image

📌 필요한 부품

✅ ESP32 보드
✅ LED 모듈
✅ 점퍼 케이블

📌 회로 연결 방법

  • ESP32 GPIO 4 → LED 모듈 S
  • ESP32 GND → LED 모듈 G
  • ESP32 3.3V → LED 모듈 V

image

📖 9장: 아날로그 출력 코드 작성


#define LED_PIN 4

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

void loop() {
  for (int brightness = 0; brightness <= 255; brightness++) {
    analogWrite(LED_PIN, brightness);
    delay(10);
  }
  for (int brightness = 255; brightness >= 0; brightness--) {
    analogWrite(LED_PIN, brightness);
    delay(10);
  }
}

📖 10장: 디지털 입력 – 버튼을 이용한 LED 제어

디지털 입력이란?

  • 버튼, 스위치와 같은 장치에서 HIGH(1) 또는 LOW(0)를 감지하는 방식.

image

실습 목표:

  • 버튼을 누르면 LED가 켜지고, 놓으면 꺼지는 기능 구현.

📖 11장: 디지털 입력 회로 연결

📌 필요한 부품 ✅ ESP32 보드
✅ LED 모듈
✅ 버튼 모듈
✅ 점퍼 케이블

📌 #회로 연결 방법#

  • ESP32 GPIO 4 → LED 모듈 S
  • ESP32 GND → LED 모듈 G
  • ESP32 GPIO 33 → 버튼 모듈 S
  • ESP32 GND → 버튼 모듈 G

📖 12장: 디지털 입력 코드 작성


#define LED_PIN 4
#define BUTTON_PIN 33

void setup() {
  pinMode(LED_PIN, OUTPUT);
  pinMode(BUTTON_PIN, INPUT);
}

void loop() {
  if (digitalRead(BUTTON_PIN) == HIGH) {
    digitalWrite(LED_PIN, HIGH);
  } else {
    digitalWrite(LED_PIN, LOW);
  }
}

📖 13장: 아날로그 입력 – 가변 저항을 이용한 LED 밝기 조절

아날로그 입력이란?

  • 0~4095 범위의 값을 읽어 다양한 센서 데이터를 처리하는 방식.

실습 목표:

  • 가변 저항을 사용하여 LED 밝기를 조절해 보자.

📖 14장: 아날로그 입력 회로 연결

📌 필요한 부품 ✅ ESP32 보드
✅ LED 모듈
✅ 가변 저항
✅ 점퍼 케이블

📌 회로 연결 방법

  • ESP32 GPIO 4 → LED 모듈 S
  • ESP32 GND → LED 모듈 G
  • ESP32 GPIO 34 → 가변 저항 S
  • ESP32 3.3V → 가변 저항 V
  • ESP32 GND → 가변 저항 G

📖 15장: 아날로그 입력 코드 작성


#define LED_PIN 4
#define POT_PIN 34

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

void loop() {
  int potValue = analogRead(POT_PIN); // 0~4095 범위의 값 읽기
  int brightness = map(potValue, 0, 4095, 0, 255);
  analogWrite(LED_PIN, brightness);
}

📖 16장: ESP32 GPIO 실습 정리

  • 디지털 출력: LED 켜고 끄기
  • 아날로그 출력: PWM을 이용한 LED 밝기 조절
  • 디지털 입력: 버튼을 이용한 LED 제어
  • 아날로그 입력: 가변 저항을 이용한 LED 밝기 조절

📖 17장: 실습 결과 확인

✅ 버튼을 누르면 LED가 켜지는지 확인하라.
✅ 가변 저항을 돌려 LED 밝기가 조절되는지 확인하라.
✅ PWM을 이용한 LED 밝기 변화가 부드러운지 확인하라.

📖 18장: 추가 실습

🔹 두 개의 버튼을 이용하여 LED 밝기를 증가/감소시키는 코드를 작성해 보아라.
🔹 아날로그 입력을 이용하여 온도 센서 값을 읽고 표시해 보아라.

📖 19장: 질의응답

궁금한 사항?

📖 20장: 다음 주 예고

🔹 4주차: ESP32 Wi-Fi & Bluetooth 실습
- 0~255 값 범위 설정 가능 (LED 밝기 조절)