把玩三色LED燈與PWM呼吸燈

一、把玩三色燈

直接使用Arduino的交通三色燈模組小板,學習gpio一次整體設定的方法。

import RPi.GPIO as gpio
import time

gpio.setmode(gpio.BCM)

GREEN = 17
YELLOW = 27
RED = 22

gyrleds = list([GREEN, YELLOW, RED])

gpio.setup(gyrleds, gpio.OUT)

try:
    while True:
        for led in gyrleds:
            gpio.output(led, gpio.HIGH)
            time.sleep(1)
            gpio.output(led, gpio.LOW)
            time.sleep(1)
except KeyboardInterrupt:
    pass

gpio.cleanup()

二、使用gpiozero套件模組來把玩三色燈

gpiozero這個套件模組提供了關於控制LED的Class類別,讓我們可以輕易透過它來建立相對應的物件,並取用簡易的控制LED明暗的方法,程式撰寫變得更為簡易

from gpiozero import LEDBarGraph, LEDBoard, TrafficLights
from time import sleep
from signal import pause

leds = LEDBoard(17, 27, 22, pwm=True)

print('LED ON OFF')
for i in range(5):
    leds.on()
    sleep(1)
    leds.off()
    sleep(1)
time.sleep(3)

print('LED Value')
for i in range(5):
    leds.value = (1, 0, 0)
    sleep(1)
    leds.value = (0, 1, 0)
    sleep(1)
    leds.value = (0, 0, 1)
    sleep(1)
time.sleep(3)

print('LED Blink')
leds.blink(on_time=0.5, off_time=0.5)
pause()

三、製作PWM呼吸燈

利用非常易懂的例子學習什麼是PWM脈寬調變的概念,再利用這個概念實作出RPi GPIO的PWM呼吸燈,以及gpiozero的PWM呼吸燈的實例,PWM對於日後學習控制輸出功率是不可或缺的觀念與技巧。

import RPi.GPIO as gpio
import time

leds = [17, 27, 22]
# led_pwm = list([])

gpio.setmode(gpio.BCM)
gpio.setup(leds, gpio.OUT)

led_pwm = [gpio.PWM(led, 60) for led in leds]
[led.start(0) for led in led_pwm]
try:
    while True:
        for i in range(0, 80, 5):
            [led.ChangeDutyCycle(i) for led in led_pwm]
            time.sleep(0.1)
        for i in range(80, 0, -5):
            [led.ChangeDutyCycle(i) for led in led_pwm]
            time.sleep(0.1)
except KeyboardInterrupt:
    pass

[l.stop() for l in led_pwm]
gpio.cleanup()

採用gpiozero會使程式碼變得更簡潔,如下列程式碼,要製作PWN效果,只要改變其value屬性值即可,非常方便。

from gpiozero import LEDBoard
from signal import pause
import time

pwmled = LEDBoard(17, 27, 22, pwm=True)

v = 0.1
while True:
    for led in pwmled:
        led.value = v
        time.sleep(1)
        v += 0.1
        if v >= 1:
            v = 0.1

Last updated