使用Blinker+ESP8266接入天猫精灵

使用Blinker+ESP8266接入天猫精灵

背景:入手天猫精灵后,一直觉得不能白白浪费这个“智慧大脑”,想把家里的电器变为智能家居(直接买智能家具的略过)。
思路:控制电器的开关其实就是控制家里220V电路火线的通断一样。
硬件:继电器(某宝:¥5上下)、ESP8266(某宝:¥5上下)、USB转TTL(调试工具¥10上下)、天猫精灵(双11,¥69上下)、排线若干
软件:Arduino、Blinker物联网

开始工作:
1、首先注册Blinker账户,下载APP,并在APP上添加设备,使用MQTT接入(天猫精灵只能使用此方法)。
2、在APP中查看设备密钥(12位)
3、打开Arduino,去该地址blinker库文件地址下载库文件,并放到Arduino的安装目录下的library目录下。
4、如果不想麻烦,直接在Arduino中打开示例Blinker-Aligenie,然后烧写进ESP8266中。
5、在Blinker的APP中,刷新设备,查看设备是否正在在线。
6、在天猫精灵的APP中,添加”智能家居“中找到Blinker,并登录blinker的账户,由此,在blinker中登录的设备也就在天猫精灵中可以看到了。
7、至此,可以用天猫精灵控制设备了。
附上我的测试代码:

//天猫精灵,打开传感器
#define BLINKER_PRINT Serial
#define BLINKER_MQTT
#define BLINKER_ALIGENIE_OUTLET

#include <Blinker.h>



char auth[] = "点灯科技密匙";   //换成APP获取到的密匙
char ssid[] = "你家wifi名称";          //WiFi账号
char pswd[] = "你家wifi密码";   //WIFI密码

bool oState = false;



//-------------------------------------这是开关初始化---------------------------------------------
// 新建组件对象
BlinkerButton Button1("abcd");

// 按下按键即会执行该函数
void button1_callback(const String & state) {
    BLINKER_LOG("get button state: ", state);
    if (state=="on") {
        digitalWrite(D5, HIGH);
        // 反馈开关状态
        Button1.print("on");
    } else if(state=="off"){
        digitalWrite(D5,LOW );
        // 反馈开关状态
        Button1.print("off");
    }
}
//-------------------------------------这是开关初始化---------------------------------------------


void aligeniePowerState(const String & state)
{
    BLINKER_LOG("need set power state: ", state);

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

        BlinkerAliGenie.powerState("on");
        BlinkerAliGenie.print();
  Button1.print("on");////------------------------------------按钮图片切换为打开-------------------------------------------
        oState = true;
    }
    else if (state == BLINKER_CMD_OFF) {
        digitalWrite(D5, LOW);

        BlinkerAliGenie.powerState("off");
        BlinkerAliGenie.print();
 Button1.print("off");/////------------------------------------按钮图片切换为关闭-------------------------------------------
        oState = false;
    }
}

//void aligenieQuery(int32_t queryCode)
//{
//    BLINKER_LOG("AliGenie Query codes: ", queryCode);
//
//    switch (queryCode)
//    {
//        case BLINKER_CMD_QUERY_ALL_NUMBER :
//            BLINKER_LOG("AliGenie Query All");
//            BlinkerAliGenie.powerState(oState ? "on" : "off");
//            BlinkerAliGenie.print();
//            break;
//        case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
//            BLINKER_LOG("AliGenie Query Power State");
//            BlinkerAliGenie.powerState(oState ? "on" : "off");
//            BlinkerAliGenie.print();
//            break;
//        default :
//            BlinkerAliGenie.powerState(oState ? "on" : "off");
//            BlinkerAliGenie.print();
//            break;
//    }
//}

void setup()
{
    Serial.begin(115200);

    pinMode(D5, OUTPUT);//------------------------------------初始化:设置为输出-------------------------------------------
    digitalWrite(D5, LOW);//-------------------------------------初始化:开始为低电平---------------------------------------------

    Blinker.begin(auth, ssid, pswd);

    BlinkerAliGenie.attachPowerState(aligeniePowerState);
//  
      Button1.attach(button1_callback); //------------------------------------这里要调用开关---------------------------------------------
 
}

void loop()
{
    Blinker.run();

//    if (Blinker.available()) {
//        BLINKER_LOG2("Blinker.readString(): ", Blinker.readString());
//
//        uint32_t BlinkerTime = millis();
//
//        Blinker.vibrate();
//        Blinker.print("millis", BlinkerTime);
//    }
}

发表评论