在成功安装了pigpio库之后(详细安装步骤请参照上一篇文章),我们就可以开始读取pwm波形了,需要注意的是,每次重启你的树莓派之后,你需要在命令行中运行以下命令,才可以运行你的基于pigpio开发的程序,否则会报错。
sudo pigpiod
如果懒得每次开机都输入这个命令,你可以尝试把这个命令添加到/etc/rc.local中,详见这里
该命令将开启一个守护进程,这个进程会守护pigpio程序的运行,这里需要你知道的是,pigpio程序在你开启守护进程后会一直运行,直到你关机,或者结束守护进程。在其他的情况下,你所输入的指令不过是对正在运行中的pigpio程序发出指令,命令它做出一些状态下的修改,你的程序的结束并不会结束pigpio进程本身。举个例子,如果你写了一个程序,让pigpio在某个gpio口持续输出pwm波,在那之后程序结束了,但是在守护进程的影响下,这个pwm波还会持续的被输出,直到你新开一个程序对它进行修改。关于具体如何生成pwm波,我将在下一篇文章提及。
接下来,我将提供一个示例程序,并在程序的下方尽量提供详细的解释,这个程序的作用是测量特定接口的pwm波形,这个程序的作者就是pigpio库函数的作者,Joan,程序的来源是这里
#!/usr/bin/python
import pigpio
import time
tick0 = None
tick1 = None
def mycallback(gpio, level, tick):
global tick0, tick1
if level == 0:
tick0 = tick
if tick1 is not None:
diff = pigpio.tickDiff(tick1, tick)
print "high for " + str(diff) + " microseconds"
else:
tick1 = tick
if tick0 is not None:
diff = pigpio.tickDiff(tick0, tick)
print "low for " + str(diff) + " microseconds"
pigpio.start()
cb = pigpio.callback(4, pigpio.EITHER_EDGE, mycallback)
time.sleep(5)
cb.cancel() # cancel callback
pigpio.stop()
如果你直接ctrl+c,ctrl+v这段程序,印象中它似乎会报错(写这篇文章的时候,我手头没有树莓派),如果它报错了,请按照以下步骤操作:
你需要实例化一个pigpio对象,请在程序的开头,"tick0 = None"语句的下方,添加这个语句:
pi = pigpio.pi()
接下来,对程序做相应的修改,将以下语句:
cb = pigpio.callback(4, pigpio.EITHER_EDGE, mycallback)
修改为:
cb = pi.callback(4, pigpio.EITHER_EDGE, mycallback)
这样应该就可以了,如果还是报错,请删除以下语句:
pigpio.start()
现在,我们对这个程序做一个较为详细的解析,在这之前顺便提醒一下,这个库最详细的官方使用指南是(这里)[http://abyz.me.uk/rpi/pigpio/python.html],我在这里写的只是一个非官方的中文教程(原文是英文)。
那就让我们开始吧!
最开始的两个语句便是导入两个库,这个不用多说。
import pigpio
import time
接下来,实例化一个pigpio对象:
pi = pigpio.pi()
如果没有接触过面向对象编程,