GPIO 기본 개념 - 2. 입력(센서, 버튼) vs 출력(LED, 모터) 개념

2025. 2. 11. 13:38프로그래밍/시스템

입력(센서, 버튼) vs 출력(LED, 모터) 개념

GPIO 핀은 기본적으로 입력(Input) 모드출력(Output) 모드로 설정된다.
각 모드는 하드웨어와의 연결 방식이 다르며, 입력은 센서나 버튼의 상태를 읽는 역할, 출력은 LED나 모터를 제어하는 역할을 한다.


📌 1. 입력 (Input)

GPIO를 입력 모드로 설정하면 외부 장치에서 신호를 받아들이는 역할을 한다.
이때, GPIO 핀은 0(LOW) 또는 1(HIGH)의 값을 감지할 수 있으며, 센서나 버튼과 같은 입력 장치의 상태를 읽을 때 사용된다.

✔ 입력 모드의 특징

✅ GPIO가 외부 신호(버튼, 센서 등)를 감지할 때 사용됨.
HIGH(1) 또는 LOW(0) 값만 읽을 수 있음.
✅ 내부 풀업(Pull-up), 풀다운(Pull-down) 저항을 설정하여 안정적인 신호 감지가 가능함.

💡 입력 장치의 예시

버튼 스위치 → 버튼이 눌렸는지 감지 (HIGH 또는 LOW 상태)
적외선 센서 → 물체 감지 여부 확인
온습도 센서(DHT11 등) → 특정 신호를 받아 데이터 읽기


🔧 버튼 입력 감지 예제 (C++)

아래 코드는 GPIO 핀을 입력 모드로 설정하고, 버튼이 눌렸을 때 신호를 감지하는 코드이다.

#include <wiringPi.h>
#include <stdio.h>

#define BUTTON_PIN 2  // GPIO 2번 핀

int main() {
    wiringPiSetup();
    pinMode(BUTTON_PIN, INPUT);  // GPIO 2번을 입력 모드로 설정
    pullUpDnControl(BUTTON_PIN, PUD_UP);  // 풀업 저항 설정 (기본 HIGH 유지)

    while (1) {
        int buttonState = digitalRead(BUTTON_PIN);  // 버튼 상태 읽기
        if (buttonState == LOW) {  // 버튼이 눌리면 LOW
            printf("버튼이 눌렸습니다!\n");
        }
        delay(100);  // 0.1초 간격으로 확인
    }
    return 0;
}

🔹 동작 방식

  • pinMode(2, INPUT); → GPIO 2번 핀을 입력 모드로 설정.
  • pullUpDnControl(2, PUD_UP); → 풀업 저항을 활성화하여 버튼이 눌리지 않았을 때 HIGH로 유지.
  • digitalRead(2); → 버튼이 눌리면 LOW(0), 떼면 HIGH(1) 감지.
  • 버튼을 누를 때마다 "버튼이 눌렸습니다!" 메시지가 출력됨.

📌 2. 출력 (Output)

GPIO를 출력 모드로 설정하면 외부 장치(LED, 모터 등)에 신호를 보낼 수 있다.
GPIO 핀이 HIGH(1) 상태일 때 전압(3.3V 또는 5V)을 출력하고, LOW(0) 상태일 때 전압을 제거하여 동작을 제어한다.

✔ 출력 모드의 특징

HIGH(1) → 전압 출력 (LED ON, 모터 작동)
LOW(0) → 전압 제거 (LED OFF, 모터 정지)
✅ GPIO 핀을 통해 직접 전원을 공급할 수 있지만, 전류 제한이 있어 릴레이, 트랜지스터, 드라이버 사용이 필요할 수 있음.

💡 출력 장치의 예시

LED → GPIO 신호로 ON/OFF 제어
모터 → GPIO 신호를 이용해 회전 또는 정지
릴레이 → GPIO 신호로 높은 전압(220V 등) 장비 ON/OFF


🔧 LED 제어 예제 (C++)

아래 코드는 GPIO 핀을 출력 모드로 설정하고, LED를 깜빡이게 하는 코드이다.

#include <wiringPi.h>
#include <stdio.h>

#define LED_PIN 3  // GPIO 3번 핀

int main() {
    wiringPiSetup();
    pinMode(LED_PIN, OUTPUT);  // GPIO 3번 핀을 출력 모드로 설정

    while (1) {
        digitalWrite(LED_PIN, HIGH);  // LED ON
        printf("LED ON\n");
        delay(1000);  // 1초 대기
        
        digitalWrite(LED_PIN, LOW);  // LED OFF
        printf("LED OFF\n");
        delay(1000);  // 1초 대기
    }
    return 0;
}

🔹 동작 방식

  • pinMode(3, OUTPUT); → GPIO 3번 핀을 출력 모드로 설정.
  • digitalWrite(3, HIGH); → GPIO 3번 핀에 전압을 인가(LED ON).
  • delay(1000); → 1초 동안 대기.
  • digitalWrite(3, LOW); → GPIO 3번 핀의 전압 제거(LED OFF).
  • 1초 간격으로 LED가 깜빡이는 동작 수행.

📌 입력 vs 출력 비교

기능  입력 (Input) 출력 (Output)
역할 외부 신호 감지 외부 장치 제어
사용 예시 버튼, 센서(온도, 조도, 초음파 등) LED, 모터, 릴레이
읽기/쓰기 digitalRead(pin) 사용 digitalWrite(pin, HIGH/LOW) 사용
초기 설정 pinMode(pin, INPUT) pinMode(pin, OUTPUT)

결론

  • 입력 모드 (Input Mode): 버튼, 센서의 데이터를 읽어 신호 감지.
  • 출력 모드 (Output Mode): LED, 모터 등을 ON/OFF하는 제어 기능 수행.
  • 디지털 입력/출력을 적절히 사용하면 다양한 임베디드 프로젝트를 구현할 수 있음. 🚀