锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

esp8266控制ws2813b灯条

时间:2023-09-28 14:37:02 10灯条连接器

我们知道ws2812是三线系统。三条线包括:正负电源和信号线。购买成本相对便宜,实用性强。只有一条信号线才能控制多个灯。ws2812系列不包括断点续传功能,即中间的灯坏了,信号不会向下传输。如果响应断点续传功能,可以考虑以下几点ws2813b如下图所示:

在库管理工具搜pixel,选择Adafruit NeoPixel,安装时选择最新版本。

接线,如果灯条不长,电源直接esp8266上的5V、GND,若灯条较长,建议外接电源,esp8266的GND和灯条GND连接共地,使用信号线D0、使用一条线,具有断点续传功能。

一、灯光简单

#include  #define PIN        0  ///信号输出引脚GPIO0 #define NUMPIXELS  12  //灯个数  Adafruit_NeoPixel led(NUMPIXELS, PIN, NEO_GRB   NEO_KHZ800);  void setup() {    led.begin();   led.setBrightness(255); //设置亮度 (0~255) }  void loop() {   for (int j = 0; j < 13; j  ) {    led.setPixelColor(j, led.Color(100, 90, 255));   led.show();     delay(50);   } delay(3000);   for (int j = 0; j < 13; j  ) {    led.setPixelColor(j, led.Color(255,0,);//红色   led.show();     delay(50);   } delay(3000);   for (int j = 0; j < 13; j  ) {    led.setPixelColor(j, led.Color(0, 255,0));//绿色   led.show();     delay(50);   } delay(3000);   for (int j = 0; j < 13; j  ) {    led.setPixelColor(j, led.Color(0, 0, 255)   led.show();     delay(50);   } delay(3000);  for (int j = 0; j < 13; j  ) {    led.setPixelColor(j, led.Color(255,255,);//黄色   led.show();     delay(50);   } delay(3000);  for (int j = 0; j < 13; j  ) {    led.setPixelColor(j, led.Color(255,97,);//橙色   led.show();     delay(50);   } delay(3000); }

效果:

ws2813b演示视频

二、http控制亮灯

我们用的是apifox发送http消息,esp8266做http接收端、控制灯开关等及颜色。

#include  #include  #include  //路由器WIFI和密码 const char* ssid = "***";//wifi为自己设置 const char*  password = "***"; String message = ""; ///静态地址,网关,子网掩码 IPAddress local_IP(192, 168, 31, 112); IPAddress gateway(192, 168, 31, 1); IPAddress subnet(255, 255, 255, 0); //创建server WiFiServer server(80);//口号,随意修改,范围0-65535 #define PIN        0  //GPIO0接口 #define NUMPIXELS  12  ///彩灯数量 Adafruit_NeoPixel led(NUMPIXELS, PIN, NEO_GRB   NEO_KHZ800); void setup() {   //波特率   Serial.begin(115200);   WiFi.config(local_IP, gateway, subnet);//设置静态IP   WiFi.mode(WIFI_STA);   WiFi.begin(ssid, password);//路由器WiFi名称和密码   //连接WIFI   while (WiFi.status() != WL_CONNECTED) {     delay(500);     Serial.print(".");   }   Serial.println(WiFi.localIP());   server.begin();   led.begin();   led.setBrightness(255); //设置亮度 (0~255) } void loop() {   if (WiFi.status() != WL_CONNECTED) {     WiFi.begin(ssid, password);     while (WiFi.status() != WL_CONNECTED) {       delay(500);       Serial.print(".");     }   }   DynamicJsonDocument  doc(1024);   WiFiClient incomingClient = server.available();   if (incomingClient) {     // 客户端请求信息通过串口监视器输出     if (incomingClient.find("\r\n\r\n")) {       while (incomingClient.available()) {         message = message   char(incomingClient.read());       }       Serial.println(message);       deserializeJson(doc, message);       JsonObject obj = doc.as();       String action = obj["action"];       String num = obj["num"];       String color = obj["color"];       // 数据信息通过串口监控器输出分析       Serial.println(action);       if (action == "open") {         if (color == "red") {           for (int i = 0; i < obj["num"].size(); i  ) {             int j = obj["num"][i].as();             led.setPixelColor(j, led.Color(255, 0, 0));             led.show();             delay(50);           }         }         if (color == "blue") {           for (int i = 0; i < obj["num"].size(); i  ) {             int j = obj["num"][i].as();             led.setPixelColor(j, led.Color(0, 0, 255));             led.show();             delay(50);           }         }         if (color == "green") {           for (int i = 0; i < obj["num"].size(); i  ) {             int j = obj["num"][i].as();             led.setPixelColor(j, led.Color(0, 255, 0));             led.show();             delay(50);           }         }       }       if (action == "close") {         for (int i = 0; i < obj["num"].size(); i  ) {           int j = obj["num"][i].as();           led.setPixelColor(j, led.Color(0, 0, 0));           led.show();           delay(50);         }       }     }     String httpResponse = "HTTP/1.0 200 OK\r\n"                           "Connection: close\r\n"                           "Content-Type: application/json;\r\n"                           "\r\n"                           "{\"code\":1}";     incomingClient.print(httpResponse);     message = "";   } } 

aifox保护json信息内容如下:

{"action":"open",
"color":"red",
"num":[1,2,3]
}

解释:action是灯的状态:包括open close 两种
     color是灯的颜色,设计的三种包括 red  green  blue
     num:是指哪个灯,可以是单个,也可以是几个

简单说,就是你想让哪个灯什么颜色,什么状态

演示

http消息控制ws2813亮灯

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章