小愛同學脫離局域網遠程控制開關?

小愛同學脫離局域網遠程控制開關?

這是幾個月前做的一個小項目,也是從大佬那裏學來的,爲了防止忘記過程,自己做個記錄,同時分享給需要的人

這個項目需要用到的東西有:電腦端Arduino IDE,小米手機小愛同學,手機APP點燈·blinker,esp8266nodemcu,以及杜邦線麪包板小燈


1、Arduino IDE根據自己的系統安裝合適的版本 我目前用的是1.8.9版本

安裝esp8266拓展,這裏點燈科技提供了資源,需要的小夥伴去找官方開發文檔

以及下載安裝blinker-Arduino庫:
方法一:打開軟件IDE,在項目–》加載庫–》管理庫下搜索blinker進行安裝在這裏插入圖片描述
安裝最新版本

方法二:找到點燈科技官方開發文檔,快速入門esp8266WiFi接入
在這裏插入圖片描述
點擊下載,根據要求安裝

到目前爲止,電腦端的配置就完成了

2、手機APP點燈下載
在這裏插入圖片描述
這樣獲取到secret Key,到時候代碼裏要用到

3、打開IDE 新建文件 輸入代碼

#define BLINKER_WIFI
#define BLINKER_MIOT_MULTI_OUTLET    //設置爲小愛多個插座的模式

#include <Blinker.h>
BlinkerButton Button1("btn-km");     //設置blinkerapp內數據鍵名
BlinkerButton Button2("btn-kckm");   //這裏只用了其中三個
BlinkerButton Button3("btn-gckm");  
BlinkerText Text1("text_1");


char i;

char auth[] = "密鑰(secret Key)";
char ssid[] = "WiFi名稱";
char pswd[] = "WiFi密碼";

bool oState[5] = { false };    //設置5路開關控制

void miotPowerState(const String & state, uint8_t num)     //小愛同學控制指令 
{
    BLINKER_LOG("need set outlet: ", num, ", power state: ", state);   
    if(num==1){
      i=D1;          //指定每一路開關對應在開發板上的通道接口
    }else if(num==2){
      i=D2;
    }else if(num==3){
      i=D5;
    }

    if (state == BLINKER_CMD_ON) {      
        digitalWrite(i, HIGH);      //這裏控制模式都是點動模式 

        BlinkerMIOT.powerState("on", num);
        BlinkerMIOT.print();

        oState[num] = true;
        
    }
    else if (state == BLINKER_CMD_OFF) {
        digitalWrite(i, LOW);

        BlinkerMIOT.powerState("off", num);
        BlinkerMIOT.print();

        oState[num] = false;

        if (num == 0)
        {
            for (uint8_t o_num = 0; o_num < 5; o_num++)
            {
                oState[o_num] = false;
            }
        }
    }
}

void miotQuery(int32_t queryCode, uint8_t num)
{
    BLINKER_LOG("AliGenie Query outlet: ", num,", codes: ", queryCode);

    switch (queryCode)
    {
        case BLINKER_CMD_QUERY_ALL_NUMBER :
            BLINKER_LOG("MIOT Query All");
            BlinkerMIOT.powerState(oState[num] ? "on" : "off", num);
            BlinkerMIOT.print();
            break;
        case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
            BLINKER_LOG("MIOT Query Power State");
            BlinkerMIOT.powerState(oState[num] ? "on" : "off", num);
            BlinkerMIOT.print();
            break;
        default :
            BlinkerMIOT.powerState(oState[num] ? "on" : "off", num);
            BlinkerMIOT.print();
            break;
    }
}

void dataRead(const String & data)
{
    BLINKER_LOG("Blinker readString: ", data);

    Blinker.vibrate();
    
    uint32_t BlinkerTime = millis();
    
    Blinker.print("millis", BlinkerTime);
}


void button1_callback(const String & state)     //點燈app內控制按鍵觸發
{
    BLINKER_LOG("get button state: ", state);
        digitalWrite(D1, HIGH);
        Blinker.print("開門命令已經處理");
        Text1.print("shuju");
        
}

void button2_callback(const String & state)     //點燈app內控制按鍵觸發
{
    BLINKER_LOG("get button state: ", state);
        digitalWrite(D2, HIGH);

}

void button3_callback(const String & state)     //點燈app內控制按鍵觸發
{
    BLINKER_LOG("get button state: ", state);
        digitalWrite(D5, HIGH);

}


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

    pinMode(D1, OUTPUT);
    digitalWrite(D1, LOW);
    pinMode(D2, OUTPUT);
    digitalWrite(D2, LOW);
    pinMode(D5, OUTPUT);
    digitalWrite(D5, LOW);
    

    Blinker.begin(auth, ssid, pswd);
    Blinker.attachData(dataRead);
    
    BlinkerMIOT.attachPowerState(miotPowerState);
    BlinkerMIOT.attachQuery(miotQuery);
    Button1.attach(button1_callback); 
    Button2.attach(button2_callback); 
    Button3.attach(button3_callback); 
}

void loop()
{
    Blinker.run();
}

我們的esp8266長這樣,在代碼中主要用了3路接口,如果有基礎的可以看出,分別是D1、D2和D5,看不懂的也沒有關係,主要是在這三處:

如果需要小改動的可以用其他端口代替,當然代碼中還有其他的地方需要替換

從這裏可以看出,在啓動後,三個端口的電平爲低電平,燈不亮

以及這裏可以看出,當小愛同接收到適當命令時,端口輸出高電平
廢話不多說了,我們將程序燒錄,接線

4、打開IDE,連接esp8266

選擇開發板,確定端口
在IDE上先驗證,再上傳

在這裏插入圖片描述再進行硬件連接:

在這裏插入圖片描述
D1接紅燈正極,D2接藍燈正極,D5接綠燈正極,三個小燈的負極一起接到開發板的GND

5、打開點燈app可以看到設備在線

6、我們進入米家APP,在我的–》其他平臺設備–》添加點燈科技,關聯賬號,就可以看到我們有了5個插座開關,其中前面三個是我們三個小燈的開關:

在這裏插入圖片描述

7、我們再進入小愛同學APP新建訓練,假如我們D1燈泡是紅燈,我們就可以設置你對小愛說的話:打開我的紅燈,小愛的迴應就是設備控制,選擇小燈插座一,打開插座:

以此類推我們就有了打開三個燈泡的指令,關閉三個燈泡的指令

在這裏插入圖片描述
在這裏插入圖片描述

感興趣的小夥伴快來試試吧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章