ESP32-S3 WS2812 点灯

ESP32 S32 入门篇之 《WS2812 点灯》,WS2812 是一个集控制电路与发光电路于一体的智能外控LED光源。每个元件即为一个像素点。像素点内部包含了智能数字接口数据锁存信号整形放大驱动电路,还包含有高精度的内部振荡器和可编程定电流控制部分,有效保证了像素点光的颜色高度一致。

数据协议采用单线归零码的通讯方式,像素点在上电复位以后,DIN端接受从控制器传输过来的数据,首先送过来的24bit数据被第一个像素点提取后,送到像素点内部的数据锁存器,剩余的数据经过内部整形处理电路整形放大后通过DO端口开始转发输出给下一个级联的像素点,每经过一个像素点的传输,信号减少24bit。像素点采用自动整形转发技术,使得该像素点的级联个数不受信号传送的限制,仅受限信号传输速度要求。高达2KHz的端口扫描频率,在高清摄像头的捕捉下都不会出现闪烁现象,非常适合高速移动产品的使用。

提醒:进入博主 牛瘪汤 主页了解更多。



开发环境

软件开发环境 Arduino IDE。
开发板选择 : ESP32 Arduino。
开发板库:Adafruit_NeoPixel。
板载可编程 RGB 灯珠,灯珠采用8串联模式,信号控制 IO12,每次输出 24bit x 8 数据,可以实现控制8颗灯珠。

1. WS2812 点灯

WS2812 串联 8 颗灯珠,RGB 单色 8颗灯珠同时点亮,颜色相同。

#include <Adafruit_NeoPixel.h>

#define PIN_NEOPIXEL 12
#define NUMPIXELS    8

Adafruit_NeoPixel pixels(NUMPIXELS, PIN_NEOPIXEL, NEO_GRB + NEO_KHZ800);

void setup() {
  pixels.begin();
  pixels.setBrightness(255);
}

void loop() {
  pixels.fill(pixels.Color(255,0,0));; pixels.show(); delay(500);
  pixels.fill(pixels.Color(0,255,0));; pixels.show(); delay(500);
  pixels.fill(pixels.Color(0,0,255));; pixels.show(); delay(500);
}

2. WS2812 呼吸灯

WS2812 串联 8 颗灯珠,单色呼吸灯效果,RGB三色交替闪烁。

#include <Adafruit_NeoPixel.h>

#define PIN_NEOPIXEL 12
#define NUMPIXELS    8

Adafruit_NeoPixel pixels(NUMPIXELS, PIN_NEOPIXEL, NEO_GRB + NEO_KHZ800);

void setup() {
  pixels.begin();
  pixels.setBrightness(255);
}

void loop() {
  for(int r=0; r<=255; r+=5) {
    pixels.fill(pixels.Color(r,0,0)); // blue breathing lamp
    pixels.show();
    delay(20);
  }
  for(int r=255; r>=0; r-=5) {
    pixels.fill(pixels.Color(r,0,0));
    pixels.show();
    delay(20);
  }

  for(int g=0; g<=255; g+=5) {
    pixels.fill(pixels.Color(0,g,0)); // green breathing lamp
    pixels.show();
    delay(20);
  }
  for(int g=255; g>=0; g-=5) {
    pixels.fill(pixels.Color(0,g,0));
    pixels.show();
    delay(20);
  }

  for(int b=0; b<=255; b+=5) {
    pixels.fill(pixels.Color(0,0,b)); // red breathing lamp
    pixels.show();
    delay(20);
  }
  for(int b=255; b>=0; b-=5) {
    pixels.fill(pixels.Color(0,0,b));
    pixels.show();
    delay(20);
  }
}

3. WS2812 跑马灯

WS2812 串联 8 颗灯珠,单色跑马灯,RGB三色交替闪烁。

#include <Adafruit_NeoPixel.h>

#define PIN_NEOPIXEL 12
#define NUMPIXELS    8
#define RGB					3

Adafruit_NeoPixel pixels(NUMPIXELS, PIN_NEOPIXEL, NEO_GRB + NEO_KHZ800);

void setup() {
  pixels.begin();
  pixels.setBrightness(100);
  pixels.clear();
}

void loop() {
  for(int i=0; i<(NUMPIXELS x RGB); i++) {
    pixels.clear();
    switch(i / RGB) {
      case 0:
        pixels.setPixelColor(i, pixels.Color(255,0,0));
      break;
      case 1:
        pixels.setPixelColor(i, pixels.Color(0,255,0));
      break;
      case 2:
        pixels.setPixelColor(i, pixels.Color(0,0,255));
      break;
      default:
      break;
    }
    pixels.show();
    delay(200);
  }
}

4. WS2812 流水灯

WS2812 串联 8 颗灯珠,颜色交替变化,类似彩虹流水灯。

#include <Adafruit_NeoPixel.h>

#define PIN_NEOPIXEL 12
#define NUMPIXELS    8

Adafruit_NeoPixel pixels(NUMPIXELS, PIN_NEOPIXEL, NEO_GRB + NEO_KHZ800);

uint16_t j = 0;

void setup() {
  pixels.begin();
  pixels.setBrightness(128);
}

void loop() {
  for(int i = 0; i < NUMPIXELS; i++) {
    int pixelHue = (i * 65536L / NUMPIXELS + j) & 65535;
    pixels.setPixelColor(i, pixels.gamma32(pixels.ColorHSV(pixelHue)));
  }
  pixels.show();
  j += 128;
  delay(30);
}

结尾

文章都看到完了,就不点个关注吗,老铁!
欢迎关注博主–牛瘪汤

更多推荐