由於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具體細節,我接下來的文章會講到,今天到這里吧,期望能夠拋磚引玉。
來個最終照片吧,綠燈是繼電器指示燈,白長條燈才是被控燈: