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 输出最基础的几种颜色,代码如下:
#define R_PIN 15
#define G_PIN 4
#define B_PIN 2
void setup() {
// 初始化引脚
pinMode(R_PIN, OUTPUT);
pinMode(G_PIN, OUTPUT);
pinMode(B_PIN, OUTPUT);
// 共阳型 LED 的控制端为高电平时熄灭
digitalWrite(R_PIN, HIGH);
digitalWrite(G_PIN, HIGH);
digitalWrite(B_PIN, HIGH);
}
void loop() {
// 红色
digitalWrite(R_PIN, 0);
digitalWrite(G_PIN, 1);
digitalWrite(B_PIN, 1);
delay(1000);
// 绿色
digitalWrite(R_PIN, 1);
digitalWrite(G_PIN, 0);
digitalWrite(B_PIN, 1);
delay(1000);
// 蓝色
digitalWrite(R_PIN, 1);
digitalWrite(G_PIN, 1);
digitalWrite(B_PIN, 0);
delay(1000);
// 红 + 绿
digitalWrite(R_PIN, 0);
digitalWrite(G_PIN, 0);
digitalWrite(B_PIN, 1);
delay(1000);
// 红 + 蓝
digitalWrite(R_PIN, 0);
digitalWrite(G_PIN, 1);
digitalWrite(B_PIN, 0);
delay(1000);
// 蓝 + 绿
digitalWrite(R_PIN, 1);
digitalWrite(G_PIN, 0);
digitalWrite(B_PIN, 0);
delay(1000);
// 红 + 绿 + 蓝
digitalWrite(R_PIN, 0);
digitalWrite(G_PIN, 0);
digitalWrite(B_PIN, 0);
delay(1000);
}
由于 GPIO 只能控制电平高低,因此,我们可以显示的颜色是有限的,所以,我们还需要使用 PWM 调光,才能输出更多的颜色。
需要注意的是,由于共阳与共阴 LED 的输出方式是完全相反,因此,我们在使用共阳 RGB LED 时需要输出的 PWM 的占空比应该是 255 - RGB 值
,这里,我们可以直接使用 analogWrite() 函数进行 PWM 输出,因为 analogWrite() 输出的占空比范围默认为 0-255,代码如下:
#define R_PIN 15
#define G_PIN 4
#define B_PIN 2
// 将 RGB 颜色值转换为共阳型 RGB LED 的占空比
void set_color(int r, int g, int b) {
analogWrite(R_PIN, 255-r);
analogWrite(G_PIN, 255-g);
analogWrite(B_PIN, 255-b);
}
void setup() {
// 初始化引脚
pinMode(R_PIN, OUTPUT);
pinMode(G_PIN, OUTPUT);
pinMode(B_PIN, OUTPUT);
}
void loop() {
// 玫瑰红
set_color(255, 0, 128);
delay(1000);
// 橙色
set_color(255, 127, 0);
delay(1000);
// 湖蓝
set_color(0, 128, 255);
delay(1000);
}
这里是一些常用的 RGB 颜色,大家可以用这些 RGB 值测试一下代码显示的颜色是否正确:

