라즈베리파이의 핀 맵은 이러하다.
이렇게 회로도를 구성하면 된다.
회로도를 구성하였으면 이제 Visual Studio Code에 ssh연결을 하여 코드를 작성해줄것이다.
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)
p = GPIO.PWM(18, 50)
p.start(0)
try:
while 1:
for dc in range(0, 101, 5):
p.ChangeDutyCycle(dc)
time.sleep(0.1)
for dc in range(100, -1, -5):
p.ChangeDutyCycle(dc)
time.sleep(0.1)
except KeyboardInterrupt:
pass
p.stop()
GPIO.cleanup()
Duty Cycle을 이용하여 Led의 밝기를 서서히 켜지고 서서히 꺼지는 코드를 작성하였다.
p = GPIO.PWM(20, 50)
에서 두번째 인자는 Frequance를 뜻한다.
1초에 50번 반복한다는 소리이다. 이 값이 커질수록 더 많이 깜빡임이 생겨
더 자연스럽게 LED가 켜진다.
digital input이 올 경우 LED를 키는 코드로 응용을 해보자.
BTN을 사용하기 위해선 풀업다운 저항에 대해서 알아야 한다.
import RPi.GPIO as GPIO
def button_callback(channel):
global led_state
if led_state == False:
print("LED ON")
led_state = True
pwm_led.ChangeDutyCycle(100)
else:
print("LED OFF")
led_state = False
pwm_led.ChangeDutyCycle(0)
GPIO.setmode(GPIO.BCM)
GPIO.setup(21, GPIO.IN, pull_up_down=GPIO.PUD_UP)
led_pin = 6
led_state = False
GPIO.setup(led_pin, GPIO.OUT)
pwm_led = GPIO.PWM(led_pin, 50)
pwm_led.start(0)
GPIO.add_event_detect(21, GPIO.FALLING, callback=button_callback, bouncetime=200)
try:
while True:
pass
except KeyboardInterrupt:
# 프로그램 종료 시 GPIO 리소스 정리
pwm_led.stop()
GPIO.cleanup()
BTN에 풀업저항을 준다. 나는 이런식으로 현재 LED의 상태를 변수로 저장시켜서 조건문을 추가하여 코드를 작성을 하였다.