导入模块
导入 RPi.GPIO 模块:
1 | import RPi.GPIO as GPIO |
这样做的好处是,你可以在后面的脚本中直接使用 GPIO 指代 RPI.GPIO 模块[^1]。
要想在导入模块的同时查看是否导入成功:
1 | try: |
针脚编号[^2]
在 RPi.GPIO
中,有两种对树莓派 IO 针脚的编号方式。第一种方式是使用 BOARD 编号系统。这种方法以树莓派电路板的 P1 头部开始计数。这种编号系统的好处是无论使用哪种版本的树莓派电路板,你的硬件总会正常工作。你不必重连线路或重写代码。
第二种编号系统是 BCM 编号。这是更接近底层的工作——它指代的是 Broadcom SOC 的通道编号。这迫使你总要研究通道编号对应的树莓派电路板针脚的对照表。你的脚本可能会不兼容不同版本的树莓派电路板。
声明你要用的编号系统(必须):
1 | GPIO.setmode(GPIO.BOARD) |
要查看设置了哪一种针脚编号系统(比如,在另一个 Python 模块中):
1 | mode = GPIO.getmode() |
mode 将会是 GPIO.BOARD
、GPIO.BCM
或 None
。
警告
有可能你的树莓派的 GPIO 同时运行多个脚本/电路。这样做会导致一个结果,如果 RPI.GPIO
检测到某个针脚被配置成和默认模式(输入)不同的情况,当你尝试配置脚本时,可能会收到警告。禁用这些警告:
1 | GPIO.setwarnings(False) |
配置一个通道
你需要把每一个正在使用的通道设置成输入或输出。把一个通道配置成输入:
1 | GPIO.setup(channel, GPIO.IN) |
(channel
是基于你所声明的标号系统(BOARD 或 BCM)的通道编号)。
你可以从 这里 找到更多关于设置输入通道的高级用法信息。
将一个通道配置成输出:
1 | GPIO.setup(channel, GPIO.OUT) |
(channel
是基于你所声明的标号系统(BOARD 或 BCM)的通道编号)。
你也可以给你的输出通道指定一个初始值:
1 | GPIO.setup(channel, GPIO.OUT, initial=GPIO.HIGH) |
配置多个通道
你可以一次性设置多个通道(0.5.8 及以后版本)。例如:
1 | chan_list = [11, 12] # 你想添加多少通道都成! |
输入
读取某个 GPIO 针脚的值:
1 | GPIO.input(channel) |
(channel
是基于你所声明的标号系统(BOARD 或 BCM)的通道编号)。返回的结果将会是 0
/ GPIO.LOW
/ False
或者 1
/ GPIO.HIGH
/ True
。
输出
设置某个 GPIO 针脚的输出状态:
1 | GPIO.output(channel, state) |
(channel
是基于你所声明的标号系统(BOARD 或 BCM)的通道编号)。
State 可以是 0
/ GPIO.LOW
/ False
或者 1
/ GPIO.HIGH
/ True
。
输出至多个通道
你可以一次性输出至多个通道(0.5.8 及以后版本)。例如:
1 | chan_list = [11,12] # 元组也成 |
清理
任何一个程序的末尾,清理掉任何一个你可能使用过的资源是一个好习惯。RPi.GPIO
也不例外。在不插拔连接线的情况下把你用完的通道复位为输入模式,可以避免因针脚短路而损坏你的树莓派。注意这只会清理掉你的脚本使用过的通道。注意 GPIO.cleanup()
也会清理掉使用中的针脚技术系统。
在你的脚本末尾进行清理操作:
1 | GPIO.cleanup() |
有可能在你的程序退出时,并不希望清理掉所有通道,而是留一些保持配置工作状态。你可以清理单个通道,一个列表或元组的通道:
1 | GPIO.cleanup(channel) |
树莓派电路板信息和 RPi.GPIO
版本
查看你的树莓派信息:
1 | GPIO.RPI_INFO |
查看树莓派电路板的版本:
1 | GPIO.RPI_INFO['P1_REVISION'] |
查看 RPi.GPIO
的版本:
1 | GPIO.VERSION |
译注
[^1]: 貌似使用 from RPi import GPIO
的形式导入也能达到同样的效果
[^2]: 更详细的接口信息,参见 https://pinout.xyz/