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 에 !를 붙히면 반전된다는것