使用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 ,其他配置可根据自身条件设置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#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("\r\nWait 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:%s\r\n", WiFi.SSID().c_str());
      Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
      break;
    }
  }
}
void WIFI_Set()//
{
    //Serial.println("\r\n正在连接");
    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灯带

参考

使用ESP8266接入“天猫精灵”控制七彩灯(WS2812)的颜色/亮度-开源

点灯科技-使用esp8266 & WiFi接入

版权声明:mark1991 发表于 2021-06-18 17:10:48。
转载请注明:使用ESP8266通过blinker语音控制WS2812灯带 | 零基础电子

暂无评论

暂无评论...