【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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值