三、了解双色LED灯并接线
双色LED灯构造非常简单,顾名思义,其可以发出两种颜色的光,其内部封装了两个发光二极管。双色LED分为共阴型和共阳型,两个发光二极管共有3个引脚,因此其中一个引脚是共用的。对于共阴型的,两个发光二极管的阴极连在一起。对于共阳型的,两个二极管的阳极连在一起。我们这次使用的将是共阴极的双色LED灯,如下图所示:
其内部工作原理电路图如下,也非常好理解:
如上图所示,可以看到两个二极管的阴极是共用,我们将其公共引脚接地即可,两个阳极是由两个开关控制,即LED等芯片上的另外两个引脚,我们只需要通过GPIO控制将对应的引脚加高电平,即可将二极管点亮。
开始接线
我们已经了解了双色LED等的工作原理,其有3个引脚,我们将引脚“-”接地,S端的引脚接扩展板G22用来控制红灯,中间的引脚接G27用来控制绿灯。接线情况如下图所示:
现在,准备工作大功告成,开始我们的编码工作吧。
四、编写红绿灯控制程序
目前为止,我们已经做了足够多的准备工作,你一定已经迫不及待的想要开始编码了,我们先把完整的代码奉上:
#coding:utf-8 # 导入UI模块 import tkinter as Tkinter # 导入GPIO控制薄块 import RPi.GPIO as GPIO # 定时器模块 import threading # 主页面设置 top = Tkinter.Tk() top.geometry('500x300') top.title("双色LED灯控制器") l = Tkinter.Label(top, text='欢迎使用双色LED灯控制器', bg='green', font=('Arial', 18), width=30, height=2) l.pack() # 定义引脚 pins = {0:13,1:15} # 设置使用的引脚编码模式 GPIO.setmode(GPIO.BOARD) # 设置隐藏警告 GPIO.setwarnings(False) # 初始化物理引脚 13 和 15 GPIO.setup(pins[0],GPIO.OUT) GPIO.setup(pins[1],GPIO.OUT) # 定义全局字段 用来处理闪烁功能 # f:是否闪烁 l:下次点亮红灯或绿灯 f = False l = False # 控制红灯亮 def redClick(): global f f = False GPIO.output(pins[0],GPIO.HIGH) GPIO.output(pins[1],GPIO.LOW) # 控制绿灯亮 def greenClick(): global f f = False GPIO.output(pins[0],GPIO.LOW) GPIO.output(pins[1],GPIO.HIGH) # 退出程序 def stopClick(): global f f = False GPIO.output(pins[0],GPIO.LOW) GPIO.output(pins[1],GPIO.LOW) GPIO.cleanup() exit() # 循环闪烁 def loop(): global f global timer global l if f == False: return timer = threading.Timer(2,loop) timer.start() if l: GPIO.output(pins[0],GPIO.HIGH) GPIO.output(pins[1],GPIO.LOW) else: GPIO.output(pins[0],GPIO.LOW) GPIO.output(pins[1],GPIO.HIGH) # 转换下次闪烁的颜色 l = not l # 定义全局定时器 timer = threading.Timer(2, loop) # 开始进行闪烁 def flckerClick(): global f global timer f = True timer = threading.Timer(2,loop) timer.start() # UI上的按钮布局 redButton = Tkinter.Button(top, text="红灯停", height='3', command=redClick) redButton.pack() greenButton = Tkinter.Button(top, text="绿灯行", height='3', command=greenClick) greenButton.pack() flckerButton = Tkinter.Button(top, text="闪烁请注意", height='3', command=flckerClick) flckerButton.pack() stopButton = Tkinter.Button(top, text="关闭", height='3', command=stopClick) stopButton.pack() # 进入消息循环 top.mainloop()
在树莓派上运行上面的代码,你现在应该已经可以灵活的控制双色LED灯的开关和闪烁了,如下图所示:
温馨提示:如果你使用的是Python3.x版本,可能需要用如下的方式引入tkinter:
import Tkinter as Tkinter
Tkinter是Python内置的一个UI框架,我们这里不做过多介绍,我们将重点放在RPi.GPIO模块的使用。
RPi.GPIO能够帮助我们方便的控制树莓派的GPIO引脚。在进行树莓派编程时,如果使用GPIO库,首先需要设置要使用的编码方式:
GPIO.setmode(GPIO.BOARD)
GPIO.BOARD将设置使用物理编码模式,GPIO.BCM将设置使用BCM编码模式。
在使用某个引脚之前,我们需要对其进行初始化,初始化时,可以将引脚设置成GPIO.OUT也可以设置为GPIO.IN,OUT表示我们要将其作为输出引脚使用,IN表示我们要将其作为输入引脚使用。
最后,当我们停止使用时,要记得调用如下方法进行资源清理:
GPIO.cleanup(channel)
五、休息一下
好了,第一个简单的树莓派实践到此要告一段落了,我相信你一定有些收获,发挥你的创新与动手能力,尝试用树莓派做更多有趣的事情吧。