RGB LED
本节课我们来学习使用 MicroPython 控制 RGB LED 模块。
实验原理
之前我们已经学习过 LED 了,并且实现过控制 LED 亮灭以及呼吸灯的实验,但是 LED 只能发出一种颜色的光,而 RGB LED 是一种集成红(R)、绿(G)、蓝(B)三种颜色 LED 芯片的复合发光器件,通过 PWM(脉宽调制)控制各颜色通道的亮度比例。

这里,先简单了解 RGB 加色模型,我们可以通过红、绿、蓝三种颜色就可以模拟出其他颜色,每个通道的颜色强度范围是 0-255
,任何一个数值的变化都会有一种颜色对应,可以实现 256*256*256 种颜色的混合输出,除了使用 3 个 0-255 范围的数值表示颜色之外,还可以将三个数值转换成 16 进制数,前面加上 #
来表示颜色,这就是我们常见的 16 进制颜色编码。比如下图是不同颜色对应的 RGB 值
颜色 | 对应的 RGB 值 | 16 进制颜色码 |
---|---|---|
红色 | RGB(255, 0, 0) | #FF0000 |
橙色 | RGB(255, 127, 0) | #FF7F00 |
湖蓝 | RGB(0, 128, 255) | #0080FF |
玫瑰红 | RGB(255, 0, 128) | #FF0080 |

了解了 RGB 加色原理之后,我们就可以来学习 RGB LED 了,RGB LED 通常有 4 个引脚,分为共阳和共阴两种类型。它们的核心区别在于 公共端(COM)的极性和驱动方式。以下是两者的详细对比:
类型 | 公共端(COM) | LED 连接方式 | 点亮条件 |
---|---|---|---|
共阴极 | 阴极(GND) | 三个 LED 的阴极短接,阳极独立 | 向 R/G/B 引脚输出 高电平(+3.3V 或 +5V),电流从控制端流向公共端(GND),LED 点亮 |
共阳极 | 阳极(+VCC) | 三个 LED 的阳极短接,阴极独立 | 向 R/G/B 引脚输出 低电平(GND),电流从公共端(VCC)流向控制端,LED 点亮 |

本套教程,我们使用的是共阳极 RGB 模块。
硬件电路设计
物料清单(BOM 表):
材料名称 | 数量 |
---|---|
共阳极 RGB LED 模块 | 1 |
杜邦线(跳线) | 若干 |

软件程序设计
第一步,我们先使用 GPIO 控制 RGB LED 输出最基础的几种颜色,代码如下:
from machine import Pin
import time
# 定义引脚对象,并初始化引脚为高电平
r_pin = Pin(15, Pin.OUT, value=1)
b_pin = Pin(2, Pin.OUT, value=1)
g_pin = Pin(4, Pin.OUT, value=1)
while True:
# 红色
r_pin.value(0)
g_pin.value(1)
b_pin.value(1)
time.sleep(1)
# 绿色
r_pin.value(1)
g_pin.value(0)
b_pin.value(1)
time.sleep(1)
# 蓝色
r_pin.value(1)
g_pin.value(1)
b_pin.value(0)
time.sleep(1)
# 红 + 绿
r_pin.value(0)
g_pin.value(0)
b_pin.value(1)
time.sleep(1)
# 红 + 蓝
r_pin.value(0)
g_pin.value(1)
b_pin.value(0)
time.sleep(1)
# 蓝 + 绿
r_pin.value(1)
g_pin.value(0)
b_pin.value(0)
time.sleep(1)
# 红 + 绿 + 蓝
r_pin.value(0)
g_pin.value(0)
b_pin.value(0)
time.sleep(1)
由于 MicroPython 中 PWM 的占空比的分辨率是固定的,范围为 0~1023,而 RGB 值的范围为 0~255,因此,还需要将颜色值转换成对应的占空比,256 为 2 的 8 次方,1024 为 2 的 10 次方,转换时只需要将 RGB 值乘以 4 即可获得对应的占空比
但是,这样获取到的占空比是共阴型 RGB LED 的占空比输入方式,我们知道共阴与共阳点亮 LED 的方式是完全相反的,因此,在对共阳极 RGB 进行 PWM 调光时需要注意,要传递的 RGB 的值为 255 - 当前值
才可以获得,因此,我们想通过 PWM 输出各种不同颜色光的代码如下:
from machine import Pin, PWM
import time
# 定义 PWM 引脚,初始占空比为 100%(熄灭)
pwm_r = PWM(Pin(15), freq=2000, duty=1023)
pwm_g = PWM(Pin(4), freq=2000, duty=1023)
pwm_b = PWM(Pin(2), freq=2000, duty=1023)
# 将 RGB 颜色值转换为共阳型 RGB LED 的占空比
def set_color(r, g, b):
pwm_r.duty(1023 - r * 4)
pwm_g.duty(1023 - g * 4)
pwm_b.duty(1023 - b * 4)
while True:
# 玫瑰红
set_color(255, 0, 128)
time.sleep(1)
# 橙色
set_color(255, 127, 0)
time.sleep(1)
# 湖蓝
set_color(0, 128, 255)
time.sleep(1)
这里是一些常用的 RGB 颜色,大家可以用这些 RGB 值测试一下代码显示的颜色是否正确:

