目的
使用GPIO Zero庫可以通過網絡遠程控制樹莓派的上GPIO口,本文將對該功能進行簡單說明。
使用前準備
樹莓派設置
使用GPIO Zero庫遠程功能首先需要使能 Remote GPIO
功能:
- Raspbian桌面系統下可以通過 首選項 > Raspberry Pi Configuration > Interfaces > Remote GPIO 來設置;
- 我們也可以終端中輸入 sudo raspi-config 打開配置工具,在其中 Interfaceing > Remote GPIO 來設置;
- 啓動pigpio,使用
sudo systemctl enable pigpiod
命令可設置在系統啓動時啓動pigpio。此外也可以使用sudo systemctl start pigpiod
或sudo pigpiod
來單次啓動pigpio;
控制端設置
控制端設備也不復雜,只要有GPIO Zero庫就可以,根據系統不同可以選擇通過包管理器或者pip來安裝(比如用pip來安裝: pip install gpiozero pigpio
),下面以Windows上安裝作爲演示,其他系統的安裝方式可以參考文後鏈接:
遠程控制GPIO口
完成上面的設置以後就可以真正開始遠程控制了,通過設置Pin Factory來實現該功能,先試試下面代碼:
from gpiozero import LED
from gpiozero.pins.pigpio import PiGPIOFactory
from time import sleep
factory = PiGPIOFactory(host='192.168.1.3') # 填寫樹莓派的IP地址
led = LED(17, pin_factory=factory)
while True:
led.on()
sleep(1)
led.off()
sleep(1)
在樹莓派GPIO17上接上LED,在控制端的電腦上運行上面代碼,如果一切無誤的話你就可以看到LED閃爍了。
如果你有多個樹莓派你甚至可以使用下面代碼來控制多個:
from gpiozero import LED
from gpiozero.pins.pigpio import PiGPIOFactory
from time import sleep
factory3 = PiGPIOFactory(host='192.168.1.3')
factory4 = PiGPIOFactory(host='192.168.1.4')
led_1 = LED(17, pin_factory=factory3)
led_2 = LED(17, pin_factory=factory4)
while True:
led_1.on()
led_2.off()
sleep(1)
led_1.off()
led_2.on()
sleep(1)
上面代碼中兩個樹莓派可以均爲遠程端,如果將其中一個樹莓派作爲控制端、另一個作爲遠程端那麼上面代碼也可以寫成下面這樣:
from gpiozero import LED
from gpiozero.pins.pigpio import PiGPIOFactory
from time import sleep
factory3 = PiGPIOFactory(host='192.168.1.3')
led_1 = LED(17) # 控制端
led_2 = LED(17, pin_factory=factory3)
while True:
led_1.on()
led_2.off()
sleep(1)
led_1.off()
led_2.on()
sleep(1)
遠程控制功能不光可以控制輸出,對輸入也可以檢測傳遞,試試下面代碼:
from gpiozero import LED
from gpiozero.pins.pigpio import PiGPIOFactory
from signal import pause
factory3 = PiGPIOFactory(host='192.168.1.3')
factory4 = PiGPIOFactory(host='192.168.1.4')
button = Button(2, pin_factory=factory3)
led = LED(17, pin_factory=factory4)
led.source = button
pause()
上面代碼將接在一個樹莓派上的button和另一個樹莓派上的led進行綁定,button被按下和鬆開時led狀態也會變化。
除了上面的方式外還可以通過環境變量指定IP地址的方式來使用遠程控制功能,具體的可以參考文後鏈接。
總結
GPIO Zero庫遠程控制功能入門內容就是這些了,更多內容可以參考下面鏈接:
https://gpiozero.readthedocs.io/en/stable/remote_gpio.html
https://gpiozero.readthedocs.io/en/stable/recipes_remote_gpio.html