目的
使用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