注:這是我的第一個教學帖,有什麼疑問與遺漏請留言。
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協定
了解了板子結構就開始動手吧!
Lets Start!
你需要有一部有已經裝上Arduino IDE 版本1.6.5以上的電腦,三四條母杜邦線,兩個LED, nodeMcu Lua,Android手機傳輸數據線,網絡
- 先下載並安裝CP2102的韌體,讓電腦認出nodemcu。
- 開啟Arduino IDE,到preference-> Additional Board Manager 添加這個url http://arduino.esp8266.com/versions/2.0.0/package_esp8266com_index.json
- 再到Tools -> Board Manager, 搜尋欄位輸入ESP8266安裝搜尋出現的第一個結果(應該也只有一個)
- 安裝完畢以後,重啟Arduino IDE,到Tools 底下就出現Adafruit Huzzah ESP8266的選項了。點選以後就可以開始 code了~
刷韌體的參考來源
為了方便nodemcu與雲端,手機溝通。這裡直接使用Yeelink的雲端服務,讓nodemcu能從雲端讀存取數據。配合yeelink的手機客服端就可以從手機控制nodemcu了啦。
- 先到Yeelink官網-http://www.yeelink.net 註冊賬戶。登錄以後到管理首頁記錄下你的API 鑰匙。
- 到“我的設備”底下點擊“添加設備”。需要注意的是地理位置不含中國以外的地區所以選香港
- 接著進入你剛添加的設備裡,添加傳感器。傳感器類型選擇“開關型”,而我把我的傳感器命名為r1, r2。
- 在這裡你需要把兩個傳感器ID,設備API地址記錄下來。
一切設定好以後就可以開始看code了。下載連結
最後只要把你 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的。
控制開關的方式可以通過yeelink網站傳感器選項控制,也可以下載yeelink在Android / iOS的移動客戶端控制
debug/ 有蟲!
1.如果開啟serial monitor 以後顯示亂碼的話, 表示你的板子可能是9600版的
這時候把右下角的baud選項換成9600,且更改code裡的這個數字(115200 -> 9600)
2. 如果你上傳失敗可以試試按著板子上Flash的按鈕,再按下RST。這是看到ESP8266板上的LED閃爍就放開RST接著才放開Flash。這時候板子進入待刷狀態,可是再試試用Arduino IDE刷入你的程式。
Current Problem / 現有問題
由於nodeMcu無法再一次刷新裡讀取數個感應器數據,因此數據必須分開刷新時獨立讀取(四個感應器讀取時間,實測結果落在4到7秒間)。如果要讀取的感應數據越多每一個感應器的刷新時間會越長。刷新時間也受限於網速於伺服器端速度的影響。(yeelink伺服器極有可能在中國,因此反應時間必然受到一道牆的牽制)。解決這個問題的方法唯一辦法必須是通過設立自己的私服器,加速get post的過程。
Future / 未來發展方向
使用輸出接到Relay上就能實現智能插座?
接上各種天氣感應器(溫度,濕度,風速),佈設自己的天氣站台?
網絡控制的機器人?