上一篇文章向大家介绍树莓派的硬件部分、安装操作系统及基础设置。这篇文章将介绍树莓派的强大的开发功能口——GPIO,以及利用GPIO口点亮双色LED灯(树莓派的第一个基本实验)。具有一定的参考价值,需要的朋友可以参考一下。
一、从了解GPIO开始
GPIO全称:通用型输入输出端口(General-purpose input/output),其引脚能够供使用者自由的进行使用,可以对其进行输入,也可以读取其数据进行数据输出,这些引脚的输入或输出都会关联到某个寄存器,寄存器的值控制引脚的电平高低。
树莓派引脚分类
- 电源引脚:5v,3.3v,GND(Ground)。
- 常规GPIO控制引脚:可以通过编写程序控制这些引脚的高低电平。
- 特殊GPIO通讯引脚: SPI通讯,12C通讯,TxD/RxD串口通讯。
树莓派引脚编码 - 功能物理引脚:这种编码方式是按照树莓派主板上引脚排针编号。分别对应1~40号排针。从左到右,从上到下:左边奇数,右边偶数。
- BCM:这种方式是参考 Broadcom SOC的通道编号侧重CPU寄存器。使用Python控制树莓派引脚时,使用的是WiringPi编码。
- WiringPi编码:WiringPi编码,把扩展GPIO端口从0开始编码。使用C语言控制树莓派引脚时,使用的是WiringPi编码。
窗口查看引脚编号
1、在终端输入指令:pinout
2、使用树莓派输入gpio readall命令查看pin状态
- 输入以下命令安装Git:
sudoapt install git-core
- 输入以下命令,将 WiringPi 文件下载到树莓派系统的当前目录。
sudogit clone https://github.com/WiringPi/WiringPi
- 耐心等待其安装完成。下载完成后,我们可以在当前目录下看到一个WiringPi文件夹。如下所示。
- 输入以下命令进入 WiringPi 文件夹目录。
cdWiringPi/
- 输入以下命令安装 WiringPi。
sudo./build
- 耐心等待它的安装完成。当我们看到下面的界面没有任何错误时,就意味着安装完成了。
- 输入以下命令查看gpio的版本。
gpio-v
- 最后,我们可以查看树莓派各个管脚的状态,输入指令:
gpioreadall
使用RPi.GPIO模块
RPi.GPIO是Python的一个模块,树莓派默认已经安装了该模块。本节详细介绍如何使用Python的RPi.GPIO模块控制GPIO。
1、导入RPi.GPIO模块
importRPi.GPIOasGPIO
2、设置指定模式(强制)管脚编号
GPIO.setmode(GPIO.BOARD) #物理引脚编码GPIO.setmode(GPIO.BCM)#BCM编码
3、设置禁用警告
如果GRIO检测到一个引脚已经被设置成了非默认值,可以使用setwarnings()关闭警告信息。
GPIO.setwarnings(False)
4、设置引脚输入和输出
要将通道配置为输入:
GPIO.setup(channel, GPIO.IN)
要将通道设置为输出,请调用:
GPIO.setup(channel, GPIO.OUT)
为输出通道指定一个初始值:
GPIO.setup(channel, GPIO.OUT, initial=GPIO.HIGH)
将通道设置为输出时,同时设置多个通道:
channels= [18,12,13] GPIO.setup(channels, GPIO.OUT)
要读取通道的值:
GPIO.input(channel)#返回 GPIO.LOW 或 GPIO.HIGH。
要设置配置为输出的引脚的值:
GPIO.output(channel, state)
其中状态可以是 GPIO.LOW 或 GPIO.HIGH。
还可以输出到通道列表或元组:
channels= [18,12,13] GPIO.output(channels, GPIO.HIGH)#orGPIO.LOWGPIO.output(channel, (GPIO.LOW, GPIO.HIGH, GPIO.HIGH))
5、清理所有使用的通道
在程序结束时,最好清理通道,以便将所有引脚设置为默认状态。
GPIO.cleanup()
二、实验——树莓派GPIO口控制双色LED灯
1、简介
双色LED灯(双基色 LED灯),是指模块只能显示2种颜色,一般是红色和绿色,可以有三种状态:灭、颜色1亮、颜色2亮;根据颜色组合的不同,分为红蓝双色,黄蓝双色,红绿双色等等。双色 LED常于指示状态:比如红色表示设备异常,绿色表示正常。
2、组件
1、树莓派主板*1
2、树莓派电源*1
3、40P软排线*1
4、双色LED模块*1
5、面包板*1
6、杜邦线、跳线若干
3、实验原理
将引脚S(绿色)和中间管脚R(红色)连接到树莓派的GPO接口上,对树莓派进行编程控制,将LED的颜色从红色变为绿色,然后使用PWM混合其他颜色。
该模块的原理图如下所示:
4、实验步骤
连接电路。将树莓派通过T型转接板连接到面包板,树莓派GPIO 11即T型转接板GPIO 17,“红白线”连接双色LED模块R端子;树莓派GPIO 12 即T型转接板GPIO 18,“绿白线”连接双色LED模块G端子;树莓派GND即T型转接板GND,“黑线”连接双色LED模块GND端子。
树莓派 | 面包板 | 双色LED模块 |
---|---|---|
GPIO1 | GPIO18 | G(S) |
GPIO0 | GPIO17 | R(中间) |
GND | GND | GND |
5、代码实现
WM的频率:P决定了输出的数字信号on (1) 和 off(0 )的切换速度,频率越高,切换就越快。
占空比:指一串理想脉冲序列中,正脉冲的持续时间与脉冲总周期的比值,用来调节灯的亮度。
importRPi.GPIOasGPIOimporttime colors = [0xFF00,0x00FF,0x0FF0,0xF00F] makerobo_pins = (11,12)# PIN管脚字典GPIO.setmode(GPIO.BOARD)# 采用实际的物理管脚给GPIO口GPIO.setwarnings(False)# 去除GPIO口警告GPIO.setup(makerobo_pins, GPIO.OUT)# 设置Pin模式为输出模式GPIO.output(makerobo_pins, GPIO.LOW)# 设置Pin管脚为低电平(0V)关闭LEDp_R = GPIO.PWM(makerobo_pins[0],2000)# 设置频率为2KHzp_G = GPIO.PWM(makerobo_pins[1],2000)# 设置频率为2KHz# 初始化占空比为0(led关闭)p_R.start(0) p_G.start(0)defmakerobo_pwm_map(x, in_min, in_max, out_min, out_max):return(x - in_min) * (out_max - out_min) / (in_max - in_min) + out_mindefmakerobo_set_Color(col):# 例如:col = 0x1122R_val = col > >8G_val = col &0x00FF# 把0-255的范围同比例缩小到0-100之间R_val = makerobo_pwm_map(R_val,0,255,0,100) G_val = makerobo_pwm_map(G_val,0,255,0,100) p_R.ChangeDutyCycle(R_val)# 改变占空比p_G.ChangeDutyCycle(G_val)# 改变占空比# 调用循环函数defmakerobo_loop():whileTrue:forcolincolors: makerobo_set_Color(col) time.sleep(0.5)# 释放资源defmakerobo_destroy():p_G.stop() p_R.stop() GPIO.output(makerobo_pins, GPIO.LOW)# 关闭所有LEDGPIO.cleanup()# 释放资源# 程序入口if__name__ =="__main__":try: makerobo_loop()# 调用循环函数exceptKeyboardInterrupt:# 当按下Ctrl+C时,将执行destroy()子程序。makerobo_destroy()# 释放资源