WS2812驱动

1、WS2812介绍

WS2812系列是控制电路和RGB芯片集成在5050个元件封装内的智能控制LED光源。它内部包括智能数字端口数据锁存器和信号整形放大驱动电路。有效保证像素点光色高度一致。
数据传输协议采用单 NZR 通信方式。像素上电复位后,DIN 口接收控制器的数据,第一个像素采集初始 24 位数据,然后发送到内部数据锁存器,其他数据通过内部信号整形放大电路整形后发送到下一个级联像素通过 DO 端口。

每个像素传输后,信号减少24bit。像素采用自动整形传输技术,使得像素级联数不受信号传输的限制,只取决于信号传输的速度。 LED具有驱动电压低、环保节能、亮度高、散射角大、一致性好、功耗低、寿命长等优点。

2、硬件准备

  • ESP8266 NodeMCU开发板一块
  • WS2812模块(或灯带)一个/条
  • 面板板一个
  • 杜邦线若干
  • 数据线一条

硬件接线如下:

ESP8266 arduino 返回 esp8266 12f arduino_ESP8266

3、软件准备

  • Arduino IDE或VSCode + PlatformIO

在前面的文章中,对如何搭建ESP8266开发环境做了详细的介绍,请参考:

ESP8266-Arduino编程实例-开发环境搭建(基于Arduino IDE)

ESP8266-Arduino编程实例-开发环境搭建(基于PlatformIO)

ESP8266 NodeMCU的引脚介绍在前面的文章中做了详细的介绍,请参考:

  • ESP8266-Arduino编程实例-认识ESP8266

4、代码实现

本次使用WS2812驱动库如下:

  • https://github.com/adafruit/Adafruit_NeoPixel

1)导入依赖库文件

#include <Adafruit_NeoPixel.h>
 
// WS2812数据引脚
#define PIN D2
// WS2812数量
#define NUMPIXELS 1
 
// WS2812驱动对象
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(1, PIN, NEO_GRB + NEO_KHZ800);

2)设备初始化

void setup() {
 // 启动WS2812
 pixels.begin();
}

3)驱动数据传输及显示效果

void loop() {
 // 延时
 int delayval = 500;
 // 对于一组 NeoPixel,第一个 NeoPixel 为 0,第二个为 1,一直到像素数减一
 for(int i=0;i<NUMPIXELS;i++){
 // pixel.Color 采用 RGB 值,从 0,0,0 到 255,255,255
 pixels.setPixelColor(i, pixels.Color(0,255,0));
 // 显示
 pixels.show();
 delay(delayval);
 pixels.setPixelColor(i, pixels.Color(255,0,0));
 pixels.show();
 delay(delayval);
 pixels.setPixelColor(i, pixels.Color(0,0,255));
 pixels.show();
 delay(delayval);
 }
}