(上圖是網路上找的)幾年前開始玩物聯網,由於自己比較熟ASP.NET與SQL Server,所以資料我一直是透過HTTP來傳遞,在好幾個月之前美麗蓮的陳老闆一直跟我說目前物聯網最新的資料傳輸方式是使用MQTT,叫我要跟上時代的趨勢,可是吼,我年紀大了,很不想去學習新的東西,我的龍桃子命運鋼彈做了快兩年都還沒做好,我只想要抽時間去把還沒完成背包做完。

說歸說,不過在資訊這個領域是很殘酷的,一些技術一沒跟上,就會被科技的潮流甩的遠遠的,為了那些整天泡在我辦公室的學生有新的東西可以玩,所以前兩天也把MQTT玩了一下,並留下相關內容供學生參考。

MQTT是由IBM的Andy Stanford-Clark博士和Arcom(已更名為Eurotech)的Arlen Nipper博士於1999年發明的通訊協定。他們當時是為了在狹窄的網路頻寬和微小電力損耗的需求前提之下,提供石油管線感測器和人造衛星之間一個輕量、可靠的二進制通訊協定。2011年11月,IBM和Eurotech將MQTT協定捐贈給負責管理開放原始碼專案的Eclipse基金會,並且加入Eclipse M2M Industry工作組織。2014年十月,MQTT正式變成一個開放的OASIS國際標準(Organization Advancement Structured Information Standards,資訊標準架構促進會,一個制定電子商務、網路服務和電子出版的非營利機構)。 MQTT最初代表的意思是Message Queueing Telemetry Transport(訊息佇列遙測傳輸),現在已經不用這種說法,MQTT就是MQTT,不是其他單字的縮寫。由於MQTT協定的訊息內容很精簡,非常適合用於處理器資源及網路頻寬有限的物聯網裝置,再加上已經有許多MQTT程式庫被陸續開發出來,用於Arduino控制板(C/C++)、JavaScript(Node.js, Espruino控制板), Python,…等等,還有開放原始碼的MQTT伺服器,使得開發MQTT物聯網、機器之間(Machine-to-Machine, M2M)的通訊變得非常簡單。Facebook Messenger的即時通訊也是用MQTT協定。(這段說明來自:MQTT教學(一):認識MQTT)

說明好長,開始安裝了,我使用的系統是Windwos 10,使用的MQTT軟體是mosquitto,軟體可由官方網站下載http://mosquitto.org/download/ ,下載32位元的安裝程式

下載完程式就開始安裝,其本上都是按下一步就可以解決,但是有一個畫面要注意一下

在這個畫面中是提醒要額外去下載程式安裝與下載一些dll,在 http://slproweb.com/products/Win32OpenSSL.html 下載Win32OpenSSL_Light-1_0_2L.exe (不要下載太新的版本,可能會沒有需要的dll),安裝好後目錄中的libeay32.dll與ssleay32.dll是我們需要的。

ftp://sources.redhat.com/pub/pthreads-win32/dll-latest/dll/x86/ 中下載pthreadVC2.dll,這三個dll在mosquitto安裝完成後copy到 c:\program files (x86)\mosquitto 目錄下。

在安裝完mosquitto,也把三個dll複製過去後就可以啟用MQTT的服務了,使用mosquitto.exe -v以方便觀察服務的運作狀況

在Client端可使用mosquitto_sub.exe -h host -t topic 向伺服器註冊感興趣的Topic,由於我是先在同一台主機中測試,所以host是寫localhost

觀察伺服端的動作訊息,可以明顯地看出,在客戶端送出訂閱後,伺服端與客戶端是有定時在溝通的,而且跟我想像的一樣,是客戶端定期向伺服器請求訊息,是誰跟我說它很厲害可以直接由伺服端穿透種種設備傳訊息給客戶端的,趕快自己出來讓我打屁股


再開另外一個命令提示字元,假設由另一個來源發佈訊息,mosquitto_pub.exe -h host -t topic -m message

接下測試由非本機的其他機器來測試MQTT的運作狀況,記得要先在伺服器防火牆中的輸入輸出規則中新增PORT 1883(MQTT預定,可自訂其他PORT)可通行,輸出、輸入都要喔!新增規則





記得輸出、輸入規則都要新增上敘的動作喔!接下來利用MQTTLens來做為伺服器之外的客戶端,在Chrome的線上應用程式商店搜尋“MQTTLens”關鍵字就找得到,請將它加入Chrome

在Chrome應用程式中,按一下MQTTLens開啟它

按下Connection(連結)旁邊的+鈕,在底下的新增連結畫面中,輸入連結名稱與本機網址(127.0.0.1)或者MQTT伺服器所在的網址,其他選項沿用預設值。

在Hostname中輸入伺服器的IP或DomainName

按下CREATE CONNECTION(建立連結)之後,將切換到如下的畫面

在伺服器可看到連上的資訊

利用MQTTlens訂閱主題


利用MQTTlens發佈訊息

所有訂閱的客戶端均可收到訊息

到這裡大概可了解MQTT的的運作方式,接下來就是要想如何去寫程式做應用了