MicroPython+ESP32+rgb三色灯
MicroPython实现【RGB3色LED】的千万种颜色闪烁
众所周知,只要拥有了红、绿、蓝三种基本颜色就可以调配出上千万种其他颜色,无论是颜料,还是灯光同理。
在 “rgb三色LED模块”上就是有红/绿/蓝3个LED灯,改变三个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。
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、用文本保存颜色
- 假如 RGBcolors.txt 内容为:
{"黑": "000000","白": "FFFFFF", "红": "FF0000", "绿": "00FF00",
"蓝": "0000FF", "黄": "FFFF00", "青": "00FFFF","银": "C0C0C0"}
- 读取 文本内容 并用 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