從ESP8266連結Node.js並傳送JSON數據

本單元旨在補充《超圖解物聯網IoT實作入門》第12章「讓NodeMCU扮演網路前端上傳資料(IFTTT)」單元。IFTTT網站在2016年底做了小改版原本的Recipe(方案)改名成Applet(小程式)、channel(管道)改成service(服務)。IFTTT的Maker服務看似不受影響,原有的觸發(trigger)連結仍可運作,只是之前設定的Gmail信箱沒有送出通知郵件,而且我也無法進入如12-41頁所示的參數設定畫面。

IFTTT的Maker服務

使用Node.js建立一個接收來自NodeMCU(ES8266微控制板)前端傳入的JSON資料,並且把資料透過e-mail轉寄的伺服器端程式。在IFTTT的問題修復之前,讀者可以先用此程式進行實驗。當然,你也可以把此Node.js程式佈署在家裡的小電腦(自建雲)或者像Heroku, koding,…等,支援Node.js的web hosting(網站主機)或雲端運算平台。

本單元程式修改自第三章「接收與處理POST資料」,以及第六章「透過Node傳送電子郵件」單元,解析JSON資料的Node.js程式,請參閱「從Arduino透過POST方法傳遞JSON資料給Node.js伺服器程式的補充說明」這一篇貼文。

Node.js + NodeMCU (ESP8266) + Gmail

接收與解析POST傳送的JSON數據的Node.js程式

底下是此Node.js程式需要使用的套件,請先在你的node程式資料夾新增一個如下內容的package.json檔,再透過npm進行安裝:

Node.js(伺服器端)程式碼如下,筆者把接收JSON數據的路徑設置成“/json”:

筆者把上面的Node.js程式命名成ifttt.js儲存

以POST方法傳送JSON數據的NodeMCU程式

修改12-44頁的IFTTT自訂函式,把原本連結IFTTT的URL路徑和埠號,改成Node.js程式的主機路徑和埠號,GET方法也改成POST。請將其中的“192.168.1.19”改成你自己的Node.js主機IP位址。

修改完畢後,編譯並上傳到NodeMCU控制板。

從NodeMCU連結Node.js

先執行Node.js程式,再按下NodeMCU控制板上的“FLASH”按鈕,Node.js將顯示如下的溫濕度值,並且透過Gmail送出郵件通知:

Node.js程式執行結果

NodeMCU也將在Arduino的序列埠監控視窗,顯示如下的回應:

序列埠監控視窗

如果在執行過程中,Node.js回應如下的錯誤訊息,代表Gmail的帳號密碼設定錯誤:

請參閱第五章「啟用Gmail的兩步驟認證寄送郵件」單元,設定Gmail帳號。

延伸閱讀

2 thoughts on “從ESP8266連結Node.js並傳送JSON數據

  1. 老師您好 請問int httpCode = http.POST(“{\"temp\":22, \"humid\":56}")這段程式,怎麼把傳送資料作為變數來使用

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *