【MicroPython+ESP32+rgb三色灯实现PWM控制基色光强,可照出千万种颜色光】

MicroPython实现【RGB3色LED】的千万种颜色闪烁

众所周知,只要拥有了红、绿、蓝三种基本颜色就可以调配出上千万种其他颜色,无论是颜料,还是灯光同理。
在 “rgb三色LED模块”上就是有红/绿/蓝3个LED灯,改变三个LED的灯光强弱,混合后就会照射出不同的颜色光。

RGB3色LED模块

1、PWM控制LED的亮度

1.1、具体PWM原理相信大家都知晓,这里直接上程序:

from machine import Pin
from machine import PWM

#定义LED控制对象
led = PWM(Pin(2),freq=1000,duty=0)
#设置占空比,改变LED亮度
value = 1000 
led.duty(value)  # value取值范围: 0 ~ 1023

LED的亮度便是通过改变 value值来控制PWM输出

1.2、为后文铺垫就是: 三个LED(红、绿和蓝)分别有三PWM输出控制其亮度

#定义对象 红/绿/蓝LED控制的PWM 输出
rgbR = PWM(Pin(2), freq=1000,duty=0)
rgbG = PWM(Pin(4), freq=1000,duty=0)
rgbB = PWM(Pin(16), freq=1000,duty=0)

2、什么是RGB色值 ?

2.1、 色值:指的是该种颜色在不同的颜色模式中所对应的颜色值。

  • 红色在RGB颜色模式中所对应的值就是255,0,0
  • 绿色在RGB颜色模式中所对应的值就是0,255,0
  • 蓝色在RGB颜色模式中所对应的值就是0,0,255
    RGB色值

2.2、 在RGB颜色模式中,每一个颜色都由红色、绿色、蓝色混合而成。将颜色由一个十六进制符号来定义,这个符号由红色、绿色和蓝色的值组成(RGB)。每种颜色的最小值是 0(十六进制:#00)。最大值是 255(十六进制:#FF)

2.3、 通过计算 256 x 256 x 256,从 0 到 255 的红色、绿色和蓝色的值一共可以组合出 1600 万种不同的颜色

3、如何用函数实现RGB色值

3.1、十进制参数(red, green, blue)

# 设置颜色函数
def set_color(red, green, blue):
    rgbR.duty(int(red * 1023 / 255))
    rgbG.duty(int(green * 1023 / 255))
    rgbB.duty(int(blue * 1023 / 255))

改变的是三个rgb颜色LED的PWM占空比,分成255等分
红绿蓝三个参数就控制在0 ~ 255,符合常理了

例如: #rgb三色LED显示颜色如下
	set_color(255,255,255)   # 白色
	set_color(255, 255, 0)   # 黄色

3.2、十六进制参数(color_hex) 取值范围:000000 ~FFFFFF

def coler_HexDec(hex_color):
    r = int(hex_color[0:2], 16)
    g = int(hex_color[2:4], 16)
    b = int(hex_color[4:6], 16)
    set_color(r,g,b)

是,将一个6位十六进制数分解成 3个十进制数 并传入 set_color() 函数

例如:# rgb三色LED显示颜色如下
	coler_HexDec("FFFFFF")   # 白色
	coler_HexDec("FFFF00")   # 黄色

4、保存色值并调用

一些链接:
查 看 :RGB 颜色表
好用的工具:RGB颜色选择器

4.1、常用的颜色可用 字典 保存
这里两种字典方法,分别保存了十进制色值和十六进制色值:

# 十进制颜色值
RGB_color = ['红','绿','蓝','黄','青' , '橙','紫','白','黑','灰']
RGB_value = ['(255,0,0)','(0,255,0)','(0,0,255)','(255, 255, 0)','(0, 255, 255)',
            '(255, 165, 0)', '(128, 0, 128)','(255,255,255)','(0,0,0)','(128, 128, 128)']
color_dict = dict(zip(RGB_color, RGB_value))

# 十六进制颜色值
colorhex = {"红": "FF0000", "绿": "00FF00", "蓝": "0000FF", "黄": "FFFF00", "紫": "FF00FF", 
            "白": "FFFFFF", "黑": "000000", "碧绿": "70DB93", "巧克力": "5C3317", "米": "f5f5dc"}

通过上面两个颜色设置函数,就可以实现字典里颜色的显示。

如:
#  循环点亮 color_dict 字典里的颜色
    for i  in range(len(colorname)):
        get_color(colorname[i])
        time.sleep(2)

#  循环点亮 colorhex 字典里的颜色
    HEX_colors = tuple(colorhex.keys())
    HEX_values = tuple(colorhex.values())
    for i in range(len(HEX_values)):
        coler_HexDec(HEX_values[i])
        print(f'{HEX_colors[i]}色:{HEX_values[i]}')
        time.sleep_ms(500)

4.2、用文本保存颜色

  1. 假如 RGBcolors.txt 内容为:
{"黑": "000000","白": "FFFFFF", "红": "FF0000", "绿": "00FF00",
"蓝": "0000FF", "黄": "FFFF00", "青": "00FFFF","银": "C0C0C0"}
  1. 读取 文本内容 并用 json 来转化为字典的函数
import json
def read_colortxt(txt_path):
    """注释:
        *****给一个txt文本路径,获取内容并用json转换为字典。
        *****注意:文本保存的格式应符合 json字符串转字典的要求
        *****文本保存内容格式为:{"name": "XiaoMing", "age": "17", "address": "China"}
    param txt_path : 保存颜色的TXT文本路径,(例如:"d/colors.txt")
    返回值: 一个保存颜色hex数据的字典
    """
    try :
        with open(txt_path,  mode='r', encoding="uft-8") as file:
            dcit =json.loads(file.read())
        return dcit
    except Exception as e:
        print(f'读取发生错误: {e}')
        return None

结合上述两个函数,读取文本中的颜色保存到字典并调用显示:

例如:
     colors = read_colortxt("RGBcolors.txt") # 打开并获取RGBcolors.txt的颜色
     coler_HexDec(colors['白'])

5、实验效果与源码

1)RGB三色LED实验效果

