小愛同學吃灰很久了,一直想接入小愛來控制些智慧硬體,無奈小米的IOT開放平台只對企業使用者開放。最近研究了點燈科技的物聯網平台,軟體硬體支持非常豐富,關鍵對於愛好者有免費的版本可以使用,愛了愛了有木有?本篇分享下如何透過Blinker平台接入小愛同學,進而控制聯網的ESP8266點燈。
1. 硬體部份
我使用了如下圖所示ESP8266開發板,其實就是板載了8266最小系統和USB轉串口部份。淘寶上很多,大的區別可能就是串口芯片有Cp40和CP2102之分吧。
ESP8266模組板載了LED燈,連線在GPIO2上,GPIO2輸出高電平燈熄滅,輸出低電平燈點亮,就來控制它吧。
2. 平台部份
在小愛同學APP中智慧家居裝置需要從米家APP中添加。所以,這兩個APP提前下載註冊好。這裏重點說下Blinker APP。
3. 軟體部份
- 安裝ESP8266開發板擴充套件
http://arduino.esp8266.com/stable/package_esp8266com_index.json
這個過程如果你網路不夠科學的話,可能無法完成,官方提供了離線安裝方式, 可點選檢視 。
- 安裝blinker Arduino庫
點選下載庫 ,將下載好的blinker庫解壓到 我的電腦>文件>Arduino>libraries 資料夾中。
- 程式下載
Blinker官方提供了小愛同學的接入流程,以RGB燈的控制為例,介紹了小愛同學的各操作介面,具體可參照 官方介紹 。
我在這裏做了簡化,只用來控制燈的亮滅,只用了電源類操作介面和裝置查詢介面。其實就是實作兩個回呼函式,當接收到小愛同學的命令,會對應進入回呼函式去操作硬體。
程式碼如下,程式碼中的auth、ssid、pswd要填入實際的值。
#define BLINKER_WIFI
#define BLINKER_MIOT_LIGHT
#include <Blinker.h>
char auth[] = "Your Device Secret Key";
char ssid[] = "Your WiFi network SSID or name";
char pswd[] = "Your WiFi network WPA password or WEP key";
bool ledState;
void dataRead(const String & data)
{
BLINKER_LOG("Blinker readString: ", data);
uint32_t BlinkerTime = millis();
Blinker.print("millis", BlinkerTime);
}
void miotPowerState(const String & state)
{
BLINKER_LOG("need set power state: ", state);
if (state == BLINKER_CMD_ON) {
digitalWrite(LED_BUILTIN, LOW);
BlinkerMIOT.powerState("on");
BlinkerMIOT.print();
ledState = true;
}
else if (state == BLINKER_CMD_OFF) {
digitalWrite(LED_BUILTIN, HIGH);
BlinkerMIOT.powerState("off");
BlinkerMIOT.print();
ledState = false;
}
}
void miotQuery(int32_t queryCode)
{
BLINKER_LOG("MIOT Query codes: ", queryCode);
switch (queryCode)
{
case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
BLINKER_LOG("MIOT Query Power State");
BlinkerMIOT.powerState(ledState ? "on" : "off");
BlinkerMIOT.print();
break;
default :
BlinkerMIOT.powerState(ledState ? "on" : "off");
BlinkerMIOT.print();
break;
}
}
void setup()
{
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
BLINKER_DEBUG.debugAll();
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
Blinker.begin(auth, ssid, pswd);
Blinker.attachData(dataRead);
BlinkerMIOT.attachPowerState(miotPowerState);
BlinkerMIOT.attachQuery(miotQuery);
}
void loop()
{
Blinker.run();
}
選擇開發板型別和實際埠號,進行程式下載。
4. 繫結小愛
試著對小愛說:「開啟燈」、「關閉燈」、「燈的狀態」,可能網路不好會有些延遲,不過想要的控制已經實作了。你也可以嘗試去控制些別的裝置了。
小愛同學控制開關 https://www.zhihu.com/video/1232017286912565248