前面我们学过RGB彩色灯珠,能调出各种颜色,但一颗灯珠终究只有一颗。今天要玩点更炫的——WS2812B灯带!
一条灯带上集成了几十颗可独立控制的RGB灯珠,每颗灯珠都能显示不同的颜色。流水灯、彩虹渐变、音乐律动、氛围灯效……这些炫酷的效果,都是WS2812B灯带实现的。
今天这节课,我们就用ESP32 + WS2812B灯带,点亮一条会"呼吸"的彩色灯带!
第一步:找到课程,看看成品效果
打开逗脑IDE,点击顶部“文档”,在“课程” → “ESP32 + MicroPython”分类下,找到WS2812B灯带这节课。
打开课件,你会看到本节课的最终效果:灯带先是全部亮起红色,然后每颗灯珠依次被随机颜色点亮,形成流动的彩色效果,来回往复。
第二步:WS2812B是什么?
WS2812B是一种可独立寻址的RGB LED灯珠。简单来说,就是每颗灯珠里面都集成了红、绿、蓝三色LED芯片和控制芯片。
最大特点:
只需要一根信号线,就能控制整条灯带上每一颗灯珠的颜色和亮度!
灯带的3根线:
| 线色 | 功能 | 说明 |
|---|---|---|
| 红色 | VCC | 电源正极(3.3V或5V都行) |
| 白色 | GND | 电源地 |
| 绿色 | 信号线 | 控制信号(接GPIO15) |
📌 小提示:有的灯带会多出两根备用电源线(红色VCC、白色GND),那是为了长灯带供电更稳定用的,短灯带可以不接。
核心参数:
| 参数 | 说明 |
|---|---|
| 灯珠数量 | 本节课使用30颗 |
| 颜色 | 每颗灯珠支持RGB三色 |
| 控制方式 | 单线信号(GPIO15) |
| 刷新率 | 800kHz(timing=1) |
第三步:动手接线
接线非常简单,3根线搞定:
| 灯带线 | 连接ESP32 | 说明 |
|---|---|---|
| 红色(VCC) | 3.3V或5V | 电源正极 |
| 白色(GND) | GND | 电源地 |
| 绿色(信号线) | GPIO15 | 控制信号 |
第四步:代码——控制灯带
MicroPython内置了neopixel库,直接导入即可使用:
importneopixelfrommachineimportPinimporttimeimporturandom GBIO_IN=Pin(15)# 控制信号输入引脚LED_NUM=30# LED灯的数量# 创建控制对象LED=neopixel.NeoPixel(pin=GBIO_IN,n=LED_NUM,timing=1)# 全部点亮红色LED.fill((255,0,0))# GRB填充数据(0为不亮,255为全亮)LED.write()# 写入数据time.sleep(1)whileTrue:# 随机生成一个颜色r=urandom.randint(0,255)g=urandom.randint(0,255)b=urandom.randint(0,255)# 从左到右依次点亮foriinrange(30):LED[i]=(r,g,b)# 设置第i颗灯珠的颜色LED.write()# 写入数据time.sleep_ms(50)# 再随机一个颜色r=urandom.randint(0,255)g=urandom.randint(0,255)b=urandom.randint(0,255)# 从右到左依次点亮foriinrange(29,-1,-1):LED[i]=(r,g,b)LED.write()time.sleep_ms(50)代码逻辑:
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1 | NeoPixel(pin, n, timing) | 创建控制对象,指定引脚、灯珠数量、速率 |
| 2 | LED.fill((r,g,b)) | 填充所有灯珠为同一颜色 |
| 3 | LED[i] = (r,g,b) | 设置第i颗灯珠的颜色 |
| 4 | LED.write() | 把颜色数据写入灯带,灯珠亮起 |
| 5 | urandom.randint(0,255) | 生成随机颜色 |
关键参数:
| 参数 | 值 | 说明 |
|---|---|---|
pin | GPIO15 | 信号线连接的引脚 |
n | 30 | 灯带上灯珠的数量 |
timing | 1 | 800kHz速率(WS2812B标准) |
颜色顺序:WS2812B使用的是GRB顺序,但MicroPython的neopixel库已经帮你处理好了,直接写(r, g, b)就行。
第五步:保存运行,看灯带亮起来!
保存代码到开发板,命名 ws2812b.py
点击运行按钮:
- 灯带先全部亮起红色,保持1秒
- 然后随机颜色的光点从左侧流向右侧,每颗灯珠依次点亮
- 接着另一个随机颜色的光点从右侧流回左侧
- 循环往复,形成流动的彩色效果
进阶玩法:做一条彩虹灯带
流动效果只是开始,灯带还能玩出更多花样。比如做一条彩虹渐变:
importneopixelfrommachineimportPinimporttime LED=neopixel.NeoPixel(pin=Pin(15),n=30,timing=1)defwheel(pos):"""生成彩虹色(pos: 0~255)"""ifpos<85:return(pos*3,255-pos*3,0)elifpos<170:pos-=85return(255-pos*3,0,pos*3)else:pos-=170return(0,pos*3,255-pos*3)whileTrue:forjinrange(255):foriinrange(30):LED[i]=wheel((i*8+j)%255)LED.write()time.sleep_ms(20)效果:整条灯带呈现出流动的彩虹渐变,非常炫酷!
WS2812B能做什么?
| 应用场景 | 用途 |
|---|---|
| 桌面氛围灯 | 随音乐律动的彩色灯效 |
| 电脑机箱灯 | 炫酷的RGB灯效 |
| 智能家居 | 客厅背景墙、床边氛围灯 |
| 节日装饰 | 圣诞树、派对装饰 |
| 创意DIY | 灯光互动装置 |
| 状态指示 | 用不同颜色表示设备状态 |
灯珠数量怎么改?
代码中LED_NUM = 30表示灯带有30颗灯珠。如果你的灯带不是30颗,改成实际数量即可:
LED_NUM=60# 60颗灯珠的灯带📌 注意:灯珠越多,耗电越大。30颗灯珠全亮时电流约1.8A,如果灯带较长,建议外接独立5V电源,不要直接从ESP32取电。
全程回顾
| 步骤 | 操作 | 效果 |
|---|---|---|
| 找到课程 | 文档→课程→ESP32+MicroPython→WS2812B灯带 | 了解灯带原理 |
| 认识硬件 | 3根线:VCC、GND、信号线 | 知道怎么接线 |
| 动手接线 | 红→3.3V, 白→GND, 绿→GPIO15 | 硬件就位 |
| 打开代码 | 点击“打开”按钮 | 代码进入编辑器 |
| 保存运行 | Ctrl+S → 选择ESP32 → 运行 | 灯带亮起! |
| 观察效果 | 随机颜色光点来回流动 | 炫酷灯效! |