2017年8月24日

NodeMCU與Blynk製作物聯網天氣站

上回製作天氣站(以arduino製作的雲端天氣站),才三年前的事情,不過製作的難度和呈現界面 卻因為科技而大大改變了。

當時把感測器和Arduino結合之後,為了達到資料儲存與呈現,我得把資料送到pushing box這個網站,再請pushing box把資料推送到Google表單,所以pushing box就像是個機器人一樣,每隔幾秒收到資料後就去填寫Google表單。

而如果我要取得過去幾個月的氣溫資料圖表,我還很難從Google試算表中撈出來,因為資料量太大了。我是下載後,再用程式打撈出來繪圖(gnuplot繪製室內氣溫與氣壓對照圖)

才過沒多久,這些繁雜的程序已經簡化到非常簡單了。就以我這篇介紹的Blynk為例吧,這個服務它同時可以作到接收資料、儲存資料、呈現資料(用App),然後一切動作熟悉的話就是半個小時內搞定。





這篇沒有其他圖片介紹怎麼做,因為純粹就是寫起來讓我以後可以看。如果對這服務有興趣的話,可以再查其他網站的介紹,或是看Blynk的流程說明

製作流程如下


1.手機安裝Blynk的App,用FB或Google帳號登入後,建立一個新專案,它會產生一串英數字的token,然後用App內的功能把Token寄回信箱。



2.下載Arduino IDE,然後在檔案/偏好設定中,增加額外的開發版管理員網址如下
http://arduino.esp8266.com/stable/package_esp8266com_index.json
接下來到工具/開發板搜尋ESP8266,找到之後點擊空白處,出現安裝按鈕,進行安裝。
(這步驟的意義,是在讓Arduino可以擁有ESP8266的安裝開發環境)



3.安裝Library
3.1.因為目的是要做天氣站,我使用dht11的感測器,所以要安裝DHT的library。直接在Arduino IDE的Sketch->Import Library,搜尋DHT,找到後就安裝。

3.2 安裝arduino的Blynk程式庫,下載這個壓縮檔,這是Blynk的程式庫(library)。用上述步驟再安裝這個程式庫

4.用瀏覽器進入這個網址,這是Blynk的程式碼產生器。選擇自己的開發版、wifi連接界面、Token等。比方說我用的是NodeMCU、wifi就用自帶的ESP8266 wifi,Token就填入第一步驟收到的那串東西,而在Example當中,可以找到Dht11。選好之後,右邊窗格會自動產生程式碼。你把這串程式碼貼到Arduino IDE裡面,再改一下你的wifi ssid和Password(以下兩行)
char ssid[] = "YourNetworkName"; char pass[] = "YourPassword";


理論上,把這些上傳到NodeMCU就可以了。不過我實作發現我的程式會卡在 timer.setInterval這個函數。所以後來我改了一些部份,是把loop()裡頭的timer.run();刪掉,換成sendSensor();,然後再增加一行delay(1000);

這樣感覺不太專業,不過至少程式是順利了。


5.當上述程式都上傳到NodeMCU之後,把DHT11接上NodeMCU。DHT11的供電是3-5.5V,所以"+"請接上NodeMCU的VU腳,"-"就接上Gnd,至於Out則是按照程式碼的說明接上GPIO 2,也就是D4的位置。

6.順利的話,只要開啟Arduino的序列埠監控視窗,傳輸速率選擇9600,應該就會看到相關訊息。例如順利連上wifi、取得ip是多少,溫度、濕度各是多少。基本上看到這些訊息之後,你的NodeMCU就已經開始把資料都送到Blynk的雲端資料庫了。


7.手機blynk的程式界面設計方式,你回到你一開始第一步驟新增的專案,右上角的加號可以新增許多不同種的小元件。以本文章唯一那張圖片為例,那個用的是superchart的元件。

新進blynk的使用者都有2000個能量點,而每個小工具都有不同消耗的能量點,在此你可以任意試用。雖然你增加了一個小工具,你擁有的能量點會變少,但是當你把那個小工具刪除後,能量點又會還給你,所以盡量亂用沒關係。當然這能量點也都是可以再付費購買的。

如何將NodeMCU街收到的溫度資料呈現在手機App上呢?我用以下簡圖說明

dht11-->NodeMCU--->V6........Blynk雲端.........V6---->Blynk App

在我們剛剛上傳的程式碼中,NodeMCU是把溫度資料送到V6這個虛擬腳位。(就是以下這行程式碼)
Blynk.virtualWrite(V6, t);

所以我們只要在Blynk的專案中,接收V6這個虛擬腳位的數值,Blynk App就可以自動呈現這個數值的圖表出來,就這麼容易。而如果要呈現濕度,則是用到v5這個虛擬腳位。當然這些腳位的編號都是可以自己在程式碼中變更的。


以下是我玩這個Blynk想到的一些問題和解答
Q. Blynk可以幾秒紀錄一次資料?
A. 我在程式碼中設定一秒上傳一次資料,事後也的確在Blynk的資料中看到一秒一筆資料。


Q. 上傳的資料如何下載?
A. 用Blynk App的專案往右滑,有下載成csv檔案的選項。裡頭的時間是用unix timestamp。
可以用試算表轉換成人熟悉的時間戳記
(資料/86400000)+data(1970,1,1)

Q.可以用很多台手機收同一個設備的資料嗎?
A.可以,但是要讓每一台手機的Blynk  App都登入同一個帳號才行。


Q.Blynk雲端資料庫可以儲存多少資料?
A.目前不知道,就App的呈現界面,最多可以呈現最近3個月的資料。所以如果想要更久的資料,大概要每三個月自己手動下載一次舊的資料。