30個Python物聯網小實驗3:使用按鈕開燈關燈

使用按鈕開燈關燈

  • 接線圖很是簡單,LED接GPIO17號口,按鈕接GPIO2號口,負極接GND地線。

  • 代碼也很是簡單:
from gpiozero import LED, Button
from signal import pause

led = LED(17)
button = Button(2)

button.when_pressed = led.on
button.when_released = led.off

pause()
  • 執行代碼,按下按鈕,發光二極管就會亮,鬆開就會滅。

使用按鈕開燈關燈(二)

  • 還有一種source的寫法,直接把按鈕的狀態提供給發光二極管,達到一樣的效果。
from gpiozero import LED, Button
from signal import pause

led = LED(17)
button = Button(2)

led.source = button

pause()

按鈕按下和鬆開

  • 先上效果

  • 接線很是簡單,按鈕一端鏈接GPIO2號針腳,一端鏈接GND地線。
  • 代碼灰常簡單:
from gpiozero import Button

button = Button(2)

while True:
    if button.is_pressed:
        print("Button is pressed")
    else:
        print("Button is not pressed")

等待按鈕按下才執行

  • 直接上代碼吧:
from gpiozero import Button

button = Button(2)

button.wait_for_press()
print("Button was pressed")
  • 程序執行到button.wait_for_press()這一句以後,會先停下,等待按鈕按下以後,纔會繼續執行。

按下執行特定函數

  • 直接上代碼:
from gpiozero import Button
from signal import pause

def say_hello():
    print("Hello!")

button = Button(2)

button.when_pressed = say_hello

pause()
  • 按下按鈕,執行say_hello()這個函數。

鬆開執行特定函數

  • 上效果圖:

  • 上代碼:
from gpiozero import Button
from signal import pause

def say_hello():
    print("Hello!")

def say_goodbye():
    print("Goodbye!")

button = Button(2)

button.when_pressed = say_hello
button.when_released = say_goodbye

pause()
  • 按下會執行say_hello()函數,鬆開會執行say_goodbye()函數。

長按4秒關機

  • 上代碼:
from gpiozero import Button
from subprocess import check_call
from signal import pause

def shutdown():
    check_call(['sudo', 'poweroff'])

shutdown_btn = Button(2, hold_time=4)
shutdown_btn.when_held = shutdown

pause()
  • 增長了一個hold_time=4長按4秒才觸發的初始化,觸發以後執行shutdown()函數關機。

小遊戲:誰的反應快?

  • 接線圖:兩個按鈕分別鏈接GPIO二、3號口,LED鏈接GPIO 17號口。

  • 上代碼:
from gpiozero import Button, LED
from time import sleep
import random

led = LED(17)

player_1 = Button(2)
player_2 = Button(3)

time = random.uniform(2, 5)
sleep(time)
led.on()

while True:
    if player_1.is_pressed:
        print("Player 1 wins!")
        break
    if player_2.is_pressed:
        print("Player 2 wins!")
        break

led.off()
  • 程序開始執行後,在(2,5)秒隨機點亮LED燈,誰搶險按下按鈕,就會顯示誰贏了。

好了,本次介紹就到這裏,這個系列的全文會收錄在個人github目錄,歡迎你們star和溝通:https://github.com/asukafighting/RaspberryPiHackergit

相關文章
相關標籤/搜索