NodeMcu+Yeelink = 網絡控制開關?

注:這是我的第一個教學帖,有什麼疑問與遺漏請留言。

Introduction

NodeMcu是基於ESP8266 WiFi模組衍生出來的開發版。它的特點是價格便宜淘寶上隨便找價格都是約140台幣左右)、處理能力遠勝Arduino且具有WiFi連結功能。
我買來的NodeMcu已經包含SiLab的CP2102 USB to Serial訊號轉換IC,編譯時不需要接上。

ESP8266規格如下:

-32bit 低功率 MCU處理器(普通運作時脈是80Mhz也可超頻到160Mhz)

-820.11/b/g/n,2.4WiFi,支援WPA/WPA2/WEP協定

NODEMCU_DEVKIT_V1.0_PINMAP
腳尾旁邊GPIO的數字是Arduino 程式裡所認定的腳尾數,因此如果未來再arduino 裡設定腳尾時,位子以GPIO的號碼為例而不是板上的號碼

了解了板子結構就開始動手吧!

Lets Start!

你需要有一部有已經裝上Arduino IDE 版本1.6.5以上的電腦,三四條母杜邦線,兩個LED, nodeMcu Lua,Android手機傳輸數據線,網絡

  1. 先下載並安裝CP2102的韌體,讓電腦認出nodemcu。
  2. 開啟Arduino IDE,到preference-> Additional Board Manager 添加這個url  http://arduino.esp8266.com/versions/2.0.0/package_esp8266com_index.json    Screen Shot 2016-02-04 at 10.36.39 AM
  3. 再到Tools -> Board Manager, 搜尋欄位輸入ESP8266安裝搜尋出現的第一個結果(應該也只有一個)Screen Shot 2016-02-04 at 10.43.42 AM
  4. 安裝完畢以後,重啟Arduino IDE,到Tools 底下就出現Adafruit Huzzah ESP8266的選項了。點選以後就可以開始 code了~_20160204_105033

刷韌體的參考來源

為了方便nodemcu與雲端,手機溝通。這裡直接使用Yeelink的雲端服務,讓nodemcu能從雲端讀存取數據。配合yeelink的手機客服端就可以從手機控制nodemcu了啦。

  1. 先到Yeelink官網-http://www.yeelink.net  註冊賬戶。登錄以後到管理首頁記錄下你的API 鑰匙。
  2. 到“我的設備”底下點擊“添加設備”。需要注意的是地理位置不含中國以外的地區所以選香港Screen Shot 2016-02-04 at 10.59.39 AM
  3. 接著進入你剛添加的設備裡,添加傳感器。傳感器類型選擇“開關型”,而我把我的傳感器命名為r1, r2。
  4. 在這裡你需要把兩個傳感器ID,設備API地址記錄下來。

一切設定好以後就可以開始看code了。下載連結

Screen Shot 2016-02-04 at 3.12.34 PM

最後只要把你 yeelink 之前相關的資料輸入到相對的欄位上,再把code上傳到nodemcu裡

  • api key number = 帳戶的API鑰匙
  • device id = 先前api網址上這一段數字(例: http://api.yeelink.net/devices/321523,321523就是device id碼)
  • your SSID name =  有網絡的WiFi熱點名字
  • SSID password=  WiFi密碼
  • sensor id 1  = 傳感器ID號碼
  • sensor id 2  = 傳感器2 ID號碼

注意記得到Arduino IDE ->Tools -> Port 選擇/dev/cu.SLAB_USBtoUART(或類似的選項)才能順利的把code刷到nodeMCU裡。

上傳順利的話點擊IDE右上角的Serial Monitor,將右下角的baud換成115200()。如果連結順利,你的開關狀態就會顯示在上面了。

最後我把2個LED正極分別接到nodemcu的D2,D3腳尾,負極接到GND。這裡不需要電阻的原因在於ESP8266本身輸出電壓為3.3V電流小於13mA,所以直接接上短時間內是不會燒壞我的LED的。

_20160204_120131

 

控制開關的方式可以通過yeelink網站傳感器選項控制,也可以下載yeelink在Android / iOS的移動客戶端控制

debug/ 有蟲!

1.如果開啟serial monitor 以後顯示亂碼的話, 表示你的板子可能是9600版的

這時候把右下角的baud選項換成9600,且更改code裡的這個數字(115200 -> 9600)

Screen Shot 2016-02-04 at 11.54.03 AM
除了Serial Monitor baud rate要換以外, Arduino 程式裡這一行也要改成9600

2. 如果你上傳失敗可以試試按著板子上Flash的按鈕,再按下RST。這是看到ESP8266板上的LED閃爍就放開RST接著才放開Flash。這時候板子進入待刷狀態,可是再試試用Arduino IDE刷入你的程式。

_20160204_103300
usb 旁兩個按鈕: flash , rst

Current Problem / 現有問題

由於nodeMcu無法再一次刷新裡讀取數個感應器數據,因此數據必須分開刷新時獨立讀取(四個感應器讀取時間,實測結果落在4到7秒間)。如果要讀取的感應數據越多每一個感應器的刷新時間會越長。刷新時間也受限於網速於伺服器端速度的影響。(yeelink伺服器極有可能在中國,因此反應時間必然受到一道牆的牽制)。解決這個問題的方法唯一辦法必須是通過設立自己的私服器,加速get post的過程。

Future  / 未來發展方向

使用輸出接到Relay上就能實現智能插座?

接上各種天氣感應器(溫度,濕度,風速),佈設自己的天氣站台?

網絡控制的機器人?