如何控制树莓派产生与读取pwm波——pigpio库函数使用指南:第二篇:pwm波形的读取

本文介绍了如何使用pigpio库在树莓派上控制和读取PWM波形,包括初始化库、设置回调函数以及理解回调函数的作用。文中还提供了实例程序和详细的解释,帮助读者掌握测量特定接口PWM波形的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在成功安装了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()

如果没有接触过面向对象编程,

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值