基于Bliker的小度控制继电器

一、前期准备

  1. D1 UNO R3 WIFI 开发板,
  2. 继电器
  3. 电源
  4. 小度音箱
  5. Blinker 账户
  6. 百度账户
  7. Arduino IDE
  8. Blinker library 0.3.4
  9. ESP8266 开发板支持库 2.7.1

二、设备及接线图
在这里插入图片描述
基于Bliker的小度控制继电器_第1张图片

三、程序
/*******************************************

  • 本代码采用D1 UNO R3 WIFI + 继电器板通过测试
    /
    /
    ***********************************************************
    很多时候,#define 后只有一个参数,经常出现在头文件的开始处。
    解释:
    定义宏,并在预处理过程中将其替换为空字符串(即删除)。
    这样做主要是为了标记某些内容,使程序阅读者能够清楚标记表明的意义,同时又不影响被编译的源代码。
    也就是说,用法同define后接两个参数,只是后一个参数为空字符串。用途包括:
    (1)定义一个符号用来给#if(n)def判断。
    (2)多文件编译中防止头文件被重复包含。
    **********************************************************************/
    #define BLINKER_WIFI
    #define BLINKER_PRINT Serial
    //此句允许小度APP扫描到此设备
    #define BLINKER_DUEROS_OUTLET

#include
//设备连接BLINKER及家中的WIFI
char auth[] = “Blink app生成的密钥”;
char ssid[] = “wifi名字”;
char pswd[] = “wifi密码”;

bool oState = false;
//Blinker APP中控制继电器的按钮
BlinkerButton btn_TVP(“btn-TVP”);

int TV_Pin = D5;
//与小度APP进行电源状态交互
void duerPowerState(const String & state)
{
BLINKER_LOG("need set power state: ", state);

if (state == BLINKER_CMD_ON) {
    digitalWrite(TV_Pin, HIGH);

    BlinkerDuerOS.powerState("on");
    BlinkerDuerOS.print();

    oState = true;
}
else if (state == BLINKER_CMD_OFF) {
    digitalWrite(TV_Pin, LOW);

    BlinkerDuerOS.powerState("off");
    BlinkerDuerOS.print();

    oState = false;
}

}
//用户自定义设备查询的回调函数:
void duerQuery(int32_t queryCode)
{
BLINKER_LOG("DuerOS Query codes: ", queryCode);

switch (queryCode)
{
    case BLINKER_CMD_QUERY_ALL_NUMBER :
        BLINKER_LOG("DuerOS Query All");
        BlinkerDuerOS.powerState(oState ? "on" : "off");
        BlinkerDuerOS.print();
        break;
    case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
        BLINKER_LOG("AliGenie Query Power State");
        BlinkerDuerOS.powerState(oState ? "on" : "off");
       BlinkerDuerOS.print();
        break;
    default :
        BlinkerDuerOS.powerState(oState ? "on" : "off");
        BlinkerDuerOS.print();
        break;
}

}

void dataRead(const String & data)
{
BLINKER_LOG("Blinker readString: ", data);

Blinker.vibrate();

uint32_t BlinkerTime = millis();

Blinker.print("millis", BlinkerTime);

}
//Blinker APP 按钮控制命令
void btn_TVP_callback(const String & state) //点灯app内控制按键触发
{
BLINKER_LOG("get button state: ", state);
digitalWrite(TV_Pin, !digitalRead(TV_Pin));
}
void setup()
{
Serial.begin(115200);
//debug 命令
BLINKER_DEBUG.stream(BLINKER_PRINT);
BLINKER_DEBUG.debugAll();
//继电器接入公共端和常开端口,电压初始化为低电压,接入高电压后吸合供电
pinMode(TV_Pin, OUTPUT);
digitalWrite(TV_Pin, LOW);

Blinker.begin(auth, ssid, pswd);
Blinker.attachData(dataRead);

BlinkerDuerOS.attachPowerState(duerPowerState);
BlinkerDuerOS.attachQuery(duerQuery);
btn_TVP.attach(btn_TVP_callback); 

}

void loop()
{
Blinker.run();
}

以上程序基于Arduino IDE–实例–Blinker–Blinker_AliGenie–AliGenie_OUTLET修改而来。
Blinker APP 中设置一个按钮,命名为“btn_TVP”,语音设置:打开电视机–on,关闭电视机–off

你可能感兴趣的:(基于Bliker的小度控制继电器)