Arduino下掌控板的WS2812B彩灯控制
-
RGB LED原理
掌控板上的3个RGB LED灯采用的是WS2812B——智能控制LED光源,控制电路和RGB芯片集成在一个5050个组件的封装中。内部包括智能数字端口数据锁存器和信号整形放大驱动电路。灯带的接口是IO17/P7(如图1所示)。
数据传输协议采用单一NZR通信方式(单总线)。像素上电复位后,DIN端口接收控制器的数据,第一个像素采集初始的24位数据,然后发送给内部数据锁存器,另一个由内部信号整形放大电路整形的数据通过DO端口发送给下一个级联像素。每个像素传输后,信号减少24位。像素采用自动整形传输技术,使得像素级联数不受信号传输的限制,只依赖于信号传输的速度。
图1 RGB LED原理图 -
NeoPixel库的安装和使用
Adafruit_NeoPixel库是专为Arduino平台设计的,用于控制Adafruit NeoPixels、FLORA RGB智能像素以及兼容设备(如WS2811、WS2812、WS2812B、SK6812等)的库。
在arduino的库管理中,查询Adafruit NeoPixel库,找到后安装,如图2所示。
图2 Adafruit NeoPixel库的安装
#define PIN 17 // 控制灯带的引脚
#define NUM_LEDS 32 // 灯带上灯的数量
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
其中:
NUM_LEDS:灯的数量
PIN:灯带的连接引脚
NEO_GRB + NEO_KHZ800:使用RGB模式控制ws2812类型灯带,灯带的频率为800KHz
#include <Arduino.h> // 引入Arduino核心库,提供基本的输入输出功能
#include <Adafruit_NeoPixel.h> // 引入Adafruit NeoPixel库,用于控制可寻址的RGB LED灯带
#define PIN 17 // 定义连接到NeoPixel灯带数据输入端的Arduino引脚
#define NUM_LEDS 3 // 定义灯带上LED的数量
// 初始化NeoPixel灯带对象,指定LED数量、连接的引脚和颜色顺序
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
strip.begin(); // 初始化NeoPixel库,配置引脚和LED数量等
}
void loop() {
strip.setPixelColor(0, 50, 0, 0); // 设置第一个LED为红色(忽略亮度值,使用RGB颜色模式)
strip.setPixelColor(1, 0, 50, 0); // 设置第二个LED为绿色
strip.setPixelColor(2, 0, 0, 50); // 设置第三个LED为蓝色
strip.show(); // 发送数据到灯带,更新LED的颜色
delay(1000); // 等待一秒钟
}
运行后分别显示红绿蓝三种颜色。
图3 运行效果