pigpio库介绍-以产生PWM信号为例

1 为什么使用pigpio这个库?

树莓派中可用的GPIO库有很多,比如wiringpi,RPi.GPIO等等,都是非常简单使用的。而今天笔者要介绍的是pigpio库,他与RPi.GPIO相比,拥有诸多好处,例如精度高,波形可自定义等等,这是因为pigpio是用C语言编写的,从底层确保了其速度和精度。可以说,RPi.GPIO主要是面向刚使用的人群,它较为简单,而pigpio使用的人较少,并且文档也是全英文的,但是他的确适合精度要求更高的场景。本文简单介绍一下此库,并且将用产生方波信号为例子来显示pigpio的优势。

pigpio
在这里pigpio官方文档可以阅读其官方文档,作者将每个函数都进行了具体说明,举例子,因此使用起来也比较容易,但是需要一定的英语阅读能力。它对多种语言都设置了接口,比如Python,C,Java,Ruby,Node.js。
优势特征

  1. 硬件时间采样率能够达到5微秒,并且针对所有的GPIO口
  2. 能够对所有的GPIO实现硬件PWM
  3. 能够用所有的GPIO口驱动伺服电机
  4. 可以对所有的GPIO口设置回调函数(callback function)
  5. 当任意GPIO口电平发生变化,可以通过管道机制(pipe)通知
  6. 支持远程控制GPIO
  7. 支持产生任意波形,由用户定义
  8. 可以在守护进程(daemon)上创建并运行脚本
  9. 可提供软件示波器
  10. 封装了I2C,SPI总线协议

2 安装pigpio-以python为例

本文介绍python如何安装pigpio,如果读者需要其他语言的安装过程,可以在官方文档中寻找。Windows/Linux/MacOS理论上都可以安装此库,原理是类似的,本文直接介绍如何在树莓派上安装。

  1. 首先建议更新一下
    sudo apt-get update && sudo apt-get upgrade
  2. 方式一:下载源代码编译
wget https://github.com/joan2937/pigpio/archive/master.zip
unzip master.zip
cd pigpio-master
make
sudo make install
  1. 方式二:
    sudo apt-get install pigpio python-pigpio python3-pigpio
  2. 安装完成后,可以对其进行检查
    sudo pigpiod # start daemon
    ./x_pigpio.py # check Python I/F to daemon

3 使用方法-以产生PWM信号为例

  1. 在运行编写好的代码之前,需要先执行以下命令
    sudo pigpiod
    这样做是为了开启一个线程用于该库的运行,如果不这么做,在运行代码时会提示错误。如果你运行完了程序,想要关闭该库,可以使用如下命令
    sudo killall pigpiod
  2. 编写代码,这部分就直接上例程了。
import pigpio
import time
pi = pigpio.pi()          # 初始化
if not pi.connected:      # 检查是否连接成功 
   exit()
user_gpio = 26
pulsewidth = 1500         # 可以设置500至1500,这是电平为1的时间,单位是微秒
'''
为伺服电机产生PWM信号,设置频宽为1500 us,该信号频率默认为50Hz
''' 
pi.set_servo_pulsewidth(user_gpio, pulsewidth)
time.sleep(10)            # 延迟10秒
pi.wave_tx_stop() 
pi.wave_clear()
pi.stop()

以上是一种比较初级的方法,不能改变频率,占空比等参数,对于更复杂,更实用的方法,将在之后的文章当中进行介绍。有兴趣的朋友如果用示波器对产生的波形进行检测,会发现其精度是非常高的,笔者测试后发现脉冲宽度和设定的几乎完全一致。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