前言
? ? 前些年買了一板e(cuò)sp8266 01s共6枚泻拦,通過blinker平臺(tái)復(fù)刻了點(diǎn)亮led燈項(xiàng)目慰技,通過綁定米家設(shè)備秤掌,可以用小愛同學(xué)進(jìn)行語音控制led燈的開關(guān)、顏色以及亮度等等舔糖。同時(shí)也可以通過Home Assistant homekit 對(duì)其設(shè)備進(jìn)行控制(這個(gè)實(shí)現(xiàn)控制過程比較復(fù)雜锅移,折騰要有耐心n,n)嘶是。物聯(lián)網(wǎng)模塊加一個(gè)繼電器行拢,再通過云平臺(tái)獲取的key綁定設(shè)備,就可以實(shí)現(xiàn)對(duì)各種家電器的遠(yuǎn)程開關(guān)控制落包。本章就粗略講述一下我是如何通過esp8266 01s加上繼電器實(shí)現(xiàn)遠(yuǎn)程電腦開機(jī)部蛇!
-
準(zhǔn)備模塊
? USB固件刷寫器和esp8266 01s及繼電器、杜邦線
esp8266 01s+固件刷寫器
|
esp8266+繼電器
|
---|
-
燒錄代碼
?? 實(shí)例代碼
#define BLINKER_WIFI
#define BLINKER_MIOT_OUTLET
#include <Blinker.h>
char auth[] = "***"; //云平臺(tái)獲取的key
char ssid[] = "***"; //WiFi名稱
char pswd[] = "***"; // WiFi密碼
int GPIO = 0;
bool oState = false;
BlinkerButton Button1("switch"); //創(chuàng)建按鈕組件咐蝇,數(shù)據(jù)鍵
void button1_callback(const String & state)
{
BLINKER_LOG("get button state: ", state);
if (state == BLINKER_CMD_BUTTON_TAP) {//響應(yīng)短按
if (digitalRead(LED_BUILTIN) == HIGH) { //若電腦是關(guān)閉狀態(tài)(電腦沒有通過APP啟動(dòng))
digitalWrite(LED_BUILTIN, LOW);
digitalWrite(GPIO, HIGH);
BLINKER_LOG("Button tap!");
Blinker.delay(150);
digitalWrite(GPIO, LOW);
Button1.color("#FFC800");
Button1.text("運(yùn)行中");
Button1.print();
}
}
else if (state == BLINKER_CMD_BUTTON_PRESSUP) {//響應(yīng)長按
if (digitalRead(LED_BUILTIN) == LOW) { //若電腦是開啟狀態(tài)(電腦通過APP啟動(dòng))
digitalWrite(GPIO, HIGH);//繼電器接通
BLINKER_LOG("Button pressed!");
Blinker.delay(5000);
digitalWrite(LED_BUILTIN, HIGH);//eps-01s燈滅
digitalWrite(GPIO, LOW);//5秒后繼電器斷開涯鲁,相當(dāng)于長按電腦開機(jī)鍵5秒
Button1.color("#CCCCCC");
Button1.text("已關(guān)閉");
Button1.print();
}
else { //關(guān)閉狀態(tài)時(shí)LED_BUILTIN為高電平,不亮
Button1.text("沒開機(jī)");//按鍵提示“沒開機(jī)”
Button1.print();
Blinker.delay(3000);
Button1.color("#CCCCCC");
Button1.text("已關(guān)閉");//“沒開機(jī)”變更為“已關(guān)閉”
Button1.print();
}
}
}
void miotPowerState(const String & state, uint8_t num)
{
BLINKER_LOG("need set power state: ", state);
if (state == BLINKER_CMD_ON) {
digitalWrite(LED_BUILTIN, LOW);
digitalWrite(GPIO, HIGH);
Blinker.delay(150);
digitalWrite(GPIO, LOW);
BlinkerMIOT.powerState("on");
BlinkerMIOT.print();
oState = true;
}
else if (state == BLINKER_CMD_OFF) {
digitalWrite(GPIO, HIGH);
Blinker.delay(5000);//改成100-300有序,響應(yīng)短按關(guān)機(jī)抹腿,需配合電腦電源鍵策略,默認(rèn)策略可行旭寿;而且數(shù)值2000以上警绩,小愛會(huì)提示出問題(會(huì)響應(yīng)關(guān)機(jī)動(dòng)作)
digitalWrite(LED_BUILTIN, HIGH);
digitalWrite(GPIO, LOW);
BlinkerMIOT.powerState("off");
BlinkerMIOT.print();
oState = false;
}
}
void miotQuery(int32_t queryCode)//完全復(fù)制來的,寫上盅称,免得串口測試時(shí)一直提示沒有…
{
BLINKER_LOG("MIOT Query codes: ", queryCode);
switch (queryCode)
{
case BLINKER_CMD_QUERY_ALL_NUMBER :
BLINKER_LOG("MIOT Query All");
BlinkerMIOT.powerState(oState ? "on" : "off");
BlinkerMIOT.print();
break;
case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
BLINKER_LOG("MIOT Query Power State");
BlinkerMIOT.powerState(oState ? "on" : "off");
BlinkerMIOT.print();
break;
default :
BlinkerMIOT.powerState(oState ? "on" : "off");
BlinkerMIOT.print();
break;
}
}
void setup()
{
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);//這塊esp8266(指示燈)默認(rèn)高電平關(guān)閉狀態(tài)
pinMode(GPIO, OUTPUT);
digitalWrite(GPIO, LOW); //繼電器(指示燈)默認(rèn)低電平關(guān)閉狀態(tài)
Blinker.begin(auth, ssid, pswd);
BlinkerMIOT.attachPowerState(miotPowerState);
BlinkerMIOT.attachQuery(miotQuery);
Button1.attach(button1_callback);
// Button2.attach(button2_callback);
Blinker.attachHeartbeat(heartbeat);
}
void loop()
{
Blinker.run();
}
?在Arduino IDE中導(dǎo)入blinker庫肩祥,以及開發(fā)板e(cuò)ps8266的庫后室,然后把代碼編譯上傳至esp8266 01s,具體細(xì)節(jié)就不展示了
char auth[] = "平臺(tái)獲取的密匙";
char ssid[] = "WiFi名稱";
char pswd[] = "WiFi密碼";
注意以上三行代碼必須修改為正確信息混狠,不然設(shè)備會(huì)不在線岸霹,沒辦法進(jìn)行下一步測試。
BlinkerButton Button1("自定義按鍵數(shù)據(jù)");
自定義按鈕鍵值将饺,一定要和app上的鍵值一致贡避,不然沒有反應(yīng)
-
上電測驗(yàn)
????點(diǎn)擊按鈕運(yùn)行正常
-
連接線路
set1
????從主機(jī)電源中接線給繼電器模塊供電。
set2
????繼電器的COM和NC口引出導(dǎo)線接入主板上的powersw針腳予弧,其中分線接入了主機(jī)箱的開機(jī)鍵刮吧,這樣就不影響主機(jī)自帶的實(shí)體開機(jī)鍵的使用
-
成果展示
?使用小愛同學(xué)成功控制電腦開機(jī)!
-
結(jié)語
?????最后在測試過程中發(fā)現(xiàn)掖蛤,用blinker平臺(tái)App的點(diǎn)擊按鈕開機(jī)后杀捻,在電腦系統(tǒng)本身正常關(guān)機(jī)的前提下,App的按鈕會(huì)一直保持運(yùn)行中狀態(tài)坠七,導(dǎo)致blinker平臺(tái)的按鈕失效水醋,App上需要長按按鈕模擬關(guān)機(jī)再點(diǎn)擊按鈕才能正常開機(jī)旗笔,所以還是一裝到底彪置,對(duì)小愛同學(xué)說:“下班”,然后不需動(dòng)手即刻關(guān)閉電腦蝇恶!