0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于树莓派点亮RGB三基色LED灯

CHANBAEK 来源:容里与良鹿 作者:张凯 2023-07-04 11:34 次阅读

上一篇实现了树莓派的第一个基础实验——点亮双色LED灯,并了解了树莓派GPIO的基本用法。如果你已经成功完成过树莓派双色LED灯实验,并且对深入树莓派玩法有更多的兴趣的话,那么我们进一步尝试点亮一个更加绚丽的LED灯:RGB三基色LED灯。

一、介绍

RGB-LED模块可以发出各种颜色的光。红色,绿色和蓝色的三个LED被封装到透明或半透明塑料外壳中,并带有四个引脚。红色,绿色和蓝色三原色可以按照亮度混合并组合各种颜色,因此可以通过控制电路使RGB-LED发出彩色光。

图片

二、组件

Raspberry Pi 4b主板*1

树莓派电源*1

40P软排线*1

RGB-LED模块*1

面包板*1

跳线若干

图片

三、实验原理

在本实验中,我们将使用PWM技术来控制RGB的亮度。

脉冲宽度调制(PWM)是一种通过数字方式获取模拟结果的技术。数字控制用于创建方波,信号在高电平和低电平之间切换。这种开关模式,可以通过改变信号持续的时间部分,与信号关闭的时间来模拟全开(5V)和关(0V)之间的电压。“有效”的持续时间称为脉冲宽度。要获得不同的模拟值,可以更改或调节脉冲宽度。如果你使用的LED重复此开关模式足够快,得到信号好像是0到5V之间的稳定电压,控制LED的亮度。

图片

四、实验步骤

建立电路,按照如下表格连线:

树莓派 T形转接板 RGB-LED灯模块
GND GND GND
GPIO0 GPIO17 R
GPIO1 GPIO18 G
GPIO2 GPIO27 B

图片

五、使用python语言编程

#!/usr/bin/env python   #告诉Linux本文件是一个Python程序
import RPi.GPIO as GPIO    #导入控制GPIO的模块,RPi.GPIO
import time     #导入时间模块,提供延时、时钟和其它时间函数


colors = [0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0xFF00FF, 0x00FFFF] #颜色列表
R = 11        #定义物理针脚号
G = 12
B = 13


#初始化程序
def setup(Rpin, Gpin, Bpin):
    global pins  # 在函数内部声明被其修饰的变量是全局变量
    global p_R, p_G, p_B
    pins = {'pin_R': Rpin, 'pin_G': Gpin, 'pin_B': Bpin}
    GPIO.setmode(GPIO.BOARD)  # 设置引脚编号模式为板载模式,即树莓派上的物理位置编号
    for i in pins:
        GPIO.setup(pins[i], GPIO.OUT)  # 设置针脚模式为输出(或者输入GPIO.IN)
        GPIO.output(pins[i], GPIO.LOW)  # Set pins to low(0 V) to off led


    p_R = GPIO.PWM(pins['pin_R'], 2000)  # set Frequece to 2KHz
    p_G = GPIO.PWM(pins['pin_G'], 1999)
    p_B = GPIO.PWM(pins['pin_B'], 5000)


    p_R.start(0)  # Initial duty Cycle = 0(leds off)
    p_G.start(0)
    p_B.start(0)


def 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 off():
    for i in pins:
        GPIO.output(pins[i], GPIO.LOW)    # Turn off all leds

def setColor(col):  # For example : col = 0x112233
    R_val = (col & 0xff0000) > > 16  # 先“与”运算 只保留自己颜色所在位的值有效
    G_val = (col & 0x00ff00) > > 8  # 再“右移”运算 将自己颜色所在位的值提取出来
    B_val = (col & 0x0000ff) > > 0


    R_val = map(R_val, 0, 255, 0, 100)  # 将颜色的刺激量转换为占空比对应的值
    G_val = map(G_val, 0, 255, 0, 100)
    B_val = map(B_val, 0, 255, 0, 100)


    p_R.ChangeDutyCycle(R_val)  # 更改占空比,调整该颜色的亮度
    p_G.ChangeDutyCycle(G_val)
    p_B.ChangeDutyCycle(B_val)
#循环函数
def loop():
    while True:
        for col in colors:
            setColor(col)
            time.sleep(1)
