1. 程式人生 > >使用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[] = "在blinker的APP中的裝置金鑰";
char ssid[] = "自己家的wifi";
char pswd[] = "wifi金鑰";

bool oState = false;

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

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

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

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

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

        oState = false;
    }
}

void aligenieQuery(int32_t queryCode)
{
    BLINKER_LOG2("AliGenie Query codes: ", queryCode);

    switch (queryCode)
    {
        case BLINKER_CMD_QUERY_ALL_NUMBER :
            BLINKER_LOG1("AliGenie Query All");
            BlinkerAliGenie.powerState(oState ? "on" : "off");
            BlinkerAliGenie.print();
            break;
        case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
            BLINKER_LOG1("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(2, OUTPUT);
    digitalWrite(2, LOW);

    Blinker.begin(auth, ssid, pswd);

    BlinkerAliGenie.attachPowerState(aligeniePowerState);
    BlinkerAliGenie.attachQuery(aligenieQuery);
}

void loop()
{
    Blinker.run();

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