之前几篇文章编写的程序,都是直接新建设备,对接小爱同学,Binker的APP中没有加入控件对设备进行控制。现在我们加入按钮控件对插座类设备进行控制。
数据键名:按键对应的名称,代码新增组件时需要用到
按钮控件类型有三种:
显示文本:
显示图标:用于控件的图标更换
图标颜色:
背景设置:正常 透明 半透明 圆形
这里我们添加的按钮控件属性如下:
数据键名:btn-pwr
按键类型:开关按键
背景设置:圆形
BlinkerButton Button1("btn-pwr");//开关按钮
void button1_callback(const String & state)
{
BLINKER_LOG("get button state: ", state);
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
if (state == BLINKER_CMD_BUTTON_TAP) { //轻触按键 短按
BLINKER_LOG("Button tap!");
// Button1.icon("icon_1");
Button1.color("#FF0000");
Button1.text("Your button name or describe");
Button1.print();
}
else if (state == BLINKER_CMD_BUTTON_PRESSED) { //轻触按键 长按
BLINKER_LOG("Button pressed!");
// Button1.icon("icon_1");
Button1.color("#FFFF00");
Button1.text("Your button name or describe");
Button1.print();
}
else if (state == BLINKER_CMD_BUTTON_RELEASED) {//轻触按键 释放
BLINKER_LOG("Button released!");
// Button1.icon("icon_1");
Button1.color("#FFFFFF");
Button1.text("Your button name or describe");
// Button1.text("Your button name", "describe");
Button1.print();
}
else if (state == BLINKER_CMD_ON) {//开关按键 打开
BLINKER_LOG("Toggle on!");
digitalWrite(pin, HIGH);
oState = true;
// Button1.icon("icon_1");
Button1.color("#0000FF");
Button1.text("ON");
// Button1.text("Your button name", "describe");
Button1.print("on");
}
else if (state == BLINKER_CMD_OFF) {//开关按键 关闭
BLINKER_LOG("Toggle off!");
digitalWrite(pin, LOW);
oState = false;
// Button1.icon("icon_1");
Button1.color("#00FFFF");
Button1.text("OFF");
// Button1.text("Your button name", "describe");
Button1.print("off");
}
else {
BLINKER_LOG("Get user setting: ", state);
// Button1.icon("icon_1");
Button1.color("#FFFFFF");
Button1.text("Your button name or describe");
// Button1.text("Your button name", "describe");
Button1.print();
}
}
Button1.attach(button1_callback);
/*小米设备状态查询回调函数*/
void miotQuery(int32_t queryCode)
{
BLINKER_LOG("MIOT Query codes: ", queryCode);
switch (queryCode)
{
case BLINKER_CMD_QUERY_ALL_NUMBER :
BLINKER_LOG("MIOT Query All");
BlinkerMIOT.powerState(oState ? "on" : "off");
BlinkerMIOT.print();
if(oState)
{
Button1.color("#00FFFF");
Button1.text("OFF");
// Button1.text("Your button name", "describe");
Button1.print("off");
}
else
{
Button1.color("#0000FF");
Button1.text("ON");
// Button1.text("Your button name", "describe");
Button1.print("on");
}
break;
case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
BLINKER_LOG("MIOT Query Power State");
BlinkerMIOT.powerState(oState ? "on" : "off");
BlinkerMIOT.print();
if(oState)
{
Button1.color("#00FFFF");
Button1.text("OFF");
// Button1.text("Your button name", "describe");
Button1.print("off");
}
else
{
Button1.color("#0000FF");
Button1.text("ON");
// Button1.text("Your button name", "describe");
Button1.print("on");
}
break;
default :
BlinkerMIOT.powerState(oState ? "on" : "off");
BlinkerMIOT.print();
break;
}
}
/* *****************************************************************
*
* Download latest Blinker library here:
* https://github.com/blinker-iot/blinker-library/archive/master.zip
*
*
* Blinker is a cross-hardware, cross-platform solution for the IoT.
* It provides APP, device and server support,
* and uses public cloud services for data transmission and storage.
* It can be used in smart home, data monitoring and other fields
* to help users build Internet of Things projects better and faster.
*
* Make sure installed 2.5.0 or later ESP8266/Arduino package,
* if use ESP8266 with Blinker.
* https://github.com/esp8266/Arduino/releases
*
* Make sure installed 1.0.2 or later ESP32/Arduino package,
* if use ESP32 with Blinker.
* https://github.com/espressif/arduino-esp32/releases
*
* Docs: https://doc.blinker.app/
* https://github.com/blinker-iot/blinker-doc/wiki
*
* *****************************************************************
*
* Blinker 库下载地址:
* https://github.com/blinker-iot/blinker-library/archive/master.zip
*
* Blinker 是一套跨硬件、跨平台的物联网解决方案,提供APP端、设备端、
* 服务器端支持,使用公有云服务进行数据传输存储。可用于智能家居、
* 数据监测等领域,可以帮助用户更好更快地搭建物联网项目。
*
* 如果使用 ESP8266 接入 Blinker,
* 请确保安装了 2.5.0 或更新的 ESP8266/Arduino 支持包。
* https://github.com/esp8266/Arduino/releases
*
* 如果使用 ESP32 接入 Blinker,
* 请确保安装了 1.0.2 或更新的 ESP32/Arduino 支持包。
* https://github.com/espressif/arduino-esp32/releases
*
* 文档: https://doc.blinker.app/
* https://github.com/blinker-iot/blinker-doc/wiki
*
* *****************************************************************/
#define BLINKER_WIFI
#define BLINKER_MIOT_OUTLET
#include
#include
int count = 0;
bool WIFI_Status = true;
#define pin D1
char auth[] = "dc76a24d1cc0";
bool oState = false;
//新建组件对象
BlinkerButton Button1("btn-pwr");//开关按钮
// 按键回调函数
void button1_callback(const String & state)
{
BLINKER_LOG("get button state: ", state);
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
if (state == BLINKER_CMD_BUTTON_TAP) { //轻触按键 短按
BLINKER_LOG("Button tap!");
// Button1.icon("icon_1");
Button1.color("#FF0000");
Button1.text("Your button name or describe");
Button1.print();
}
else if (state == BLINKER_CMD_BUTTON_PRESSED) { //轻触按键 长按
BLINKER_LOG("Button pressed!");
// Button1.icon("icon_1");
Button1.color("#FFFF00");
Button1.text("Your button name or describe");
Button1.print();
}
else if (state == BLINKER_CMD_BUTTON_RELEASED) {//轻触按键 释放
BLINKER_LOG("Button released!");
// Button1.icon("icon_1");
Button1.color("#FFFFFF");
Button1.text("Your button name or describe");
// Button1.text("Your button name", "describe");
Button1.print();
}
else if (state == BLINKER_CMD_ON) {//开关按键 打开
BLINKER_LOG("Toggle on!");
digitalWrite(pin, HIGH);
oState = true;
// Button1.icon("icon_1");
Button1.color("#0000FF");
Button1.text("ON");
// Button1.text("Your button name", "describe");
Button1.print("on");
}
else if (state == BLINKER_CMD_OFF) {//开关按键 关闭
BLINKER_LOG("Toggle off!");
digitalWrite(pin, LOW);
oState = false;
// Button1.icon("icon_1");
Button1.color("#00FFFF");
Button1.text("OFF");
// Button1.text("Your button name", "describe");
Button1.print("off");
}
else {
BLINKER_LOG("Get user setting: ", state);
// Button1.icon("icon_1");
Button1.color("#FFFFFF");
Button1.text("Your button name or describe");
// Button1.text("Your button name", "describe");
Button1.print();
}
}
/* 智能配网模式 */
void smartConfig()
{
WiFi.mode(WIFI_STA);//设置STA模式
Serial.println("\r\nWait for Smartconfig...");//打印log信息
WiFi.beginSmartConfig();//开始SmartConfig,等待手机端发出用户名和密码
while(1)
{
Serial.println(".");
digitalWrite(LED_BUILTIN,HIGH);//指示灯闪烁
delay(1000);
digitalWrite(LED_BUILTIN,LOW);//指示灯闪烁
delay(1000);
if(WiFi.smartConfigDone())//配网成功,接收到SSID和密码
{
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 miotPowerState(const String & state)
{
BLINKER_LOG("need set power state: ", state);
if (state == BLINKER_CMD_ON) {
digitalWrite(LED_BUILTIN, HIGH);
digitalWrite(pin, HIGH);
BlinkerMIOT.powerState("on");
BlinkerMIOT.print();
oState = true;
}
else if (state == BLINKER_CMD_OFF) {
digitalWrite(LED_BUILTIN, LOW);
digitalWrite(pin, LOW);
BlinkerMIOT.powerState("off");
BlinkerMIOT.print();
oState = false;
}
}
/*小米设备状态查询回调函数*/
void miotQuery(int32_t queryCode)
{
BLINKER_LOG("MIOT Query codes: ", queryCode);
switch (queryCode)
{
case BLINKER_CMD_QUERY_ALL_NUMBER :
BLINKER_LOG("MIOT Query All");
BlinkerMIOT.powerState(oState ? "on" : "off");
BlinkerMIOT.print();
if(oState)
{
Button1.color("#00FFFF");
Button1.text("OFF");
// Button1.text("Your button name", "describe");
Button1.print("off");
}
else
{
Button1.color("#0000FF");
Button1.text("ON");
// Button1.text("Your button name", "describe");
Button1.print("on");
}
break;
case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
BLINKER_LOG("MIOT Query Power State");
BlinkerMIOT.powerState(oState ? "on" : "off");
BlinkerMIOT.print();
if(oState)
{
Button1.color("#00FFFF");
Button1.text("OFF");
// Button1.text("Your button name", "describe");
Button1.print("off");
}
else
{
Button1.color("#0000FF");
Button1.text("ON");
// Button1.text("Your button name", "describe");
Button1.print("on");
}
break;
default :
BlinkerMIOT.powerState(oState ? "on" : "off");
BlinkerMIOT.print();
break;
}
}
void dataRead(const String & data)
{
BLINKER_LOG("Blinker readString: ", data);
Blinker.vibrate();
uint32_t BlinkerTime = millis();
Blinker.print("millis", BlinkerTime);
}
void setup()
{
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
pinMode(pin, OUTPUT);
digitalWrite(pin, LOW);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
Serial.println("\r\n正在连接WIFI...");
while(WiFi.status()!=WL_CONNECTED)//判断是否连接WIFI成功
{
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());
Blinker.begin(auth,WiFi.SSID().c_str(),WiFi.psk().c_str());
Blinker.attachData(dataRead);
BlinkerMIOT.attachPowerState(miotPowerState);//注册回调函数
BlinkerMIOT.attachQuery(miotQuery);
Button1.attach(button1_callback);
}
void loop()
{
Blinker.run();
}