一、目的
这一节我们学习如何使用我们的ESP32开发板来控制RGB全彩LED模块。
二、环境
ESP32 + RGB全彩LED模块 + Thonny IDE + 几根杜邦线
1,共阴极接线方法
2,共阳极接线方法
三、代码
1,亮指定的颜色,比如百度蓝。
我们使用取色工具或者截图工具,获得“百度一下”按钮的RGB值:78,110,242。我使用的工具名字是:Snipast ,大家可以百度一下下载,这个截图工具非常好用。
共阴极代码:如果使用Wokwi仿真,需要设置RGB LED的公共极的极性为阴极,默认状态为阳极。
共阴极代码:
from machine import Pin, PWM
import time
# 创建引脚对象
led_r = Pin(4, Pin.OUT)
led_b = Pin(2, Pin.OUT)
led_g = Pin(15, Pin.OUT)
# 创建PWM对象
pwm_led_r = PWM(led_r)
pwm_led_r.freq(100)
# 注意公共极为负GND,对应LED引脚输出1即高电平才亮
pwm_led_r.duty(int(78 / 255 * 1023)) # 设置红色R的值
pwm_led_g = PWM(led_g)
pwm_led_g.freq(100)
pwm_led_g.duty(int(110 / 255 * 1023)) # 设置绿色G的值
pwm_led_b = PWM(led_b)
pwm_led_b.freq(100)
pwm_led_b.duty(int(242 / 255 * 1023)) # 设置蓝色B的值
print("请看你想要的颜色。。。") #
time.sleep(1)
共阳极代码:如果使用Wokwi仿真,需要设置RGB LED的公共极的默认状态为阳极。
from machine import Pin, PWM
import time
# 创建引脚对象
led_r = Pin(4, Pin.OUT)
led_b = Pin(2, Pin.OUT)
led_g = Pin(15, Pin.OUT)
# 创建PWM对象
pwm_led_r = PWM(led_r)
pwm_led_r.freq(100)
# 注意公共极为正VCC,对应LED引脚输出0即低电平才亮
# 注意,占空比如果设置为1023可以理解为全部是高电平,0表示全部是低电平,又因为对应LED引脚输出0即低电平才量,所以要用1023减去
pwm_led_r.duty(1023 - int(78 / 255 * 1023)) # 设置红色R的值
pwm_led_g = PWM(led_g)
pwm_led_g.freq(100)
pwm_led_g.duty(int(1023 - 110 / 255 * 1023)) # 设置绿色G的值
pwm_led_b = PWM(led_b)
pwm_led_b.freq(100)
pwm_led_b.duty(int(1023 - 242 / 255 * 1023)) # 设置蓝色B的值
print("请看你想要的颜色。。。")
time.sleep(1)
我们使用共阳极,来实现呼吸灯的效果:
from machine import Pin, PWM
import time
# 创建引脚对象
led_r = Pin(4, Pin.OUT)
led_b = Pin(2, Pin.OUT)
led_g = Pin(15, Pin.OUT)
# 创建PWM对象
pwm_led_r = PWM(led_r)
pwm_led_r.freq(100)
# 注意,占空比如果设置为1023可以理解为全部是高电平,0表示全部是低电平,又因为对应LED引脚输出0即低电平才量,所以要用1023减去
pwm_led_r.duty(1023 - int(255 / 255 * 1023))
pwm_led_g = PWM(led_g)
pwm_led_g.freq(100)
pwm_led_g.duty(1023 - int(206 / 255 * 1023))
pwm_led_b = PWM(led_b)
pwm_led_b.freq(100)
pwm_led_b.duty(1023 - int(70 / 255 * 1023))
print("sleep 1...")
time.sleep(1)
# ------------ 以下是呼吸灯效果代码---------------
pwm_led_r.duty(1023)
pwm_led_g.duty(1023)
pwm_led_b.duty(1023)
# 创建列表,存储pwm对象
leds = [pwm_led_r, pwm_led_g, pwm_led_b]
while True:
for led_pwm_obj in leds:
for i in range(1023, -1, -1):
led_pwm_obj.duty(i)
time.sleep_ms(1)
for i in range(1024):
led_pwm_obj.duty(i)
time.sleep_ms(1)
led_pwm_obj.duty(1023)
四、演示效果
1,百度蓝演示效果
共阴极:
共阳极:
2,呼吸灯的效果
也可点击如下链接查看呼吸灯效果:Wokwi Arduino and ESP32 Simulatorhttps://wokwi.com/projects/348834521740739156
五、购买
共阴极彩色RGB模块,某宝链接如下,我给大家找了两个链接:
https://detail.tmall.com/item.htm?spm=a230r.1.14.215.4cb63fb9SXgxMz&id=41727902744&ns=1&abbucket=8
https://detail.tmall.com/item.htm?spm=a230r.1.14.91.4cb63fb9SXgxMz&id=548418198148&ns=1&abbucket=8
共阳极的RGB模块,某宝的链接如下,也是两个链接,大家按需购买即可:
https://item.taobao.com/item.htm?spm=a230r.1.14.21.77d55a8dxNHnGO&id=527867095097&ns=1&abbucket=8#detail
https://item.taobao.com/item.htm?spm=a230r.1.14.16.77d55a8dxNHnGO&id=529198654104&ns=1&abbucket=8#detail