05 玩MQTT及IFTTT
(2021/02/14情人節)
因為Halocode的晶片也是使用ESP32,因此IOT也是它的強項之一!有關WIFI使用的部份前一篇有介紹過,可以進行【雲訊息】的資料傳送,但我比較不喜歡它的封閉性,也就是要去官方註冊帳號才能使用。所以在此要來測試其在MQTT的使用!
一、認識MQTT
上個月來高科大是上NodeMCU及物聯網入門,有關MQTT的介紹可參考:02 利用手機做簡易控制(遠端控制)
先要知道 MQTT的Publisher(發布者), Broker(代理人)和Subscriber(訂閱者),以下資料取自 【MQTT教學(一):認識MQTT】(內有MQTT的詳細說明)
根據MQTT 3.1.1版本規格書的描述,MQTT是一種基於「發布∕訂閱」機制的訊息傳輸協定(MQTT is a Client Server publish/subscribe messaging transport protocol),我們可以把它想成雜誌發行和訂閱的機制。MQTT訊息發送端,相當於雜誌出版社,雜誌出版之後並不直接寄給消費者,而是交給經銷商或者書店一般的代理人(broker),來統籌管理發行和訂閱事宜。每一個訊息來源(刊物)都有個唯一的主題名稱(刊物名稱)。
代理人是個伺服器軟體(本文採用broker.hivemq.com),向伺服器發送主題的一方是發布者(publisher),從伺服器獲取主題的一方則是訂閱者(subscriber)。以下圖為例,傳送感測器資料的一邊是發布者,接收感測器資料的一邊則是訂閱者。每個感測器∕微控器的訊息都需要有個主題名稱以利識別。
MQTT的主題(Topic)名稱:MQTT主題名稱是UTF-8(萬國碼)編碼的字串,我們可以自行決定主題名稱,例如,傳送溫度的訊息主題可命名成「溫度」、傳送亮度的訊息主題叫做「照度」…等等。主題名稱也支援類似檔案路徑的階層式命名方式 ,如: wenyu/home/1f/led
影片教學:
二、使用MQTT積木
參考資料:https://blog.csdn.net/tonycarson/article/details/105338433 ,此文扩展默认的物联网平台是(iot.dfrobot.com.cn),台灣地區可以使用 http://iot.dfrobot.com/ (國際版)
添加MQTT積木,下圖右方那項已停止更新,不要再用了!
成功添加MQTT積木
這MQTT積木的Broker只適用mqtt/tcp,使用1883埠
訂閱主題,可從遠端控制Halocode
我們所使用的Broker為 broker.hivemq.com(有人推broker.emqx.io),原本此積木是用在iot.dfrobot.com.cn的Broker,還好也可以用在一些免費的Broker!
測試時發現【連線WIFI】可能會影響成敗
像我用學校的WIFI連線, mqtt一直無法連線成功
用家中WIFI及手機熱點則沒有問題
當發送者發送on時,會點亮紅色LED燈
當發送者發送off時,會關閉紅色LED燈
訂閱端(Halocode)程式如下:
同時可訂閱及發送 (2023/04/28更新)
記得採用【等待消息以非阻塞】,不是很了解【阻賽】與【非阻塞】的差異!
再利用電腦軟體MQTTBOX當【發布者】
電腦安裝MQTTBox軟體
下載地址:http://workswithweb.com/html/mqttbox/downloads.html (這網站已掛了)
下載
或直接使用【Chrome線上應用程式商店】來安裝
操作說明
也可以利用手機APP來當【發布者】
Android手機安裝 IoT MQTT Panel 的APP(以此為示範);iPhone手機可以安裝IoT OnOff或EasyMQTT (我沒有iphone手機無法測試)
發送主題
每3秒發送一筆聲音響度值出去
程式如下:
按按鈕才把聲音響度發送出去
程式如下:要如下的程式才能成功發送出去
三、利用DFRobot平台進行遠端控制及收集資料
DFRobot IOT平台資訊
平台網址: http://iot.dfrobot.com/
需要先註冊 (隨便亂註冊即可,它不會要求驗證)
取得IOT帳密及TOPIC資料
遠端控制
程式同上面利用Hivemq的Broker一樣,但要更改Server及相關資料
點擊平台上的第一個Device的【Send msg】
輸入on亮燈、輸入off關燈
收集資料
程式同上面利用Hivemq的Broker一樣,但要更改Server及相關資料
一樣每3秒收集一次聲音麥克風的響度
得到的結果
四、認識IFTTT
IFTTT 是個網路服務平台,縮寫的意思是 IF ( if ) T ( this ) T ( then ) T ( that ) ,顧名思義就是「若做了什麼 ( this ) 則 ( then ) 就執行什麼 ( that )」,而在 IFTTT 的服務裡,大概也都是用這種模式在進行,IFTTT 本身沒有太特別的功能,但最厲害的地方就是它串接了許多知名平台的服務,例如 Gmail、Twitter、Facebook...等,也因為如此,你可以透過 IFTTT,用很簡單的方式串接許多社群網站所提供的服務。
連結到 IFTTT 網站:https://ifttt.com/
進入 IFTTT 網站後就是點選「Sign up」註冊帳號並登入,當然它也支援 Google 與 Facebook 的第三方登入
五、利用IFTTT將資料收集到Google試算表
IFTTT的設定:70 凱斯KSB039網網相連之資料收集
題目:將麥克風響度及光敏電阻的值上傳到Google試算表
THIS:
找尋webhooks的服務
輸入事件名稱,如halocode
THAT:
找尋google Sheets的服務
選【加一列到試算表上Add row to spreadsheet】
修改相關名稱,或都不變動,由於只要上傳兩種資料,可以把Value3給刪除掉
完成
Webhooks觸發測試
點擊Webhooks的圖示
點擊右上角的【Documentation】
取得Key
取得GET資料的網址
https://maker.ifttt.com/trigger/halocode/with/key/FqjAK4CPO-AvPqkcZyC2F?value1=麥克風響度值&value2=光敏電阻值
在瀏覽器的網址列輸入 https://maker.ifttt.com/trigger/halocode/with/key/FqjAK4CPO-AvPqkcZyC2F?value1=100&value2=200
到雲端硬碟,之前設定的路徑下,可看到此檔案資料
到mblock5寫程式
添加IFTTT的積木
只有一個積木
完成如下程式
測試後發現,只能成功上傳第一筆資料,第二筆就上傳不上去了!測試失敗!
六、簡易保全系統(有人闖入時會傳LINE告知)
本例也是利用IFTTT,但前例失敗,本例一樣失敗
七、利用Thingspeak收集資料
參考資料:70 凱斯KSB039網網相連之資料收集
使用的網址http://api.thingspeak.com/update?api_key=LP2UW5JW7PS95NYW&field1=0,要記得把https:// 改成http://
免費帳號,間隔15秒才會接收一筆資料
本例採用HTTP GET的方式來傳送資料,一樣使用上面的積木,測試成功。