一、ESP32-S3上使用MicroPython点亮WS2812智能LED
二、ESP32-S3上使用MicroPython点亮WS2812智能LED让所有灯珠点亮
三、ESP32-S3上使用MicroPython点亮WS2812智能LED灯珠流转效果
通过调整WS2812 LED灯珠的RGB值来改变亮度。我们可以使用一个简单的算法来动态地调整亮度,使其在最低和最高值之间流动,从而实现亮度从低到高再到底的流水效果。下面是更新的代码:
实现动态亮度流动的代码:
from machine import Pin
import neopixel
from time import sleep
# 设置GPIO 2为输出引脚,并初始化一个有7个LED的NeoPixel对象
led_pin = Pin(2, Pin.OUT)
num_leds = 7 # 你的LED数量
np = neopixel.NeoPixel(led_pin, num_leds)
# 定义基础颜色
base_colors = [
(255, 0, 0), # 红色
(0, 255, 0), # 绿色
(0, 0, 255), # 蓝色
(255, 255, 0), # 黄色
(255, 0, 255), # 洋红色
(0, 255, 255), # 青色
(255, 255, 255) # 白色
]
# 定义亮度范围
min_brightness = 0.1
max_brightness = 1.0
brightness_step = 0.1
brightness = min_brightness
increase = True # 用于控制亮度增减
def adjust_brightness(color, brightness):
"""调整颜色的亮度"""
return tuple(int(c * brightness) for c in color)
while True:
for i in range(num_leds):
# 调整当前灯珠的亮度
np[i] = adjust_brightness(base_colors[i], brightness)
np.write() # 发送数据到所有LED
sleep(0.1) # 控制速度
# 更新亮度
if increase:
brightness += brightness_step
if brightness >= max_brightness:
increase = False
else:
brightness -= brightness_step
if brightness <= min_brightness:
increase = True
# 将颜色列表向右循环移动一位
base_colors = base_colors[-1:] + base_colors[:-1]
代码说明:
adjust_brightness
函数: 根据当前的亮度水平调整每个颜色的亮度。- 亮度范围和步进:
min_brightness
和max_brightness
定义了亮度的范围,brightness_step
控制亮度变化的步进。 increase
标志: 用于控制亮度是增加还是减少,达到最大或最小亮度时改变方向。- 颜色流动与亮度变化结合: 每个循环中,颜色在LED之间流动,同时亮度在范围内变化,实现亮度和颜色的动态效果。
运行效果:
- LED灯珠会显示颜色的流动,同时亮度在设定的范围内动态变化,从而实现亮度的流水效果。
- 亮度变化的速度和范围可以通过调整
brightness_step
、min_brightness
、max_brightness
来控制。
这样可以实现既有颜色流动又有亮度变化的动态效果,让你的灯珠显示更加生动和富有变化。