[树莓派] 使用pigpio库(2) - 远程GPIO控制

pigpio库 - 远程GPIO控制

1 简介

在实际应用过程中,例如IoT(Internet of Things),我们时常需要远程控制GPIO口,还有可能是因为反馈和控制来自于不同的设备(一台设备用于收集数据,另一台用于控制),传统的思路是将收集的数据发送到控制端,再由控制端进行控制。这样就需要解决通讯的问题,对于非通信出身的同学而言这无疑是很麻烦的一件事情。有人使用redis(一种key-value数据库),然后使得控制端和收集端同时连接上redis,当收集端获得数据的时候,发送对应的flag和数据到redis上,由控制端进行接收;或者收集端直接给出控制命令,例如电机旋转30°,控制端接受命令后执行即可。

今天笔者要介绍两种更为简单的方法,都是基于pigpio这个库来实现的,由于这个库已经在底层实现了TCP通信,因此调用起来也非常容易方便,话不多说,直接开整。

2 准备工作

  1. 首先先安装pigpio,这个在第一篇当中已经有介绍,在此不再赘述。
  2. 确保两个或多个树莓派连接在同一个局域网下,建议使用以太网线(ethernet cable)进行连接,因为有线比无线网络更加稳定,但理论上来说无线网(wifi)也是可以做到的。连接好之后,可以使用ifconig来查看IP地址,通常是192.168.xxx.xxx。
  3. 手动开启dameon,使用以下命令
    sudo pigpiod -n localhost -n 192.168.1.65
    注意,localhost指的是本地的,也就是你输入命令所在的树莓派,而192.168.1.65则是指定了你想要的控制端的地址。为了说的更清楚,举个简单的例子。树莓派A用于收集传感器数据,树莓派B用于驱动并执行控制电机,其地址为192.168.1.13,假设树莓派A的局域网IP地址为192.168.1.65。现在想要用树莓派A控制电机,这样做可以简化开发工作,比如说你想要应用PID控制等,你只需要按照在一个树莓派上的写法将控制算法写在一起,不需要考虑通信的问题。此时,我们就在树莓派B上运行上述命令。
  4. 至此,准备工作就完成了,就可以开始编程的工作了。

3 以产生PWM为例

做好以上步骤之后,我们直接在树莓派A上编写代码即可,废话不多说,直接上代码。

'''
	test_remote_gpio.py
'''
import pigpio
import time
control_pi = pigpio.pi('192.168.1.13')  # 连接远程树莓派
if not control_pi.connected:
	print('连接失败')
control_pi.set_servo_pulsewidth(26, 1500)  # 对GPIO26情有独钟
time.sleep(10)   # 等待10秒
control_pi.wave_tx_stop()   # 停止输出波形
control_pi.stop()  # 退出
print('测试成功')

如果一切顺利的话,你就可以在控制端的GPIO26上得到一个频率为50Hz,脉冲宽度为1500微妙的PWM波形,10秒过后,PWM波形消失。

你可能感兴趣的:(树莓派,python,mcu,物联网)