使用ESP8266通过blinker控制WS2812灯带–转载

发布于 2021-02-14  11 次阅读


硬件及硬件接线图

硬件列表:

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

接线图

接线

Arduino 配置

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

1. 安装 blinker Arduino 库

  1. 点击 下载blinker Arduino库
  2. 将下载好的blinker库解压到 我的电脑 > 文档 > Arduino > libraries 文件夹中;
libraries

2. 安装 Adafruit_NeoPixel 库

Github地址:Adafruit_NeoPixel

方法一(在线安装)

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

搜索库

方法二(离线安装)

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

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

安装成功

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

  1. 进入App,点击右上角的 “+“ 号,然后选择 添加设备
  2. 点击选择 Arduino > WiFi接入
  3. 选择要接入的服务商;
  4. 复制申请到的 Secret Key
获取Key

编写 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("\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

上传

上传成功

上传成功

App 配置连接

连接设备

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

开发工具

配置成功

配置成功

设备配置

  1. 返回 点灯 blinker App 主页,可看到设备已在线,点击设备进入配置页面;
设备列表
  1. 点击设备 编辑 按钮;

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

参考

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

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

原文链接:https://www.lwhweb.com/posts/46057/


一个喜欢爱搞、爱玩的、笨笨的小站!