🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
GPIO(General Purpose I/O Ports)意思是通用输入/输出端口, 通俗的说就是一些引脚,可以通过它们输出高低电平或者通过它们读入引脚的状态(高电平/低电平)。 树莓派上有40根排针,引脚编号按照物理位置来编号,最靠近角上那一根引脚为2号引脚。旁边是1号引脚。 <p id="color" style="color:purple" align="center">图 树莓派引脚规则示意图</p> 那么这40根引脚具体的用途和定义是什么呢,可以参照下图(树莓派的引脚图)。 <div align="center"><img src="images/screenshot_1559124463574.png"/></div> <b>注意:</b> 树莓派我们编程一般直接用Python,针对GPIO编程,Python提供了第三方库,常用的是RPI.GPIO。 ## 安装RPI.GPIO库 终端输入命令 ``` sudo apt-get -y python-pip #安装pip sudo pip install rpi.gpio #安装RPI.GPIO ``` 树莓派不同版本引脚可能有差别,可以使用命令 ``` gpio readall ``` 打印出所有管脚。 <div align="center"><img src="images/screenshot_1559199732757.png"/></div> ## 控制GPIO编程 ### 导入RPi.GPIO库 可以用下面的代码导入RPi.GPIO模块 ``` python import PRi.GPIO as GPIO ``` 导入之后,就可以使用GPIO模块的函数了。如果想检查模块是否导入成功,也可以这样写: ```py try: import RPi.GPIO as GPIO exceptRuntimeError: print("error") ``` ### 针脚编号 在RPi.GPIO中,同时支持树莓派上的两种GPIO引脚编号。第一种编号是BOARD编号,这和树莓派电路板上的屋里引脚编号相对应。第二种编号是BCM规则,更底层的工作方式,需要保证主板上的针脚与图表上标注的通道编号相对应。 指定使用的针脚编号 ```python GPIO.setmode(GPIO.BOARD) ``` 或 ```python GPIO.setmode(GPIO.BCM) ``` ### 配置通道 需要为每个用于输入/输出的针脚配置通道。 配置某一针脚为输入: ```python GPIO.setup(channel, GPIO.IN) ``` <b>注意:</b>channel是通道编号,取决于你指定的是BOARD还是BCM编号。 例如,当你硬件接到了树莓派的11号引脚(物理引脚),如果你指定BOARD编号,则channel是11;如果指定BCM编号,则channel是17。<br> 配置某一针脚为输出: ```python GPIO.setup(channel, GPIO.OUT) ``` channel是通道编号,取决于你指定的是BOARD还是BCM编号。 另外,还可以指定输出通道的初始值: ```python GPIO.setup(channel, GPIO.OUT, initial=GPIO.HIGH) #初始值为高电平 ``` 或 ```python GPIO.setup(channel, GPIO.OUT, initial=GPIO.LOW) #初始值为低电平 ``` ### 输入 读取GPIO针脚的值: ```python GPIO.input(channel) ``` channel是通道编号,取决于你指定的是BOARD还是BCM编号。 GPIO.input()读出的值为0/GPIO.LOW/False或1/GPIO.HIGH/True。 ### 输出 设置GPIO针脚的输出: ```python GPIO.output(channel, state) ``` channel是通道编号,基于你指定的是BOARD还是BCM编号。state取值为0/GPIO.LOW或1/GPO.HIGH。 ## 清理 程序结束后,设置所有使用的通道状态为输入,可以避免由于短路意外损坏树莓派针脚。 <b>注意:</b>该操作仅会清除脚本使用过的GPIO通道。 在脚本结束后,进行清理: ```python GPIO.cleanup() ```