树莓派与双色Led模块的那些事儿


一、简介

  为了实现后续树莓派接收霍尔传感器信号进而实现亮灯,而实现的一个准备工作,强烈建议大家以后买元器件尽量买双份,因为有时候店铺发的器件是坏的,而且还不一定能正确提供对应的资料,重新补发,又需要耽误一两天的时间,所以资金充足的情况下,强烈建议直接买双份。

二、硬件准备

1、树莓派4B * 1

2、KY-011双色LED模块 * 2

   下图就是我买到的坏掉了ky-011,ky-011分为红黄两色,这个坏掉的红灯不亮了,黄灯还是可以正常使用的。
Ky-011

接线引脚

  • (图中左侧)标注‘-’的管脚接GND,中间的管脚接数字IO,(图中右侧)标注"S"的管脚也接数字IO
  • 当中间管脚为高电平,则LED亮灯为红色(R)。
  • 当S管脚为高电平,则LED亮灯为黄色(Y)。
Raspberry PiKY-011
Pin 6GND
Pin 11Y
Pin 13R

三、软件准备

# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import time
# BOARD编号方式,基于插座引脚编号
GPIO.setmode(GPIO.BOARD)
# 输出模式
GPIO.setup(11, GPIO.OUT)
GPIO.setup(13, GPIO.OUT)


while True:
	//熄灭
    GPIO.output(11, GPIO.LOW)
    GPIO.output(13, GPIO.LOW)
    time.sleep(1)
    //黄灯亮
    GPIO.output(11, GPIO.HIGH)
    GPIO.output(13, GPIO.LOW)
    time.sleep(1)
    //红灯亮
    GPIO.output(11, GPIO.LOW)
    GPIO.output(13, GPIO.HIGH)
    time.sleep(1)
	//红灯亮 + 黄灯亮 (形成混合色)
    GPIO.output(11, GPIO.HIGH)
    GPIO.output(13, GPIO.HIGH)
    
    
GPIO.cleanup()

实验结果:

黄红交替,自行脑补
在这里插入图片描述

四、准备知识

1、常见的双色Led模块

  常见的双色led模块一般是这种,网上的大部分资料也都是这一种,红绿双色,中间接地。
创乐博双色Led

原理图
配合开关接线,实现开关灯实验。
在这里插入图片描述

#!/usr/bin/env python
import RPi.GPIO as GPIO

BtnPin = 11
Gpin   = 12
Rpin   = 13

def setup():
	GPIO.setmode(GPIO.BOARD)       # Numbers GPIOs by physical location
	GPIO.setup(Gpin, GPIO.OUT)     # Set Green Led Pin mode to output
	GPIO.setup(Rpin, GPIO.OUT)     # Set Red Led Pin mode to output
	GPIO.setup(BtnPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)    # Set BtnPin's mode is input, and pull up to high level(3.3V)
	GPIO.add_event_detect(BtnPin, GPIO.BOTH, callback=detect, bouncetime=200)

def Led(x):
	if x == 0:
		GPIO.output(Rpin, 1)
		GPIO.output(Gpin, 0)
	if x == 1:
		GPIO.output(Rpin, 0)
		GPIO.output(Gpin, 1)

def Print(x):
	if x == 0:
		print '    ***********************'
		print '    *   Button Pressed!   *'
		print '    ***********************'

def detect(chn):
	Led(GPIO.input(BtnPin))
	Print(GPIO.input(BtnPin))

def loop():
	while True:
		pass

def destroy():
	GPIO.output(Gpin, GPIO.HIGH)       # Green led off
	GPIO.output(Rpin, GPIO.HIGH)       # Red led off
	GPIO.cleanup()                     # Release resource

if __name__ == '__main__':     # Program start from here
	setup()
	try:
		loop()
	except KeyboardInterrupt:  # When 'Ctrl+C' is pressed, the child program destroy() will be  executed.
		destroy()


2、使用 RPi.GPIO 模块的输出(Output)的基础知识

1、首先对 RPi.GPIO 进行设置(根据这里的描述)

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12, GPIO.OUT)

2、设置某个输出针脚状态为高电平:

GPIO.output(12, GPIO.HIGH)
 # 或者
GPIO.output(12, 1)
 # 或者
GPIO.output(12, True)

3、设置某个输出针脚状态为低电平:

GPIO.output(12, GPIO.LOW)
 # 或者
GPIO.output(12, 0)
 # 或者
GPIO.output(12, False)

4、程序结束后进行清理

GPIO.cleanup()

注意,您可以读取使用 input() 函数设置的输出通道的当前状态。例如对输出进行切换:

GPIO.output(12, not GPIO.input(12))

3、GPIO各种操作集合

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM) #选择GPIO编码格式 BCM
channel = 1
# 1. 设置GPIO模式
GPIO.setup(channel,GPIO.IN)  #输入模式
GPIO.setup(channel,GPIO.OUT) #输出模式
GPIO.setup(channel,GPIO.OUT,initial=GPIO.HIGH) #为输出的引脚设置默认值

