使用Blinker+ESP8266接入天貓精靈
阿新 • • 發佈:2018-12-21
背景:入手天貓精靈後,一直覺得不能白白浪費這個“智慧大腦”,想把家裡的電器變為智慧家居(直接買智慧傢俱的略過)。
思路:控制電器的開關其實就是控制家裡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); // } }