4주차 ‐ GPIO 출력과 LED 제어 - Jhyemin06/Embedded-System_2026 GitHub Wiki

전자회로 용어 개념

옴의 법칙

I(전류) = v(전압)/R(저항)

  • 전류는 전압에 비례하고 저항이 반비례하는 전기회로에서의 기본 법칙

저항

  • 전기회로에서 전류의 흐름을 방해하는 성질

키르히호프의 전류 법칙(KCL)

ΣI(in) = ΣI(out) / (유입 전류의 합 = 유출 전류의 합)

  • 회로의 어떤 마디(노드, Node)에 들어오는 전류의 총합과 나가는 전류의 총합이 항상 같다는 법칙

GPIO(General Purpose Input/Output, 범용 입출력) 출력 원리

마이크로컨트롤러(MCU)나 프로세서 내부의 레지스터에 특정 값(1 또는 0)을 쓰면, 하드웨어 회로가 이를 전기적 신호(High 또는 Low 전압)로 변환해 외부 핀으로 내보내는 과정

  • 1을 쓸 경우: 논리적 High 상태가 되어 핀으로 3.3V 또는 5V(보드 작동 전압)의 전압이 출력됨.
  • 0을 쓸 경우: 논리적 Low 상태가 되어 핀으로 0V(GND)가 출력됨.

실습과정 전

실습 전 준비물

  • 라즈베리파이4 보드
  • SD카드
  • SD카드 리더기
  • LED
  • 5V 충전기
  • 스위치 전원 장치
  • 점퍼 와이어 2~3개
  • 330Ω 저항 1개

실습 전 주의사항

5V 배터리에 LED를 저항없이 꽂으면 안되는 이유

이유: LED에서 허용하는 전류보다 더 큰 전류가 저항없이 들어오기 때문에 결과: LED가 터지는 손상될 수 있다. -> 전류에 알맞게 저항을 사용하면 해결된다.

하지만, 저항을 달았더라도 타버릴 수 있다

전기회로가 고장나는 것을 방지하기 위해 저항을 사용하지만 저항 자체가 타버릴수도 있다. 이유: 저항의 전력 한계를 넘겼을 경우에 저항 자체가 타버릴 수 있다.

실습

실습 폴더 및 환경 확인

mkdir -p ~/embedded/week03
cd ~/embedded/week03
python3 --version # 파이썬 버전 확인
python3 -c "import gpiozero; print(gpiozero.__version__)" #gpiozero 설치 확인

단일점등

  • LED 2초 키기
from gpiozero import LED
from time import sleep

led = LED(17)        # BCM GPIO17
led.on()
sleep(2)
led.off()
led.close()

안전종료

from gpiozero import LED
from time import sleep

led = LED(17)  # BCM GPIO17 객체 생성
try:
    led.on()
    sleep(2)
    print("LED off")
finally:
    led.off()
    led.close() # GPIO 자원 해제

gpiozero를 이용한 LED 점멸 제어 방식 비교

gpiozero 라이브러리를 사용하여 LED의 점멸 횟수와 주기를 제어하는 두 가지 대표적인 방식을 비교합니다.

  1. for 반복문으로 직접 제어하기 for 반복문과 sleep() 함수를 사용하여 LED의 점멸 횟수와 주기를 직접 제어하는 방식입니다.
from gpiozero import LED
from time import sleep

led = LED(17)
try:
    for count in range(5):
        led.on()
        sleep(1.0)
        led.off()
        sleep(1.0)
        print(count + 1)
finally:
    led.close()

주요 개념 및 설명

  • 주기: 1.0초 ON + 1.0초 OFF \rightarrow 총 주기 2.0초
  • 반복: range(5)를 사용하여 동일한 점멸 과정을 총 5회 수행
  • 실습 참고: 0.2초 ON / 0.8초 OFF로 설정값을 변경하여 체감 차이를 비교·설명해볼 수 있습니다.
  1. blink() 메서드로 비동기 제어하기 gpiozero에서 제공하는 blink() 함수를 사용하여 비동기(백그라운드) 점멸을 간결하게 구현하는 방식입니다.
from gpiozero import LED
from signal import pause

led = LED(17)
led.blink(
    on_time=0.2,
    off_time=0.8
)

try:
    pause()
finally:
    led.close()

주요 개념 및 설명

  • 백그라운드 점멸: blink() 호출 후에도 프로그램이 블록되지 않고 다음 작업을 지속해서 수행할 수 있습니다.
  • pause(): 프로그램을 바로 종료하지 않고 이벤트를 대기 상태로 유지합니다.
  • 주의사항: 코드의 길이가 짧을수록 종료 조건과 자원 정리(led.close())를 더 명확하게 작성해야 합니다.