esp8266物聯網開發二:Arduino名門正派


由於micropython網上資料挺少,整體用起來挺費力,而且很多軟硬件廠商並不會把重心放到micropython上,所以決定使用arduino ide和C語言配合來進行,開始吧。

1. arduino環境配置

首先,需要下載arduino ide壓縮包並進行安裝,可以去arduino官網找到我們需要的版本,然后進行安裝,這里不再過多描述。

然后,需要添加ESP8266的配置,由於文件在國外,需要FQ,可以參考此文章中的鏈接進行:https://www.arduino.cn/thread-76029-1-1.html

一切都安裝好之后,看到的界面如下:

 

之后就可以進行正常的編碼了。

注意,串口監視器功能,如果配置不好,會有亂碼存在的可能,這時候需要做如下的設置來解決亂碼:

首先,把電腦字體為clearType字體的勾去掉,可以去控制面板里面找。

其次,燒寫的波特率要和串口監視器的波特率設置的一樣。

 

 2. 通過繼電器連接小愛同學操作LED

相信大家在網上看到很多的例子了。我這里也做成功了,具體來說一下過程吧。

首先,去點燈科技網站,下載其Blinker庫,並將下載的庫解壓后,放到C:\Users\sscy\Documents\Arduino\libraries文件夾中,整體如下:

 

然后,書寫代碼,使得可以通過wifi控制繼電器開關LED,具體的函數api講解,請點擊:https://arduino-esp8266.readthedocs.io/en/latest/reference.html,相關github:https://github.com/esp8266/Arduino

#define BLINKER_WIFI
#define BLINKER_MIOT_LIGHT//支持小愛同學
#include <Blinker.h>

char auth[] = "xxxxxxx";//app中獲取到的Secret Key(密鑰)
char ssid[] = "cxsr";
char pswd[] = "scy251147";

int GPIO = 16; //定義繼電器輸入引腳為GPIO/0

// 新建組件對象
BlinkerButton ButtonOpen("btn-open");
BlinkerButton ButtonClose("btn-close");

// 按下BlinkerAPP按鍵即會執行該函數
void ButtonOpen_callback(const String & state) {
    BLINKER_LOG("get button state: ", state);
    digitalWrite(GPIO, 1);
    Blinker.vibrate();
}

void ButtonClose_callback(const String & state) {
    BLINKER_LOG("get button state: ", state);
    digitalWrite(GPIO, 0);
    Blinker.vibrate();
}

void miotPowerState(const String & state)
{
    BLINKER_LOG("need set power state: ", state);

    if (state == BLINKER_CMD_ON) {
        digitalWrite(GPIO, 1);

        BlinkerMIOT.powerState("on");
        BlinkerMIOT.print();
    }
    else if (state == BLINKER_CMD_OFF) {
        digitalWrite(GPIO, 0);

        BlinkerMIOT.powerState("off");
        BlinkerMIOT.print();
    }
}

// 如果未綁定的組件被觸發,則會執行其中內容
void dataRead(const String & data)
{
    BLINKER_LOG("Blinker readString: ", data);
}

void setup() {
    // 初始化串口,並開啟調試信息,調試用可以刪除
    Serial.begin(115200);
    BLINKER_DEBUG.stream(Serial);
    // 初始化IO
    pinMode(GPIO, OUTPUT);
    digitalWrite(GPIO, HIGH);
    
    // 初始化blinker
    Blinker.begin(auth, ssid, pswd);
    Blinker.attachData(dataRead);
    
    ButtonOpen.attach(ButtonOpen_callback);
    ButtonClose.attach(ButtonClose_callback);

    BlinkerMIOT.attachPowerState(miotPowerState);

}

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

 然后,按照上面給的鏈接,安裝好點燈APP,進入設置,創建自己的設備,然后會獲得分配的密匙,此密匙寫到程序中的auth數組變量中。同時需要注意的是,開燈按鈕的名稱要為 btn-open, 關燈按鈕的名稱要為 btn-close。整體設置完畢之后的圖示如下:

 

設置完畢之后,我們通過arduino ide,設置好芯片,然后燒寫到硬件中,編譯過程中一些warn提示不必管,直接看最后編譯結果,注意紅圈部分:

 

 燒寫完畢,重置硬件上的reset按鈕,同時打開串口監視器,可以看到已經自動聯網了:

 

 此時,打開點燈app,可以看到設備上線了:

 

 然后點進去操作打開和關閉燈的按鈕,可以看到燈能被正常的打開關閉了,說明我們的設備上MQTT服務器是ok的。

 

3. 接入小愛同學

首先,打開米家APP,在我的->其他平台設備中,找到點燈科技,然后將設備同步過來,同步完畢后,關閉米家。

然后,打開小愛同學APP,在訓練計划中,添加我的訓練,如下圖所示:

 

添加完畢,就可以嘗試使用小愛同學語音操作了,比如喚醒小愛同學后,說開燈,然后就會發現燈亮了,說關燈,然后就會發現燈滅了:

 

 

是不是很酷炫呢?

 

最后說明一下,之所以能網控LED,是因為點燈科技提供了MQTT服務端做指令轉發,使得通過小愛同學發出的指令,通過點燈科技的MQTT服務端下發給了點燈科技的Blink.h中的MQTT客戶端,然后客戶端由於訂閱了按鈕點擊事件,所以才能觸發開關燈操作。

MQTT具體細節,我接下來的文章會講到,今天到這里吧,期望能夠拋磚引玉。

來個最終照片吧,綠燈是繼電器指示燈,白長條燈才是被控燈:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM