RPI.GPIO从入门到入土

RPi.GPIO(下文简称GPIO)中的方法:

1
2
3
'''
['BCM', 'BOARD', 'BOTH', 'FALLING', 'HARD_PWM', 'HIGH', 'I2C', 'IN', 'LOW', 'OUT', 'PUD_DOWN', 'PUD_OFF', 'PUD_UP', 'PWM', 'RISING', 'RPI_INFO', 'RPI_REVISION', 'SERIAL', 'SPI', 'UNKNOWN', 'VERSION', 'add_event_callback', 'add_event_detect', 'cleanup', 'event_detected', 'getmode', 'gpio_function', 'input', 'output', 'remove_event_detect', 'setmode', 'setup', 'setwarnings', 'wait_for_edge']
'''

RPi.GPIO使用从入门到入土

本文是根据RPi.GPIO官方文档写的,由于原文档为英文,个人水平有限无法做到翻译的信达雅,恳请各位谅解!

1. Basic Usage(基本用法)

1.1 导入RPi.GPIO

两种导入方式:

  • 直接导入:
1
import RPi.GPIO as GPIO

通过这种方式,您可以为RPi.GPIO设置别名GPIO

  • 导入模块并检查是否导入成功:
1
2
3
4
try:
import RPi.GPIO as GPIO
except RuntimeError:
print("导入RPi.GPIO模块错误,这可能是因为需要超级用户权限.你可以尝试使用sudo命令运行程序!")

1.2 Pin numbering(引脚编号)

RPi.GPIO的两种对IO引脚的编号方法:

  • BOARD编号系统. 这是指Raspberry Pi板P1头上的引脚编号. 使用此编号系统的优势在于无论RPi的电路板是哪个版本,都无需更改代码.

  • BCM编号. 这是一种较低级别的工作方式.它指的是Broadcom SOC上的通道号. 您必须始终使用哪个通道编号指向RPi板上哪个引脚的图表. 您的脚本可能会在Raspberry Pi板的修订版之间中断.

尽管BOARD具有更好的适用性,但是还是很多人使用BCM,因此本文也使用BCM

指定两种引脚编号的方式为:

1
2
3
GPIO.setmode(GPIO.BOARD)
# or
GPIO.setmode(GPIO.BCM)

查看目前的引脚编号模式:

1
mode = GPIO.getmode()

返回值将是GPIO.BOARD,GPIO.BCM或None

连接树莓派后使用gpio readall命令查看引脚示意图:

直观理解理解引脚物理位置与BCM编号的对应关系:

1.3 (Warnings)警告

在Raspberry Pi的GPIO上如果有多个脚本/电路.如果RPi.GPIO检测到引脚已被配置为默认(输入)以外的其他引脚,则在尝试配置脚本时会收到警告.要禁用这些警告:

1
GPIO.setwarnings(False)

1.4 Setup up a channel(建立连接)

如果要用某个引脚,需要将与该引脚的通道设置为输入或输出.

将通道配置为输入:

1
GPIO.setup(channel, GPIO.IN)

其中channel是基于您指定的编号系统(BOARD或BCM)的通道编号。(下同)

将通道配置为输出:

1
GPIO.setup(channel, GPIO.OUT)

您还可以为输出通道指定初始值:

1
GPIO.setup(channel, GPIO.OUT, initial=GPIO.HIGH)

一次设置多个通道:

1
2
3
4
chan_list = [11,12]    # add as many channels as you want!(在这里添加任意多的引脚)
# you can tuples instead i.e.:
# chan_list = (11,12)
GPIO.setup(chan_list, GPIO.OUT)

1.5 Input(输入)

1
GPIO.input(channel)

这将返回0/GPIO.LOW/False 或 1/GPIO.HIGH/True

1.6 Output(输出)

将引脚设置为输出状态:

1
GPIO.output(channel, state)

state可以是0/GPIO.LOW/False 或 1/GPIO.HIGH/True.

1.7 Output to several channels(输出到多个通道)

您可以在同时设置多个引脚输出:

1
2
3
chan_list = [11,12]                             # also works with tuples
GPIO.output(chan_list, GPIO.LOW) # sets all to GPIO.LOW
GPIO.output(chan_list, (GPIO.HIGH, GPIO.LOW)) # sets first HIGH and second LOW

1.8 Cleanup(清理)

任何程序的最后,清理您使用过的所有资源是很好的做法。 使用RPi.GPIO也一样. 通过将所有已使用的通道返回到没有上拉/下拉的输入,可以避免因为短接引脚而导致的意外损坏RPi。 请注意,这只会清理脚本使用的GPIO通道。GPIO.cleanup()也会清除正在使用的引脚编号系统。

1.9 RPi Board Information and RPi.GPIO version(树莓派信息和RPi.GPIO的版本)

查看你的RPi的信息

1
GPIO.RPI_INFO

查看树莓派的版本

1
2
GPIO.RPI_INFO['P1_REVISION']
GPIO.RPI_REVISION (deprecated)

查看RPi.GPIO的版本

1
GPIO.VERSION

2. Inputs(输入)

在你的程序中有很多种方法获取GPIO口的输入,最简单的方式是在一个时间点检查输入.这就是”轮询”,如果您的程序在错误的时间读取值,则可能会错过输入.轮询是在循环中执行的,并且可能是处理器密集型的.获取GPIO输入的另一种方法是使用“中断”(边缘检测).边缘是指从HIGH到LOW(下降边缘)或LOW到HIGH(上升边缘)的转换名称.

2.1 上拉/下拉电阻

GPIO.BCM

​ 第二个编号系统是BCM号码。这是一种较低级别的工作方式 - 它指的是Broadcom SOC上的通道号码。您必须始终使用那个通道编号所对应的树莓派板上哪个引脚的图表。您的脚本程序可能会在Raspberry Pi板的硬件修订后而不能使用。

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×