其它文章
一、在ESP32-S3上使用MicroPython点亮WS2812智能LED
1. 硬件连接:
- VCC: 连接到ESP32-S3的3.3V电源引脚(例如:3V3)。
- GND: 连接到ESP32-S3的GND引脚。
- IN: 连接到ESP32-S3的一个GPIO引脚(例如:GPIO 2)。
2. 安装MicroPython的neopixel
库:
MicroPython内置了对WS2812等“NeoPixel” LED的支持。你可以直接在代码中导入neopixel
模块。
3. 编写MicroPython代码:让一个灯珠显示不同的颜色
from machine import Pin
import neopixel
from time import sleep
# 设置GPIO 2为输出引脚,并初始化一个有1个LED的NeoPixel对象
led_pin = Pin(2, Pin.OUT)
np = neopixel.NeoPixel(led_pin, 1)
# 设置LED颜色,使用RGB格式,例如:红色 (255, 0, 0)
np[0] = (255, 0, 0)
np.write() # 发送数据到LED
sleep(1) # 保持1秒
# 将LED颜色设为绿色
np[0] = (0, 255, 0)
np.write()
sleep(1)
# 将LED颜色设为蓝色
np[0] = (0, 0, 255)
np.write()
sleep(1)
# 关闭LED(设为黑色)
np[0] = (0, 0, 0)
np.write()
4. 上传并运行代码:
将上面的代码保存为main.py
,然后上传到ESP32-S3。代码运行后,WS2812 LED会依次显示红、绿、蓝三种颜色,每种颜色保持1秒钟,然后熄灭。
5. 编写MicroPython代码:控制多个WS2812 LED灯珠显示不同的颜色
要控制多个WS2812 LED灯珠,你需要在代码中指定正确的LED数量,并且对每个灯珠进行单独控制。假设你有7个灯珠,下面是更新后的代码:
更新后的代码:
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)
# 定义要显示的颜色序列
colors = [
(255, 0, 0), # 红色
(0, 255, 0), # 绿色
(0, 0, 255), # 蓝色
(255, 255, 0), # 黄色
(255, 0, 255), # 洋红色
(0, 255, 255), # 青色
(255, 255, 255) # 白色
]
# 逐个设置每个LED的颜色
for i in range(num_leds):
np[i] = colors[i]
np.write() # 发送数据到所有LED
sleep(2) # 保持2秒
# 关闭所有LED
for i in range(num_leds):
np[i] = (0, 0, 0)
np.write()
代码说明:
- num_leds: 我们将灯珠数量设置为7。
- colors数组: 定义了7种不同的颜色,你可以根据需要修改颜色值。
- for循环: 逐个设置每个LED的颜色。
运行效果:
- 代码会将7个灯珠分别设置为不同的颜色并点亮。
- 显示2秒后,所有LED熄灭。
如果你想让所有灯珠显示相同的颜色,可以将colors
列表改为一个单一的颜色,例如:
for i in range(num_leds):
np[i] = (255, 0, 0) # 将所有LED设置为红色
np.write()
你可以根据需要随时修改颜色和显示模式。这样,你的7个灯珠都可以按预期亮起来并显示不同的颜色。
注意事项:
- 电压问题:WS2812通常可以在3.3V运行,但有些版本可能需要5V。如果使用5V供电,确保ESP32的GPIO引脚能够接受这种电压,或通过电平转换器保护ESP32的GPIO。
- LED数量:如果你有多个WS2812 LED,需要在
neopixel.NeoPixel()
初始化时,设置正确的LED数量。
这样,你应该可以成功控制WS2812 LED了。如果LED依然不亮,检查一下接线和供电是否正确。