Chapter 6. 기본 디지털 입출력 (LED, 스위치, 부저)
브레드보드를 활용해 외부 소자들을 연결해 봅시다. 전기를 내보내는 출력(Output)과 외부 상태를 읽어들이는 입력(Input)의 기초를 다집니다.
디지털 입출력의 흐름: 스위치 신호 입력 → 보드 판단 → LED 전기 출력
6.1 스위치 입력을 받아 외장 LED 제어하기
스위치가 눌렸을 때 발생하는 전류 신호를 읽어 외부 LED를 켜는 조건문 실습입니다. 안정적인 입력을 위해 내부 풀다운(Pull-Down) 저항을 활성화합니다.
스위치 한쪽 → GP14, 반대쪽 → 3.3V. LED는 330Ω 저항과 직렬로 GP15 → 저항 → LED(+) → LED(−) → GND 순으로 연결합니다.
from machine import Pin
import time
# GPIO 15번에 외장 LED 연결 (출력 모드)
external_led = Pin(15, Pin.OUT)
# GPIO 14번에 푸시 스위치 연결 (입력 모드 및 내부 풀다운 저항 활성화)
# 버튼을 누르면 1(High), 떼면 0(Low)이 입력됩니다.
switch = Pin(14, Pin.IN, Pin.PULL_DOWN)
print("스위치 감지 시스템 가동...")
while True:
if switch.value() == 1: # 스위치가 눌렸다면
external_led.value(1) # 외장 LED 켜기
print("버튼 클릭 -> LED ON")
else: # 스위치가 떨어졌다면
external_led.value(0) # 외장 LED 끄기
time.sleep(0.05) # 채터링(흔들림) 방지를 위한 짧은 대기
6.2 능동 부저 vs 수동 부저 제어
능동 부저(Active Buzzer)는 전원만 주면 단일 경고음이 나고, 수동 부저(Passive Buzzer)는 주파수 신호(PWM)를 주어야 원하는 음계(도레미파)를 연주할 수 있습니다.
부저 + 단자(S 핀)→GP16, − 단자→GND. 능동 부저도 동일 배선이며, 수동 부저와 달리 GP16을 ON/OFF하는 것만으로 소리가 납니다.
[실습] 수동 부저를 이용한 도레미파 멜로디 연주
from machine import Pin, PWM
import time
# GPIO 16번에 수동 부저 연결 후 PWM 인스턴스 생성
buzzer = PWM(Pin(16))
# 음계별 주파수 정의 (도, 레, 미, 파)
tones = {
'DO': 262,
'RE': 294,
'MI': 330,
'FA': 349
}
def play_tone(frequency, duration):
if frequency == 0:
buzzer.duty_u16(0) # 소리 끄기
else:
buzzer.freq(frequency) # 주파수 설정
buzzer.duty_u16(32768) # 소리 크기 설정 (50% 듀티폭)
time.sleep(duration)
buzzer.duty_u16(0) # 음과 음 사이 음소거
time.sleep(0.05)
try:
print("멜로디 연주를 시작합니다.")
play_tone(tones['DO'], 0.5)
play_tone(tones['RE'], 0.5)
play_tone(tones['MI'], 0.5)
play_tone(tones['FA'], 0.5)
finally:
# 에러가 발생하거나 연주가 끝나면 안전하게 소리를 끄고 객체 해제
buzzer.duty_u16(0)
buzzer.deinit()
print("시스템이 안전하게 종료되었습니다.")