RGB色彩模式是工业界一种颜色标准,RGB名称即代表着R红色、G绿色、B蓝色,总共为三个通道的颜色。每个通道的刺激量以及通道之间相互迭加的刺激量从而会得到各式各样的颜色,RGB三种色的配合即可呈现出人类视力所能感知到的所有颜色,也是运用最广的颜色系统之一。
在日常生活中我们电脑上的RGB所谓“多少数值”其实就是指亮度,一般使用整数来表示。RGB各有256级的亮度,用数字表示为从0、1、2...直到255,数字的最高是255,但0也是数值之一,0表示没有刺激量,255表示刺激量最大值。R、G、B均为255时就合成了白光,R、G、B均为0时就形成了黑色。依次类推,不同通道的数值变化和迭加会呈现不同的颜色。
在下面的实验中,我们将使用PWM技术来控制RGB的亮度。(PWM)是脉冲宽度调制它是通过数字方式获取模拟结果的技术。数字控制用于创建方波,信号在高电平和低电平之间切换。这种开关模式,可以通过改变信号持续的时间部分,与信号关闭的时间来模拟全开(5V)和关(0V)之间的电压。“有效”的持续时间称为脉冲宽度。要获得不同的模拟值,可以更改或调制脉冲宽度。如果你使用的LED重复此开关模式足够快,通过0到5V之间的不同电压,控制LED的亮度和颜色。
将树莓派引脚连接到RGB模块上,通过引脚我们就可以看出RGB模块只有一个GND,三个颜色针脚,其实就是共负极。如果给每个颜色针脚不同电信号,即可实现不同颜色。(如下图介绍)
树莓派主板 | RGB全彩模块 |
GPIO17 | R针脚 |
GPIO27 | G针脚 |
GPIO22 | B针脚 |
GND | -负极 |
sudo apt update sudo apt install python3-rpi.gpio写入脚本程序执行
import RPi.GPIO as GPIO import time # 设置引脚编号 R_PIN = 17 # 红色通道连接到 GPIO17 G_PIN = 27 # 绿色通道连接到 GPIO27 B_PIN = 22 # 蓝色通道连接到 GPIO22 # 初始化GPIO设置 def setup(): GPIO.setmode(GPIO.BCM) # 使用BCM编号模式 GPIO.setup(R_PIN, GPIO.OUT) GPIO.setup(G_PIN, GPIO.OUT) GPIO.setup(B_PIN, GPIO.OUT) # 设置PWM频率为1000Hz global r_pwm, g_pwm, b_pwm r_pwm = GPIO.PWM(R_PIN, 1000) g_pwm = GPIO.PWM(G_PIN, 1000) b_pwm = GPIO.PWM(B_PIN, 1000) # 启动PWM,初始占空比为0(关闭) r_pwm.start(0) g_pwm.start(0) b_pwm.start(0) # 将0-255的RGB值转换为占空比百分比(0.0 - 100.0) def set_color(r_val, g_val, b_val): r_pwm.ChangeDutyCycle(r_val / 255 * 100) g_pwm.ChangeDutyCycle(g_val / 255 * 100) b_pwm.ChangeDutyCycle(b_val / 255 * 100) # 主函数:循环显示不同的颜色 def main(): setup() print("开始循环显示RGB颜色...") try: while True: # 红色渐变 for r in range(0, 256, 5): set_color(r, 0, 0) time.sleep(0.05) # 绿色渐变 for g in range(0, 256, 5): set_color(0, g, 0) time.sleep(0.05) # 蓝色渐变 for b in range(0, 256, 5): set_color(0, 0, b) time.sleep(0.05) # 白色渐变(RGB同时亮) for val in range(0, 256, 5): set_color(val, val, val) time.sleep(0.05) except KeyboardInterrupt: print("程序被用户终止") cleanup() # 清理GPIO资源 def cleanup(): r_pwm.stop() g_pwm.stop() b_pwm.stop() GPIO.cleanup() print("GPIO清理完成") if __name__ == "__main__": main()
程序可以控制 RGB LED 模块不同颜色的渐变过渡。使用 (Ctrl + C)退出程序。