樹莓派與傳感器
  • 前言
  • 樹莓派基礎
  • 樹莓派與Arduino
  • 樹莓派與Microbit
  • 用Python點亮LED
  • 把玩三色LED燈與PWM呼吸燈
  • 蜂鳴器
  • 按鈕開關
  • 人體移動感應器(PIR)
  • 尋線、避障與測距
  • 樹莓派:類比轉數位處理
  • 溫溼度感測器DHT11
  • 簡易的心跳偵測模組零件
  • 聲音感測器
  • 與火災相關的警報零組件
  • DS18B20溫度感測器
  • TM1638七節LED顯示器
  • MAX7219與矩陣式LED
  • 液晶顯示LCD1602
  • Django與物聯網
  • 使用VS Code遠端開發Django
  • 樹莓派與自走車
    • 控制馬達正反轉基礎
      • 自走車方向控制
    • 遠端鍵盤控制自走車+WebCam
    • 使用網路與搖桿、手機控制
  • 樹莓派與紅外線遙控器
  • 遠端GPIO:pigpio + piscope
Powered by GitBook
On this page
  • 一、把玩三色燈
  • 二、使用gpiozero套件模組來把玩三色燈
  • 三、製作PWM呼吸燈

Was this helpful?

把玩三色LED燈與PWM呼吸燈

Previous用Python點亮LEDNext蜂鳴器

Last updated 6 years ago

Was this helpful?

一、把玩三色燈

直接使用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