基于ESP32平台驱动WS2812 RGB灯珠

基于ESP32平台驱动WS2812 RGB灯珠

WS2812


在这里插入图片描述

点击图片购买

WS2812简介

本文由WS2812B-5050展开
WS2812B-5050是一个集控制电路与发光电路于一体的智能外控LED光源;其外型采用最新的molding封装工艺,将IC与发光芯片封装在一个5050的封装尺寸中,每个元件即为一个像素点;像素点内部包含了智能数字接口数据锁存信号整形放大驱动电路,还包含有高精度的内部振荡器和可编程定电流控制部分,有效保证了像素点光的颜色高度一致。下图为我所采用的25位的WS2812B RGB LED开发板。

WS2812驱动说明

在这里插入图片描述
有手册可知 WS2812B的供电电压在3.7V~5.3V,一般5V供电就可以了。

在这里插入图片描述
时序与实现操作(不同品牌的WS2812B在时序上数据传输时间上会有所区别,但原理都一样,跟着手册走就好)。
WS2812B利用一个组持续时间不同的高低电平形成0码、1码与RES复位码。

  • 0码:高电平持续200ns - 380ns后跳变为低电平,低电平持续580ns - 1us;
  • 1码:高电平持续580 - 1us后跳变为低电平,低电平持续580ns - 1us;
  • Resset码:低电平保持时间大于280us

驱动WS2812B需要纳秒级别的延时,
arduino 的函数delay(xx);或者Microsecond();只能实现毫秒或者微秒级别的延时,
所以我们需要使用NOP空填充来写一个延时函数

void Delay_ns(int a) 
{
  for(int i;i<a;i++)
  NOP();
  }

不准确 但能使用。

在这里插入图片描述
级联与数据结构
驱动级联的WS2812可以通过创建一个二维数组的方式去储存每一个级联级的RGB值,这样就可以实现点亮多个级联的WS2812。
需要注意数据结构,本次用到的WS2812B灯珠的数据结构是GRB,市面上一般还有另外一种为RGB数据结构,具体看手册就好。
区别:
GRB结构的灯珠发送0xFF0000显示的是绿色;
RGB结构的灯珠发送0xFF0000显示的是红色。

驱动

ESP-23 WS2812B
5V VCC
GND GND
D4 Din

控制引脚和灯珠数量可直接在.ino文件中更改

#define DataPin 4	//控制引脚
#define Num 8	//灯珠数量

主程序

#include "My-WS2812.h"

#define DataPin 4
#define Num 8

#define BL_Color 0x000000   //关---清空颜色
#define W_Color  0xFFFFFF    //白光
#define R_Color  0xFF0000   //红色
#define G_Color  0x00FF00   //绿色
#define B_Color  0x0000FF   //蓝色



WS2812 ws2812(DataPin);

void setup() {
  // put your setup code here, to run once:
  Init();
}

void loop() {
  // put your main code here, to run repeatedly:
  binlk(BL_Color);  //关闭灯光
  delay(500);
  binlk(W_Color);   //白光
  delay(500);
  binlk(R_Color);   //红光
  delay(500);
  binlk(G_Color);   //绿光
  delay(500);
  binlk(B_Color);   //蓝光
  delay(500);
  runLight (R_Color,G_Color,B_Color);   //跑马灯
  delay(500);

}

效果展示

在这里插入图片描述

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

热门文章

收藏
浏览量:0
创建时间:2022-06-10 18:23