2)本文用到的程序和文本:点击获取,密码:rgb32

  • 19
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: RGB颜色空间转换为HSV颜色空间可以有多种方法。 一种常用的方法是基于数学计算的转换公式。根据这个方法,我们可以使用以下转换公式来计算HSV颜色空间中的H、S和V值: H = 0(如果S = 0) H = 60 * ((G - B) / (max - min)) + 360(如果R = max) H = 60 * ((B - R) / (max - min)) + 120(如果G = max) H = 60 * ((R - G) / (max - min)) + 240(如果B = max) S = (max - min) / max V = max 这种方法通过计算RGB颜色分量的比例来确定颜色的色相(H),饱和度(S)和明度(V)。 另一种方法是通过使用编程库或软件来进行转换。许多图像处理软件和编程语言都提供了内置的函数或方法来直接将RGB颜色转换为HSV颜色。这些函数通常会自动处理转换的细节,使得转换过程更加简单快捷。 通过这两种方法,我们可以将RGB颜色空间转换为HSV颜色空间,以便更好地理解和操作颜色。HSV颜色空间在描述颜色时更接近人类视觉感知,因此在图像处理、计算机图形学和颜色选取等领域有广泛的应用。 ### 回答2: RGB颜色空间是一种以红色(R)、绿色(G)、蓝色(B)基色来表示颜色的模型,而HSV颜色空间则是一种以色调(H)、饱和度(S)、明度(V)个要素来表示颜色的模型。在将RGB颜色空间转换为HSV颜色空间时,有以下两种常见的方法: 1. 基于数学公式的转换:根据RGB和HSV之间的数学关系,可通过一系列计算公式将RGB颜色转换为HSV颜色。这种方法常用的公式包括: - 计算色调H:H = arccos[(0.5 * (R-G) + (R-B)) / sqrt((R-G)^2 + (R-B)*(G-B))] - 计算饱和度S:S = 1 - 3 * min(R, G, B) / (R + G + B) - 计算明度V:V = (R + G + B) / 3 这些公式将RGB的色彩信息转换为HSV的要素值,从而实现颜色空间的转换。 2. 基于颜色空间模型的转换:还可以通过将RGB颜色空间先转换为另一个颜色空间,如CIE XYZ颜色空间,然后再将其转换为HSV颜色空间。这种方法需要使用一些颜色空间的转换矩阵和算法来实现。 无论是使用基于公式的转换还是基于颜色空间模型的转换,它们都可以将RGB颜色空间转换为HSV颜色空间,从而实现不同颜色空间间的转换和计算。选择哪种方法取决于具体的应用场景和需求。 ### 回答3: RGB颜色空间转换为HSV颜色空间有多种方法。其中最常用且较为简单的方法是通过以下公式进行转换: 1. 归一化RGB值:将RGB颜色空间中的R、G、B分量分别除以255,将其值归一化到0到1范围内。 2. 计算最大值和最小值:找归一化后的RGB值中的最大值和最小值,分别记为max_val和min_val。 3. 计算亮度(V):HSV颜色空间中的V值直接等于最大值max_val。 4. 计算饱和度(S):根据计算得到的max_val和min_val,计算饱和度S的公式如下: S = (max_val - min_val) / max_val 5. 计算色调(H):色调是HSV颜色空间中最复杂的一个分量。根据计算得到的max_val、min_val以及归一化后的RGB值,可以通过以下公式计算色调: 如果max_val等于min_val,则H为0; 否则,根据max_val和归一化后的RGB值中的R、G、B分量的关系计算H: - 如果max_val等于归一化后的R值,则H等于60 * ((归一化后的G值 - 归一化后的B值) / (max_val - min_val)); - 如果max_val等于归一化后的G值,则H等于60 * (2 + ((归一化后的B值 - 归一化后的R值) / (max_val - min_val)))); - 如果max_val等于归一化后的B值,则H等于60 * (4 + ((归一化后的R值 - 归一化后的G值) / (max_val - min_val)))))。 通过以上步骤,我们可以将RGB颜色空间转换为HSV颜色空间中的亮度、饱和度和色调个分量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值