树莓派GPIO控制--python篇

时间:2022-12-11 06:32:53

1. 目前树莓派上常用的三种GPIO控制方式

  • python GPIO
    【开发语言】——python
    【简单介绍】——该库更确切的名称为raspberry-gpio-python,树莓派官方资料中推荐且容易上手。python GPIO是一个小型的python库,可以帮助用户完成raspberry相关IO口操作。但是python GPIO库还没有支持SPI、I2C或者1-wire等总线接口。除了python GPIO之外,还有众多的python扩展库(例如webiopi),毫无疑问的说python非常适合树莓派,树莓派也非常适合python。
  • wiringPi
    【开发语言】——C语言
    【简单介绍】——wiringPi适合那些具有C语言基础,在接触树莓派之前已经接触过单片机或者嵌入式开发的人群。wiringPi的API函数和arduino非常相似,这也使得它广受欢迎。作者给出了大量的说明和示例代码,这些示例代码也包括UART设备,I2C设备和SPI设备等,毫无疑问地说wiringPi功能非常强大。
  • BCM2835 C Library
    【开发语言】——C语言
    【简单介绍】BCM2835 C Library可以理解为使用C语言实现的相关底层驱动,它给我的感觉更像STM32的库函数,BCM2835 C Library的驱动库包括GPIO、SPI和UART等,可以通过学习BCM2835 C Library熟悉BCM2835相关的寄存器操作。如果有机会开发树莓派上的linux驱动,或自主开发python或PHP扩展驱动,可以从BCM2835 C Library找到不少的“灵感”。

2. 树莓派GPIO编号方式

树莓派的软件扩展库虽然很多,但也导致了扩展库“碎片化”的问题,例如操作树莓派的GPIO端口,GPIO的编号便存在三种不同的方式。
树莓派GPIO控制--python篇
【1】插座编号方式
编号侧重P1插座侧,从上到下,从左到右。正如图3的Header一栏。
【2】BCM2835编号方式
编号侧重CPU寄存器,根据BCM2835的GPIO寄存器编号。正如图3 BCM GPIO一栏。
【3】wiringPi编号方式
编号侧重实现逻辑,把扩展GPIO端口从0开始编号,这种编号方便编程。正如图3 WiringPi一栏。
【举例说明】
插座编号方式 11 = BCM2835编号方式 17 = wiringPi编号方式 GPIO0

3. Python GPIO实现

  1. 配置环境
    sudo apt-get install python-dev
    sudo apt-get install python-rpi.gpio
    sudo apt-get install python-serial
  2. 示例代码

    # -- coding: utf-8 --
    import RPi.GPIO as GPIO
    import time
    # BOARD编号方式,基于插座引脚编号
    GPIO.setmode(GPIO.BOARD)
    # 输出模式
    GPIO.setup(11, GPIO.OUT)

    while True:
     GPIO.output(11, GPIO.HIGH)
     ptime.sleep(1)
     GPIO.output(11, GPIO.LOW)
     time.sleep(1)

    【简单说明】
    【1】GPIO.setmode(GPIO.BOARD),采用树莓派插座引脚编号方式。
    【2】WiringPiSetupGpio()或RPi.GPIO.setmode(GPIO.BCM),则是采用树莓派主芯片提供商Broadcom的编号方法,相当于采用BCM GPIO编号。