• 注册
  • 查看作者
  • 使用ESP8266通过blinker控制WS2812灯带

    硬件及硬件接线图

    硬件列表:

    • ESP8266 NodeMCU
    • WS2812B 灯带(60颗)
    • 杜邦线(母对母)3条

    接线图

    使用ESP8266通过blinker控制WS2812灯带

    Arduino 配置

    安装 ESP8266 扩展库不在这里说明了,可查看我另一篇博客 使用ESP8266开发板刷入Deauther用于WiFi攻击测试 。

    1. 安装 blinker Arduino 库

    1. 点击 下载blinker Arduino库 ;
    2. 将下载好的blinker库解压到 我的电脑 > 文档 > Arduino > libraries 文件夹中;
    使用ESP8266通过blinker控制WS2812灯带

    2. 安装 Adafruit_NeoPixel 库

    Github地址:Adafruit_NeoPixel

    方法一(在线安装)

    打开 Arduino, 项目 -> 加载库 -> 管理库,在搜索框中输入 “Neopixel strip”,单击 安装 即可;

    使用ESP8266通过blinker控制WS2812灯带

    方法二(离线安装)

    1. 访问 Adafruit_NeoPixel Releases page
    2. 下载最新版本;
    3. 解压文件;
    4. 打开 Arduino, 项目 > 加载库 > 添加.ZIP库...

    安装成功后在 Arduino 可看到已加载 Adafruit NeoPixel 库。

    使用ESP8266通过blinker控制WS2812灯带

    在App中添加设备,获取 Secret Key

    1. 进入App,点击右上角的 “+“ 号,然后选择 添加设备
    2. 点击选择 Arduino > WiFi接入
    3. 选择要接入的服务商;
    4. 复制申请到的 Secret Key
    使用ESP8266通过blinker控制WS2812灯带

    编写 Arduino 程序

    编码

    打开 Arduino ,使用以下代码,代码来自:blinkerWS2812.ino ;

    修改源码中 auth[] 的值为在App中获取到的 Secret Key ,其他配置可根据自身条件设置。

    #define BLINKER_PRINT Serial
    #define BLINKER_MIOT_LIGHT
    #define BLINKER_WIFI
    #include <Blinker.h>
    #include <Adafruit_NeoPixel.h>
    
    // key,在点灯 App 中获取
    char auth[] = "xxxxxxxxx";
    //  DIN PIN (GPIO15, D8)
    #define PIN 15
    // 灯带 LED 数量
    #define NUMPIXELS 60  
    Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
    
    // 新建组件对象
    BlinkerRGB RGB1("RGB");
    
    // RGB和亮度
    int LED_R=0,LED_G=0,LED_B=0,LED_Bright=180;
    bool WIFI_Status = true;
    void smartConfig()//配网函数
    {
      WiFi.mode(WIFI_STA);
      Serial.println("rnWait for Smartconfig...");
      // 等待手机端发出的用户名与密码
      WiFi.beginSmartConfig();
      while (1)
      {
        Serial.print(".");
        digitalWrite(LED_BUILTIN, HIGH);  
        delay(1000);                      
        digitalWrite(LED_BUILTIN, LOW);    
        delay(1000);
        // 退出等待
        if (WiFi.smartConfigDone())
        {
          Serial.println("SmartConfig Success");
          Serial.printf("SSID:%srn", WiFi.SSID().c_str());
          Serial.printf("PSW:%srn", WiFi.psk().c_str());
          break;
        }
      }
    }
    void WIFI_Set()//
    {
        //Serial.println("rn正在连接");
        int count = 0;
        while(WiFi.status()!=WL_CONNECTED)
        {
            if(WIFI_Status)
            {
                Serial.print(".");
                digitalWrite(LED_BUILTIN, HIGH);  
                delay(500);                       
                digitalWrite(LED_BUILTIN, LOW);    
                delay(500);                 
                count++;
                if(count>=5)//5s
                {
                    WIFI_Status = false;
                    Serial.println("WiFi连接失败,请用手机进行配网"); 
                }
            }
            else
            {
                // 微信智能配网
                smartConfig();
            }
         }  
        /* Serial.println("连接成功");  
         Serial.print("IP:");
         Serial.println(WiFi.localIP());*/
    }
    
    void SET_RGB(int R,int G,int B,int bright)
    {
        // 把灯条变色
        for (uint16_t i = 0; i < NUMPIXELS; i++)
        {
            pixels.setPixelColor(i,R,G,B);
        }
        // 设置亮度
        pixels.setBrightness(bright);
        // 送出显示
        pixels.show();
    }
    
    //APP RGB颜色设置回调
    void rgb1_callback(uint8_t r_value, uint8_t g_value, 
                        uint8_t b_value, uint8_t bright_value)
    {
    
        //digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
        BLINKER_LOG("R value: ", r_value);
        BLINKER_LOG("G value: ", g_value);
        BLINKER_LOG("B value: ", b_value);
        BLINKER_LOG("Rrightness value: ", bright_value);
        LED_Bright = bright_value;
        SET_RGB(r_value,g_value,b_value,LED_Bright);
    }
    
    void setup() {
        // 初始化串口
        Serial.begin(115200);
        // WS2812初始化
        pixels.begin();
        pixels.show();
        pinMode(LED_BUILTIN, OUTPUT);
        #if defined(BLINKER_PRINT)
            BLINKER_DEBUG.stream(BLINKER_PRINT);
        #endif
    
        WIFI_Set();
        // 初始化blinker
        Blinker.begin(auth, WiFi.SSID().c_str(), WiFi.psk().c_str());
        // 注册调节颜色的回调函数
        RGB1.attach(rgb1_callback);
    }
    
    void loop() {
        Blinker.run();
    }

    源码中只实现单色显示,更多颜色或酷炫的效果显示请自己修改源码实现。

    上传至 ESP8266

    修改源码相关配置后,单击 Arduino 的 上传 按钮上传代码至 ESP8266

    使用ESP8266通过blinker控制WS2812灯带

    上传成功

    使用ESP8266通过blinker控制WS2812灯带

    App 配置连接

    连接设备

    打开点灯 App,点击 侧边栏按钮 -> 开发者 -> 开发工具 -> EspTouch/SmartConfig,输入 WiFi 密码后单击 开始配置

    使用ESP8266通过blinker控制WS2812灯带

    配置成功

    使用ESP8266通过blinker控制WS2812灯带

    设备配置

    1. 返回 点灯 blinker App 主页,可看到设备已在线,点击设备进入配置页面;
    使用ESP8266通过blinker控制WS2812灯带
    1. 点击设备 编辑 按钮;

    使用ESP8266通过blinker控制WS2812灯带

    1. 点击编辑按钮后会进入组件编辑状态,点击底部组件列表的 颜色 组件,添加到界面中,然后点击界面中新增的 颜色 组件进入组件编辑界面,将 数据键名 改为 RGB,点击 保存
    使用ESP8266通过blinker控制WS2812灯带
    1. 编辑完成后,点击右上角的 锁定 按钮完成编辑,然后就可以控制灯带了。
    使用ESP8266通过blinker控制WS2812灯带
    使用ESP8266通过blinker控制WS2812灯带

    转载:https://blog.lanweihong.com/posts/46057/

  • 0
  • 0
  • 0
  • 248
  • 请登录之后再进行评论

    登录
  • 动态
  • 单栏布局 侧栏位置: