LINE Bot聊天機器人程式開發教學(七):從ESP8266/Arduino控制板觸發Line發布訊息

美國亞馬遜Amazon購物商城於2015年三月底推出名叫Dash Button的物聯網裝置,它是一個無線聯網的按鈕,按一下按鈕就能下單購買該按鈕代表的商品:

Amazon Dash Button

本文將使用ESP8266控制板(如:NodeMCU或Wemos D1 mini)製作「一鍵」發Line訊息的物聯網按鈕。假設在廚房放一個物聯網按鈕,按下它就發Line通知老公洗碗;在門口放一個按鈕,按一下Line就會發送空氣品質訊息;把按鈕改成「磁簧開關」安裝在門窗,或者「PID人體紅外線偵測器」,這個小裝置就變成防盜器,若門窗被打開,Line就會發送入侵通知。

從ESP8266控制板觸發Line發送訊息

透過Line推送(push)與群發(multicast)訊息

Line開發者帳號支援推送訊息功能,指令語法如下:

psuh(推送)訊息指令

其中的使用者ID並不是Line App的「個人資料」欄位裡顯示的ID,而是Line指派的唯一識別碼,你可以在你的Line應用程式的Channel settings(頻道設定)頁面QR Code下方的Other(其他)單元看到你的Line ID:

Line使用者ID

或者,對「LINE Bot聊天機器人程式開發教學(六):讀取並傳回空氣品質狀況給使用者」文章的Line聊天機器人發送‘Me’訊息,它也會回覆你的Line ID。「訊息物件」的「訊息類型」,可以是文字、圖像、貼圖…等格式,詳請參閱Line技術文件的Message objects單元

若要同時發送訊息給多人,可先用陣列存放使用者的Line ID

用陣列存放使用者的Line ID

再透過multicast()方法傳送訊息:

multicast()方法傳送訊息

底下的程式片段將會同時發送文字和圖像

其中的「預覽圖像」尺寸上限240 x 240,檔案大小不得超過1MB;「原始圖像」尺寸上限1024 x 1024,檔案大小不得超過1MB,詳閱Line API文件的image單元

由於本文使用的Heroku雲端應用程式平台不支援寄存圖檔,所以筆者直接引用放在本網站裡的圖片。你可以先把圖檔上傳到flikr, dropbox, google drive….等任何雲端儲存空間,再分享網址給你的Line程式使用。

處理ESP8266訊息發送請求的Node.js程式

假設我們打算佈署3個連接Line的ESP8266控制板,為了區別這些板子,每個控制板都被設置了唯一的識別名稱

設置唯一識別名稱的ESP8266控制板

負責處理Line訊息的node.js程式,將新增一個處理/btn路徑的路由,並接收包含key(密碼)和id(裝置識別名稱)參數的查詢字串:

處理Line訊息的/btn路徑

設置密碼是為了避免Node路由被隨意觸發,處理/btn資源請求的node.js程式片段如下,若密碼錯誤,它將回應HTTP 401認證錯誤訊息,在網頁上顯示“ERROR!”;若密碼驗證成功,則在網頁上呈現接收到的識別名稱

處理/btn資源請求的node.js程式片段

加上推送Line訊息的程式碼如下,它將依據控制板傳入的識別名稱,決定要發送什麼訊息。

加上推送Line訊息的程式碼

底下是完整的node.js碼(index.js檔),請參閱「LINE Bot聊天機器人程式開發教學(六):讀取並傳回空氣品質狀況給使用者」文末的操作說明,將它上傳到Heroku雲端應用程式平台。

上傳到Heroku之後,你可以先用瀏覽器測試,輸入底下的網址,你的Line聊天機器人將會推送「洗碗」的訊息:

處理Line訊息的/btn路徑

觸發Line聊天機器人的ESP8266/Arduino程式

本範例程式修改自《超圖解物聯網IoT實作入門》第12章「讓NodeMCU扮演網路前端上傳資料(IFTTT)」一節,使用NodeMCU內建的Flash按鈕來觸發執行前端程式。

完整的ESP8266程式碼如下,請自行修改Heroku應用程式名稱,以及你在上文的Node.js程式裡面設定的密碼。此控制板的名稱設定成 “wash_dish”:

編譯並上傳到NodeMCU控制板後,開啟序列埠監控視窗,等待控制板Wi-Fi連線成功,再按下控制板的Flash按鈕,它將連結到你的Heroku應用程式並接收伺服器的回應,而Line機器人也將推送訊息給你。

序列埠監控視窗

延伸閱讀

2 thoughts on “LINE Bot聊天機器人程式開發教學(七):從ESP8266/Arduino控制板觸發Line發布訊息

  1. Hello Cubie,

    每次看完你的文章, 總是會想再把東西拿出來實作一遍. 想請教一下, 是否有想過出一本專門針對ESP8266的教學書?! 因為它真的CP值很高, 而且台灣針對ESP8266的教學書, 真的很少… 目前我只有看過一本而已. 超圖解的二本書籍我都入手了, 很期待你下一次的新作~~~

發表迴響

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