3주차 스마트디바이스 (GPIO 활동) - jungjaeyeol/jyeol03 GitHub Wiki

1. GPIO란?

  • 키보드 핀으로, 디지털 신호를 입력하거나 입력할 수 있습니다.
  • ESP32는 최대 34개의 GPIO 핀을 제공합니다.

GPIO의 주요 특성

1. 범용성

  • 특정한 용도가 정해져 있지 않고 입력과 출력을 자유롭게 설정 가능
  • 디지털 신호(0 또는 1)로 동작

2. 입력(Input) 및 출력(Output)

  • 입력: 버튼, 센서 등 외부 신호를 감지
  • 출력: LED, 모터 등 외부 장치를 제어

3.논리 레벨

  • 보통 3.3V 또는 5V 논리 레벨 사용
  • 0V: LOW (신호 꺼짐), 3.3V/5V: HIGH (신호 켜짐)

4.풀업 저항(Pull-up) 및 풀다운 저항(Pull-down)

  • 부동(floating) 상태 방지를 위해 내부 또는 외부에서 저항 연결
  • 풀업: HIGH로 유지, 풀다운: LOW로 유지

5.PWM (Pulse Width Modulation)

  • 일부 GPIO 핀은 PWM 신호 지원
  • 밝기 제어나 모터 속도 조절에 유용

6. 인터럽트(Interrupt)

  • 입력 신호의 변화(상승/하강 엣지)를 감지하여 즉시 반응
  • 전력 효율적이며 빠른 이벤트 처리 가능

7.전류 및 전압 제한

  • 일반적으로 핀당 수 mA에서 수십 mA의 전류 제한
  • 너무 높은 전압/전류는 핀 손상 위험

핀의 역할

  • ESP32는 최대 34개의 GPIO 핀을 제공합니다.
  • 소셜 입력 (ADC)
  • PWM 출력(LED 백라이트 조절, 모터 속도 조절)

핀의 구성

  • 입력 핀 : GPIO 34, 35, 36, 39
  • PWM: GPIO 0-19, 21-23, 25-27, 32-33 (출력 가능)
  • DAC: GPIO 25, 26 (출력 가능)

2. 디지털 출력이란?

  • GPIO 핀을 HIGH(1) 또는 LOW(0)로 설정하여 전자 장치를 제어하는 ​​방식.

디지털 출력의 주요 특징

1. 이진 신호 (Binary Signal)

  • HIGH(1): 논리적으로 "켜짐"을 의미하며, 보통 3.3V 또는 5V 출력
  • LOW(0): 논리적으로 "꺼짐"을 의미하며, 0V 출력

2. 전압 및 전류 제한

  • 라즈베리 파이(Raspberry Pi)의 경우 GPIO 핀당 최대 16mA, 전체 50mA 제한
  • 아두이노(Arduino)의 경우 핀당 최대 20~40mA 제한
  • 높은 전류가 필요한 장치(모터 등)는 트랜지스터, 릴레이, 모스펫(MOSFET) 사용

3. 스위칭 제어

  • LED: LOW → 꺼짐, HIGH → 켜짐
  • 릴레이: LOW → 회로 비활성화, HIGH → 회로 활성화

4. PWM (Pulse Width Modulation)

  • 듀티 사이클(Duty Cycle)을 변경하여 출력 신호의 평균 전압을 조절
  • 밝기 조절, 속도 제어 등 아날로그 효과 구현 가능

3. LED 활동 실습. (LED 켜기)


const int ledPin = 4; // D4 핀에 LED 연결

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

void loop() {
  digitalWrite(ledPin, HIGH); // LED ON
  delay(1000);
  digitalWrite(ledPin, LOW);  // LED OFF
  delay(1000);
}

https://github.com/user-attachments/assets/b202512a-94fc-4158-a8c1-60ac9fa5f696

3-1. LED 활동 실습. (켜져있는 LED 끄기)

const int ledPin = 4;
const int buttonPin = 33;
int buttonState = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT); 
}

void loop() {
  buttonState = digitalRead(buttonPin);  // 버튼 상태 읽기
  digitalWrite(ledPin, buttonState);  // 버튼을 누르면 LED OFF
}

https://github.com/user-attachments/assets/b1db9440-a356-4bec-b214-2e5fb8dc528b

3-2. LED 활동 실습. (반대 적용)

const int ledPin = 4;
const int buttonPin = 33;
int buttonState = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT); 
}

void loop() {
  buttonState = digitalRead(buttonPin);  // 버튼 상태 읽기
  digitalWrite(ledPin, !buttonState);  // 버튼을 누르면 LED ON
}

https://github.com/user-attachments/assets/227a8d24-1f11-427a-98fb-b5c06877ec66

4. 알게된 점

  • GPIO의 의미와 주요 특성들
  • 디지털 출력의 의미와 주요특성 4가지.
  • buttonState 에 !를 붙히면 반전된다는것