(2018/09/22)
前幾天看到徐爸寫了有關MQTT的應用,今天趕快來測試一下,本文重做一次徐爸的文章內容,並記錄下來!如此一來,就可以利用手機或另一台DIFI透過網路來控制另一台DIFI了,真正做到物聯網的應用!
一、認識MQTT
先要知道 MQTT的Publisher(發布者), Broker(代理人)和Subscriber(訂閱者),以下資料取自 【MQTT教學(一):認識MQTT】(內有MQTT的詳細說明)
根據MQTT 3.1.1版本規格書的描述,MQTT是一種基於「發布∕訂閱」機制的訊息傳輸協定(MQTT is a Client Server publish/subscribe messaging transport protocol),我們可以把它想成雜誌發行和訂閱的機制。MQTT訊息發送端,相當於雜誌出版社,雜誌出版之後並不直接寄給消費者,而是交給經銷商或者書店一般的代理人(broker),來統籌管理發行和訂閱事宜。每一個訊息來源(刊物)都有個唯一的主題名稱(刊物名稱)。
代理人是個伺服器軟體(本文採用iot.eclipse.org),向伺服器發送主題的一方是發布者(publisher),從伺服器獲取主題的一方則是訂閱者(subscriber)。以下圖為例,傳送感測器資料的一邊是發布者,接收感測器資料的一邊則是訂閱者。每個感測器∕微控器的訊息都需要有個主題名稱以利識別。
MQTT的主題(Topic)名稱:MQTT主題名稱是UTF-8(萬國碼)編碼的字串,我們可以自行決定主題名稱,例如,傳送溫度的訊息主題可命名成「溫度」、傳送亮度的訊息主題叫做「照度」…等等。主題名稱也支援類似檔案路徑的階層式命名方式
二、利用一台DIFI按按鍵來遙控另一台DIFI的LED燈
角色:
Broker(代理人):這邊採用 iot.eclipse.org 這台伺服器
Publisher(發布者):一台DIFI
Subscriber(訂閱者):另一台DIFI
Topic(主題):difi_led
DIFI (Publisher(發布者))的程式 (一台DIFI按按鍵)
一樣採用iotBlockly來寫程式,網址:https://iotblockly.com/iotblockly_v1.1/demos/code/index.html
先開啟MQTT Publisher 的範例程式
修改程式內容
DIFI (Subscriber(訂閱者))的程式
一樣採用iotBlockly來寫程式,網址:https://iotblockly.com/iotblockly_v1.1/demos/code/index.html
先開啟MQTT Subscriber 的範例程式
修改程式內容
結果:
當第一台DIFI按下按鍵,另一台DIFI的綠色LED燈亮起
但有時不是很穩定
重點:兩者的client ID不能設一樣!!有些APP client ID就直接取一個亂數,都不會跟別人一樣!!
主題可採用類似檔案路徑的階層式命名方式
例如: 學校/樓層/教室/設備
利用主題來控制多個設備,如下控制二顆LED燈
三、利用手機來遙控DIFI的LED燈
角色:
Broker(代理人):這邊採用 iot.eclipse.org 這台伺服器
Publisher(發布者):手機,採用 IoT MQTT Dashboard 的APP來發布訊息到Broker
Subscriber(訂閱者):DIFI
Topic(主題):difi_led
手機端(Publisher(發布者))
安裝 ioT MQTT Panel 的APP
建立一個連線
新增一個PANEL
DIFI (Subscriber(訂閱者))的程式,同上,不做修改
手機按下APP的ON時,DIFI的綠色LED燈亮起
手機按下APP的OOFF時,DIFI的綠色LED燈滅掉
控制兩顆燈
測試手機端(Publisher(發布者))的另一個APP
安裝 MQTT Dash 的APP
建立一個連線
新增一個PANEL
DIFI (Subscriber(訂閱者))的程式,同上,不做修改
手機按下APP的ON時,DIFI的綠色LED燈亮起
手機按下APP的OOFF時,DIFI的綠色LED燈滅掉
四、利用手機來遙控DIFI的繼電器
DIFI (Subscriber(訂閱者))的程式,有關繼電器的部份,修改如下:
五、利用DIFI的溫度來來觸發DIFI的繼電器
作法同上
但要避免溫度在接近值時,一直啟動與關閉,所以等待1分鐘,再量測溫度