1. WS2812介绍
WS2812是一种可编程的全彩色LED芯片,相比于其它的LED,具有三大优势:
- 【一线串口通信】
通信只需要一个GPIO口即可完成,通过高低电平的持续时间,传递0和1。 - 【RGB全彩调节】
支持RGB从0-255的调节,可以输出 2^24种不同的颜色。 - 【级联控制】
支持多芯片串联。
2. 接线与级联控制原理
VCC——————-5V
GND——————GND
DIN ——————-开发板GPIO口
DOUT—————-下一个WS2812的DIN
单片机通过一线串口向DIN传递3个8位数据(RGB),实现LED的色彩调节。如果想要点亮多个LED,则需要传递多个24位数据,第一个LED会锁存第一个24位数据,余下的数据则向下一颗LED传递,下一颗LED继续锁存余下数据的第一个24位数据并将剩余的数据继续向下传递,以此类推。
![[WS2812] WS2812 RGB LED 模块的使用](https://img.dunling.com/blogimg/20251129/b54d580b90c943d0a2c27de1032b874b.jpg)
3. 使用Arduino控制WS2812
在Arduino中,可以直接使用 Adafruit_NeoPixel库实现WS2812的控制。
//NUM: 灯珠数量, PIN:接DIN的口
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUM, PIN, NEO_GRB + NEO_KHZ800);
//i:灯柱序号,Color函数返回32位颜色数值
pixels.setPixelColor(i, strip.Color(r, g, b));
//点亮
pixels.show();
//关闭
pixels.clear();
4. 示例
使用Arduino + WS2812实现彩虹渐变色。
#include <Adafruit_NeoPixel.h>
#include <math.h>
#define PIN 5
#define NUM 12
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM, PIN, NEO_GRB + NEO_KHZ800);
int r = 0;
int g = 0;
int b = 0;
void setup() {
// put your setup code here, to run once:
strip.begin();
Serial.begin(115200);
}
void loop() {
for (int j = 0; j < 70; j++){
if (j < 20){
r = 255;
g = ceil(255 * 3 * j / 60);
b = 0;
}else if(j >= 20 && j < 30){
r = ceil(750 - j * (250 * 6 / 60));
g = 255;
b = 0;
}else if(j >= 30 && j < 40){
r = 0;
g = 255;
b = ceil(j * (250 * 6 / 60) - 750);
}else if(j >= 40 && j < 50){
r = 0;
g = ceil( 1250 - j * (250 * 6 / 60));
b = 255;
}else if(j >= 50 && j < 60){
r = ceil( 150 * j * (6 / 60) - 750);
g = 0;
b = 255;
}else{
r = ceil( 150 * j * (6 / 60) - 750);
g = 0;
b = ceil( 1750 - j * (250 * 6 / 60));
}
for ( int i = 0; i < strip.numPixels(); i++ ){
strip.setPixelColor(i, strip.Color(r, g, b));
}
strip.show();
delay(100);
}
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...


