esp8266-LED控制
使用esp8266控制LED灯带
全文仅为个人总结
在此文中,使用arduino IDE,esp8266(NodeMCU),一条市面上常见的LED灯带(三口,+5v,Din,GND)使用Adafruit_NeoPixel库函数。
灯带说明
三接口的灯带,其实只有一个数据传输口(Din),好吧,其实我也没接触过其他的灯带
- +5v就是接电源正极
- GND接地或者接电源负极
- Din就是数据传输通道
这个灯带的所有灯都通过这个Din来控制。
注意点,该灯带数据传输有方向,有方向,有方向!图中有一个黑色小箭头,就是数据传输方向。逆向传输没有好结果
其次,灯带上每盏LED都有一个编号,从0开始依次增加。假设将灯带从第3,4盏led灯中间切断,那么原来的编号全部重置(原第4盏灯变成了新的灯带的第0盏灯)
该灯带上面的灯是RGB三色,通过控制三色亮度来显示其他颜色。
每种原色都是0~255区间。(0,0,0)为不亮,(255,255,255)为最亮白光。
Adafruit_NeoPixel说明
头文件:#include <Adafruit_NeoPixel.h>
新建灯带对象:Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
- LED_COUNT:led灯的数量
- LED_PIN:控制数据输出接口(与Din相连的引脚)
- NEO_GRB + NEO_KHZ800:数据模式
以下是模式的几个选项:
NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
NEO_KHZ400 400 KHz (classic ‘v1’ (not v2) FLORA pixels, WS2811 drivers)
NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products)
NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
NEO_RGBW Pixels are wired for RGBW bitstream (NeoPixel RGBW products)
几个常用的函数方法:
strip.Color(rand()%255,rand()%255,rand()%255);//设置灯带RGB颜色(返回uint32_t类型值)
strip.setPixelColor(i,light2c);//设置第i盏灯为light2c(uint32_t类型)色
strip.show();//更新灯带状态
strip.setBrightness(light2bright);//设置灯带亮度
更多详细接口说明戳我(☄⊙ω⊙)☄ .
呼吸灯效果
以下为简单的 随机颜色呼吸灯效果 代码:
注意,我使用的是esp8266(NodeMCU)开发板
#include <Adafruit_NeoPixel.h>//灯带库函数
#include<ctime>
#define PIN D1//定义引脚
#define NUMPIXELS 29//定义led灯数量
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);//定义灯带(确定灯长,输出口,输出规则)
int delayval2 = 40;
void setup(){
srand((unsigned)time(NULL)); //设置随机数
pixels.setBrightness(25); //设置灯带亮度
pixels.begin(); //NeoPixel输出准备数据引脚
}
void loop() {
uint32_t light2c = pixels.Color(rand()%255,rand()%255,rand()%255);//设置灯带RGB颜色
int light2bright = 10;
for(int i=0;i<NUMPIXELS;i++){
pixels.setPixelColor(i,light2c);//设置第i盏灯为light2c色)
pixels.show();//更新灯带
}
while(true){
light2bright+=10;
pixels.setBrightness(light2bright);//设置灯带亮度
pixels.show();
delay(delayval2);
if(light2bright>=200)
break;
}
while(true){
light2bright-=10;
pixels.setBrightness(light2bright);
pixels.show();
delay(delayval2);
if(light2bright<=10)
break;
}
}
直接arduino上 上传即可。color函数的三个参数依次为R G B 的亮度。
注意要点1:数据传输有方向!有方向!不要逆向传输(灯带上有一个黑色小三角显示方向)
注意要点2:遇到颜色不对可能有两种情况,NEO_GRB + NEO_KHZ800这个模式和灯带不匹配,或者电压不稳定或者不够
注意要点3:如果是不亮,注意焊接处问题,以及是否连接正确(引脚,电源方面)
注意要点4:当你改动了你的灯带效果,记得把你改动的效果show()上去,不然会不显示(就是说,只有show之后,效果 才会在灯带里面显示出来)