#资源释放
def destroy():
    p_R.stop()      #Turn off PWM
    p_G.stop()
    p_B.stop()
    off()              # Turn off all leds
    GPIO.cleanup()     #重置GPIO状态
#程序入口
if __name__ == "__main__":
    try:                       #用try-except代码块来处理可能引发的异常
        setup(R, G, B)      #调用初始化设置LED灯的函数
        loop()                     #调用循环函数
    except KeyboardInterrupt:      #如果遇用户中断(control+C),则执行destroy()函数
        destroy()             #调用清除LED状态的函数
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led灯
    +关注

    关注

    22

    文章

    1554

    浏览量

    107030
  • Linux
    +关注

    关注

    87

    文章

    10990

    浏览量

    206734
  • RGB
    RGB
    +关注

    关注

    4

    文章

    763

    浏览量

    57407
  • 面包板
    +关注

    关注

    2

    文章

    296

    浏览量

    17432
  • 树莓派
    +关注

    关注

    113

    文章

    1639

    浏览量

    104740
收藏 人收藏

    评论

    相关推荐

    树莓光谱分析仪

    在外网上看到的用树莓RGB LED 和python 做的光谱仪,这是个什么原理啊?有知道的吗?
    发表于 01-13 15:53

    树莓2控制一个LED

    ` 本帖最后由 348081236 于 2016-1-19 16:57 编辑 这个教程教你怎样用树莓控制一个LED。这是比较基础、简单、适合新手的。先从一个
    发表于 01-19 16:55

    树莓时光胶囊

    电源线、以太网电缆和四个LED连接线连树莓GPIO,引脚分别为17/18/22/23,共享LED地线和接地GPIO引脚另外,装螺栓螺母不多说第
    发表于 01-21 11:52

    树莓派系列教程7:如何点亮一个LED(上)

    通过编程控制GPIO管脚输出高低电平。学过51单片机的孩童第一个程序就是点亮一个LED,从此就点亮我们的人生,从此code奸我千百遍,我待code如初见。今天我们就来探讨一下
    发表于 03-22 17:18

    设计一个STC51单片机控制的RGB基色LED灯光模式控制系统,用基色LED显示多种色彩模式。 

    1.设计内容及要求:设计一个STC51单片机控制的RGB基色LED灯光模式控制系统。用
    发表于 12-10 16:39

    树莓学习指南部曲,从编程到实战一应俱全

    树莓树莓派系列教程 4:树莓raspi-config配置,树莓派系列教程5:linux常用
    发表于 09-10 18:23

    硬件创客开源设计教程资料汇总,带你玩转树莓

    列教程7:如何点亮一个LED(上),树莓派系列教程8 : 如何点亮一个LED
    发表于 05-18 14:35

    树莓如何点亮一个LED

    本章将简介在树莓派上面通过shell,sysfs,bcm2835,wiringPi,python等不同的编程方式点亮一个LED
    发表于 11-05 07:04

    关闭树莓电源LED

    在关闭树莓的电源指示和状态指示中,对关闭树莓指示
    发表于 12-28 08:18

    关闭树莓的指示

    关闭树莓的指示我有几个树莓放在房间内,每天晚上都看到指示的闪光,感觉有
    发表于 12-31 06:18

    双色LED实验的相关资料下载

    树莓:双色LED实验简介一、实验效果二、组件、实验原理四、实验步骤五、代码实现简介双色LED
    发表于 01-05 07:12

    用于覆盆子树莓3B及以上型号的RGB LED

    描述树莓 4 RGB 帽子用于覆盆子 Pi 3B 及以上型号的 RGB LED 帽。采用矩阵形式的 WS2812
    发表于 07-27 06:50

    Arduino学习日记之点亮RGB

    。/*5,4,3,2号引脚都连接了一个标有“V,R,G,B”的LED等待一秒钟,间隔点亮红蓝绿LED,如此循环*/int sw = 5
    发表于 08-11 19:09

    制作RGB基色合成的白光LED中的注意事项

    制作RGB基色合成的白光LED中的注意事项 对于制作RGB基色合成的白光LED,必须注意以
    发表于 05-09 08:31 2610次阅读

    RGB-三基色LED灯带控制-测试成功

    RGB-三基色LED灯带控制-测试成功
    发表于 09-10 10:26 696次下载