1.树莓派引脚分类
2.树莓派引脚编码
3.窗口查看引脚编号
1、在终端输入指令:pinout
2、使用树莓派输入gpio readall命令查看pin状态
sudo apt install git-core
sudo git clone https://github.com/WiringPi/WiringPi
cd WiringPi/
sudo ./build
gpio -v
gpio readall
4.使用RPi.GPIO模块
RPi.GPIO是Python的一个模块,树莓派默认已经安装了该模块。本节详细介绍如何使用Python的RPi.GPIO模块控制GPIO。
1、导入RPi.GPIO模块
import RPi.GPIO as GPIO
2、设置指定模式(强制)管脚编号
GPIO.setmode(GPIO.BOARD) #物理引脚编码
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.input(channel) #返回 GPIO.LOW 或 GPIO.HIGH。
要设置配置为输出的引脚的值:
GPIO.output(channel, state)
其中状态可以是 GPIO.LOW 或 GPIO.HIGH。
还可以输出到通道列表或元组:
channels = [18, 12, 13]
5、清理所有使用的通道
在程序结束时,最好清理通道,以便将所有引脚设置为默认状态。
GPIO.cleanup()
二、树莓派GPIO口控制双色LED灯
1.简介
双色LED灯(双基色 LED灯),是指模块只能显示2种颜色,一般是红色和绿色,可以有三种状态:灭、颜色1亮、颜色2亮;根据颜色组合的不同,分为红蓝双色,黄蓝双色,红绿双色等等。双色 LED常于指示状态:比如红色表示设备异常,绿色表示正常。
2.组件
1、树莓派主板*1
2、树莓派电源*13、40P软排线*14、双色LED模块*15、面包板*16、杜邦线、跳线若干
3.实验原理
将引脚S(绿色)和中间管脚R(红色)连接到树莓派的GPO 接口上,对树莓派进行编程控制,将LED的颜色从红色变为绿色,然后使用PWM混合其他颜色。
4.实验步骤
连接电路。
树莓派 | 面包板 | 双色LED模块 |
---|---|---|
GPIO1 | GPIO18 | G(S) |
GPIO0 | GPIO17 | R(中间) |
GND | GND | GND |
5、代码实现
WM的频率:P决定了输出的数字信号on (1) 和 off(0 )的切换速度,频率越高,切换就越快。
占空比:指一串理想脉冲序列中,正脉冲的持续时间与脉冲总周期的比值,用来调节灯的亮度。
import RPi.GPIO as GPIO
import time
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)关闭LED
p_R = GPIO.PWM(makerobo_pins[0], 2000) # 设置频率为2KHz
p_G = GPIO.PWM(makerobo_pins[1], 2000) # 设置频率为2KHz
# 初始化占空比为0(led关闭)
p_R.start(0)
p_G.start(0)
def makerobo_pwm_map(x, in_min, in_max, out_min, out_max):
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min
def makerobo_set_Color(col): # 例如:col = 0x1122
R_val = col >> 8
G_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) # 改变占空比
# 调用循环函数
def makerobo_loop():
while True:
for col in colors:
makerobo_set_Color(col)
time.sleep(0.5)
# 释放资源
def makerobo_destroy():
p_G.stop()
p_R.stop()
GPIO.output(makerobo_pins, GPIO.LOW) # 关闭所有LED
GPIO.cleanup() # 释放资源
# 程序入口
if __name__ == "__main__":
try:
makerobo_loop() # 调用循环函数
except KeyboardInterrupt: # 当按下Ctrl+C时,将执行destroy()子程序。
makerobo_destroy() # 释放资源
引文:树莓派学习笔记—GPIO口控制双色LED灯 - 知乎