ESP32-S3 控制 WS2812
·
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);
}
结尾
文章都看到完了,就不点个关注吗,老铁!
欢迎关注博主–牛瘪汤 。
更多推荐
所有评论(0)