RPI.GPIO从入门到入土
RPi.GPIO(下文简称GPIO)中的方法:
1 | ''' |
RPi.GPIO使用从入门到入土
本文是根据RPi.GPIO官方文档写的,由于原文档为英文,个人水平有限无法做到翻译的信达雅,恳请各位谅解!
1. Basic Usage(基本用法)
1.1 导入RPi.GPIO
两种导入方式:
- 直接导入:
1 | import RPi.GPIO as GPIO |
通过这种方式,您可以为RPi.GPIO设置别名GPIO
- 导入模块并检查是否导入成功:
1 | try: |
1.2 Pin numbering(引脚编号)
RPi.GPIO的两种对IO引脚的编号方法:
BOARD编号系统. 这是指Raspberry Pi板P1头上的引脚编号. 使用此编号系统的优势在于无论RPi的电路板是哪个版本,都无需更改代码.
BCM编号. 这是一种较低级别的工作方式.它指的是Broadcom SOC上的通道号. 您必须始终使用哪个通道编号指向RPi板上哪个引脚的图表. 您的脚本可能会在Raspberry Pi板的修订版之间中断.
尽管BOARD具有更好的适用性,但是还是很多人使用BCM,因此本文也使用BCM
指定两种引脚编号的方式为:
1 | GPIO.setmode(GPIO.BOARD) |
查看目前的引脚编号模式:
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 | chan_list = [11,12] # add as many channels as you want!(在这里添加任意多的引脚) |
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 | chan_list = [11,12] # also works with tuples |
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 | GPIO.RPI_INFO['P1_REVISION'] |
查看RPi.GPIO的版本
1 | GPIO.VERSION |
2. Inputs(输入)
在你的程序中有很多种方法获取GPIO口的输入,最简单的方式是在一个时间点检查输入.这就是”轮询”,如果您的程序在错误的时间读取值,则可能会错过输入.轮询是在循环中执行的,并且可能是处理器密集型的.获取GPIO输入的另一种方法是使用“中断”(边缘检测).边缘是指从HIGH到LOW(下降边缘)或LOW到HIGH(上升边缘)的转换名称.
2.1 上拉/下拉电阻
GPIO.BCM
第二个编号系统是BCM号码。这是一种较低级别的工作方式 - 它指的是Broadcom SOC上的通道号码。您必须始终使用那个通道编号所对应的树莓派板上哪个引脚的图表。您的脚本程序可能会在Raspberry Pi板的硬件修订后而不能使用。