# 2. 设置GPIO输出状态
chan_list=[11,12]           #双倍同时输出快乐
GPIO.output(chan_list,GPIO.LOW)             #同时输出低电平
GPIO.output(chan_list,(GPIO.HIGH,GPIO.LOW)) #分别输出不同电平
GPIO.output(12,not GPIO.input(12))          #读取一个输出引脚的状态并将其作为输出值

# 3. 读取GPIO当前状态
GPIO.input(channel)        #低电平返回0/GPIO.LOW/False,高电平返回1/GPIO.HIGH/True。
GPIO.setup(channel,GPIO.IN,pull_up_down = GPIO.PUD_UP)  #如果输入引脚处于悬空状态  上拉解决
GPIO.setup(channel,GPIO.IN,pull_up_down = GPIO.PUD_DOWN)#如果输入引脚处于悬空状态  下拉解决

# 4. 轮询读取Gpio
while GPIO.input(channel)==GPIO.LOW:
    time.sleep(0.01)

# 5. 边缘阻塞检测Gpio(会阻塞直到检测到边缘响应,轮询)
# wait_for_edge()被用于阻止程序的继续执行,直到检测到一个边沿。
# GPIO.RISING、GPIO.FALLING、GPIO.BOTH 对边缘进行检测。
channel = GPIO.wait_for_edge(channel, GPIO.RISING, timeout=5000)
if channel is None:
    print('Time out occurred')
else:
    print('Edgedetectedonchannel',channel)

# 6. 线程回调边缘检测GPIO
# event_detected() 函数 event_detected() 函数被设计用于循环中有其它东西时使用,但不同于轮询的是,它不会错过当 CPU 忙于处理其它事物时输入状态的改变。
#单个回调
def my_callback(channel):
    print('这是一个边缘事件回调函数!')
    print('在通道 %s 上进行边缘检测' % channel)
    print('该程序与您的主程序运行在不同的进程中')
GPIO.add_event_detect(channel, GPIO.RISING, callback=my_callback)  # 在通道上添加上升临界值检测

#多个回调
def my_callback_one(channel):
    print('回调 1')
def my_callback_two(channel):
    print('回调 2')
GPIO.add_event_detect(channel, GPIO.RISING)
GPIO.add_event_callback(channel, my_callback_one)
GPIO.add_event_callback(channel, my_callback_two)

# 在通道上添加上升临界值检测,忽略由于开关抖动引起的小于 200ms 的边缘操作
GPIO.add_event_detect(channel, GPIO.RISING, callback=my_callback, bouncetime=200)
#或
GPIO.add_event_callback(channel, my_callback, bouncetime=200)

# 取消线程检测
GPIO.remove_event_detect(channel)

你好!关于树莓派实验双色LED灯,你需要准备以下材料和步骤: 材料: 1. 树莓派(任意型号) 2. 双色LED灯 3. 面包板 4. 杜邦线(公对公和公对母) 步骤: 1. 将双色LED灯插入面包板中,确保正极(长脚)和负极(短脚)分别连接到面包板的不同行。 2. 使用杜邦线将树莓派的GPIO引脚与双色LED灯连接起来。具体连接方式如下: - 将树莓派的GPIO 17引脚连接到双色LED灯的正极。 - 将树莓派的GPIO 27引脚连接到双色LED灯的负极。 3. 确保树莓派已连接到电源,并启动。 4. 在树莓派上运行Python编程环境,并创建一个新的Python文件。 5. 在Python文件中使用RPi.GPIO库控制GPIO引脚。如果你还没有安装RPi.GPIO库,可以使用以下命令进行安装: ``` sudo pip install RPi.GPIO ``` 6. 在Python文件中编写代码以控制GPIO引脚来控制双色LED灯。以下是一个示例代码: ```python import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setup(17, GPIO.OUT) GPIO.setup(27, GPIO.OUT) def red_on(): GPIO.output(17, GPIO.HIGH) GPIO.output(27, GPIO.LOW) def green_on(): GPIO.output(17, GPIO.LOW) GPIO.output(27, GPIO.HIGH) def yellow_on(): GPIO.output(17, GPIO.HIGH) GPIO.output(27, GPIO.HIGH) def all_off(): GPIO.output(17, GPIO.LOW) GPIO.output(27, GPIO.LOW) try: while True: red_on() time.sleep(1) green_on() time.sleep(1) yellow_on() time.sleep(1) all_off() time.sleep(1) except KeyboardInterrupt: GPIO.cleanup() ``` 这段代码会使双色LED灯在红色、绿色和黄色之间交替闪烁。 7. 保存并运行Python文件,观察双色LED灯的状态变化。 希望以上步骤对你有所帮助!如果还有其他问题,请随时提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TomLazy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值