一起玩转树莓派(2)——从双色LED灯开始(二)

简介: 一起玩转树莓派(2)——从双色LED灯开始

三、了解双色LED灯并接线

双色LED灯构造非常简单,顾名思义,其可以发出两种颜色的光,其内部封装了两个发光二极管。双色LED分为共阴型和共阳型,两个发光二极管共有3个引脚,因此其中一个引脚是共用的。对于共阴型的,两个发光二极管的阴极连在一起。对于共阳型的,两个二极管的阳极连在一起。我们这次使用的将是共阴极的双色LED灯,如下图所示:

image.png

其内部工作原理电路图如下,也非常好理解:

image.png

如上图所示,可以看到两个二极管的阴极是共用,我们将其公共引脚接地即可,两个阳极是由两个开关控制,即LED等芯片上的另外两个引脚,我们只需要通过GPIO控制将对应的引脚加高电平,即可将二极管点亮。

开始接线

我们已经了解了双色LED等的工作原理,其有3个引脚,我们将引脚“-”接地,S端的引脚接扩展板G22用来控制红灯,中间的引脚接G27用来控制绿灯。接线情况如下图所示:

image.png

现在,准备工作大功告成,开始我们的编码工作吧。

四、编写红绿灯控制程序

目前为止,我们已经做了足够多的准备工作,你一定已经迫不及待的想要开始编码了,我们先把完整的代码奉上:

#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灯的开关和闪烁了,如下图所示:

image.png

温馨提示:如果你使用的是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)

五、休息一下

好了,第一个简单的树莓派实践到此要告一段落了,我相信你一定有些收获,发挥你的创新与动手能力,尝试用树莓派做更多有趣的事情吧。

目录
相关文章
|
Android开发
【Android App】蓝牙的设备配对、音频传输、点对点通信的讲解及实战(附源码和演示 超详细)
【Android App】蓝牙的设备配对、音频传输、点对点通信的讲解及实战(附源码和演示 超详细)
3160 1
|
算法
VLSM子网划分
VLSM子网划分
371 0
|
Web App开发 移动开发 监控
100多个经典常用的网站模板大全实例演示和下载
推荐模板 /Template 11-07 二当家的网站后台模板源码 08-29 黑色技术微博客响应式模板 08-22 html5绿色通用的APP页面下载 08-07 绿色大...
8172 0
|
7月前
|
域名解析 缓存 网络协议
零成本提速秘籍:手把手教你用Cloudflare为网站装上火箭引擎
本文介绍如何通过Cloudflare为WordPress个人博客加速,提升网站加载速度与安全性。从注册Cloudflare账号、添加域名到配置缓存、SSL/TLS及性能优化,详细步骤助您零基础上手。优化后使用WebPageTest验证效果,让博客加载更快、内容更安全,远离恶意侵扰,为访客带来流畅体验。
223 0
零成本提速秘籍:手把手教你用Cloudflare为网站装上火箭引擎
|
分布式计算 负载均衡 监控
p2p网络架构模型
P2P(Peer-to-Peer)模式是一种网络架构模型,在这种模型中,每个节点(peer)既是服务的提供者也是服务的消费者。这意味着每个参与的节点都可以直接与其他节点通信,并且可以相互提供资源和服务,例如文件共享、流媒体传输等。
540 6
|
调度 开发者
【Freertos基础入门】2个Freertos的Delay函数
【Freertos基础入门】2个Freertos的Delay函数
1874 1
|
API 定位技术
天气预报1天-中国气象局-IP查询版免费API接口教程
此接口基于IP地址自动判断并提供该地区当日的天气信息,数据源自中国气象局。支持POST/GET请求,需提供用户ID和KEY,可选输入IP地址,默认返回北京天气。返回参数包括天气详情、地理位置及IP等。示例请求与响应详见文档。
|
Ubuntu 安全 网络协议
ubuntu22.04防火墙策略
在Ubuntu 22.04中,配置防火墙策略是保障系统安全的关键。UFW提供了简便的界面,适合大多数用户,而iptables则提供了更为强大的功能,适合高级用户和复杂环境。通过合理设计防火墙策略,可以有效防止未经授权的访问,提升系统的安全性和稳定性。无论是通过UFW还是iptables,定期审查和更新防火墙规则都是必不可少的,以应对不断变化的安全威胁。
575 3
|
数据可视化 Linux 网络安全
如何使用服务器训练模型
本文介绍了如何使用服务器训练模型,包括获取服务器、访问服务器、上传文件、配置环境、训练模型和下载模型等步骤。适合没有GPU或不熟悉Linux服务器的用户。通过MobaXterm工具连接服务器,使用Conda管理环境,确保训练过程顺利进行。
1771 0
如何使用服务器训练模型
|
传感器 物联网 大数据
物联网(IoT)技术与应用:塑造未来的智能化生活
【5月更文挑战第1天】物联网(IoT)技术整合传感器、嵌入式系统、云计算与大数据,连接智能设备,重塑生活与工作方式。应用涵盖智能家居、工业自动化、农业、智能城市及医疗健康,提升效率与便利性。然而,数据安全、设备兼容性及网络基础设施仍是挑战。随着5G和AI进步,IoT将在更多领域发挥潜力,驱动社会智能化转型,需关注技术挑战并加强创新。
1604 4