学物联网,来万物简单IoT物联网!!
一、产品简介
ws2812是一个集控制电路与发光电路于一体的智能外控LED光源。其外型与一个5050LED灯珠相同,每个元件即为一个像素点。像素点内部包含了智能数字接口数据锁存信号整形放大驱动电路,还包含有高精度的内部振荡器和12V高压可编程定电流控制部分,有效保证了像素点光的颜色高度一致。
引脚定义
- DI: 控制信号输入引脚
- VCC:电源5V
- GND:电源地
- DO: 信号输出引脚,串联下一个灯珠
二、技术参数
- 工作电压:5V
- 发送速率:800Kbps
- 亮度显示:支持256级亮度显示,rgb三色支持16777216种颜色的显示
- 通信方式:单线通信
- 工作特性:刷新速率30帧/秒时,级联数不小于1024
- 工作温度:-20°C~85°C
三、软件接口
WS2812 - 创建WS2812驱动对象
- 函数原型
relayObj = WS2812(gpioObj, ledPixel)
- 参数说明
参数 | 类型 | 必选参数? | 说明 |
---|---|---|---|
gpioObj | GPIO | 是 | WS2812控制引脚的GPIO对象 |
ledPixel | int | 否 | 默认ledPixel为24个RGB点灯,开发者根据自己的实际需求创建 |
- 返回值
若WS2812对象创建成功,返回WS2812对象;否则抛出Exception
- 示例代码
from machine import Pin
import ws2812
gpioObj=Pin(2, Pin.OUT, Pin.PULLDOWN)
ws2812Obj = ws2812.WS2812(gpioObj)
print("ws2812 inited!")
- 输出
ws2812 inited!
set(r,g,b,index) - 点亮对应index的RGB点阵灯环
- 函数功能:
点亮对应index的RGB点阵灯环
- 函数原型:
WS2812.set(r,g,b,index)
- 参数说明:
参数 | 类型 | 说明 |
---|---|---|
r | int | 红色灯珠的值,取值范围:0-255 |
g | int | 绿色灯珠的值,取值范围:0-255 |
b | int | 蓝色灯珠的值,取值范围:0-255 |
index | int | 对应的灯珠索引号,范围:0~(ledPixel-1),例如:第一个灯珠的index为0 |
- 返回值:
无
dot(r,g,b,time) - 将RGB点阵灯环逐个点亮,每次只有一个灯珠被点亮
- 函数功能:
将RGB点阵灯环逐个点亮,每次只有一个灯珠被点亮
- 函数原型:
WS2812.dot(r,g,b,time)
- 参数说明:
参数 | 类型 | 说明 |
---|---|---|
r | int | 红色灯珠的值,取值范围:0-255 |
g | int | 绿色灯珠的值,取值范围:0-255 |
b | int | 蓝色灯珠的值,取值范围:0-255 |
time | int | 逐个点灯的时间,单位(ms) |
- 返回值:
无
wipe(r,g,b,time) - 将RGB点阵灯环一一点亮
- 函数功能:
将RGB点阵灯环一一点亮
- 函数原型:
WS2812.wipe(r,g,b,time)
- 参数说明:
参数 | 类型 | 说明 |
---|---|---|
r | int | 红色灯珠的值,取值范围:0-255 |
g | int | 绿色灯珠的值,取值范围:0-255 |
b | int | 蓝色灯珠的值,取值范围:0-255 |
time | int | 逐次点灯的时间,单位(ms) |
- 返回值:
无
rainbow(time) - RGB点阵灯环实现彩虹变换
- 函数功能:
RGB点阵灯环实现彩虹变换
- 函数原型:
WS2812.rainbow(time)
- 参数说明:
参数 | 类型 | 说明 |
---|---|---|
time | int | 彩虹渐变的时间,单位(ms) |
- 返回值:
无
clear(index) - 熄灭对应index的RGB点阵灯环
- 函数功能:
熄灭对应index的RGB点阵灯环
- 函数原型:
WS2812.clear(index)
- 参数说明:
参数 | 类型 | 是否必选 | 说明 |
---|---|---|---|
index | int | 否 | 当不选参数的时候,所有的灯珠会熄灭。 index对应的灯珠索引号,范围:0~(ledPixel-1),例如:第一个灯珠的index为0 |
- 返回值:
无
四、接口案例
- 示例代码
from machine import Pin
import ws2812
gpioObj=Pin(2, Pin.OUT, Pin.PULLDOWN)
ws2812Obj = ws2812.WS2812(gpioObj)
print("ws2812 inited!")
while True:
ws2812Obj.dot(128,0,0,100)
五、工作原理
数据协议采用单线归零码的通讯方式,像素点在上电复位以后,DIN端接受从控制器传输过来的数据,首先送过来的24bit数据被第一个像素点提取后,送到像素点内部的数据锁存器,剩余的数据经过内部整形处理电路整形放大后通过DO端口开始转发输出给下一个级联的像素点,每经过一个像素点的传输,信号减少24bit。像素点采用自动整形转发技术,使得该像素点的级联个数不受信号传送的限制,仅仅受限信号传输速度影响。
ws2812时序波形图:
参考文献及购买链接
[1] WS2812原理介绍
[2] WS2812购买链接