Search This Blog

4/18/16

INTEL® DEVELOPER ZONE: 在英特爾Edison面板上建立與執行MQTT

 在英特爾Edison面板上建立與執行MQTT

簡介
英特爾Edison面板最主要的特點為不只能與Arduino單晶片控制器相容也能與Linux主機板相容,並且具有能存取Linux系統能力機制來執行Arduino sketch.
在部落格中,我將對於Linux系統的核心機制能與Arduino sketch相互整合來做不同層面的探討與如何應用程式內部的程式碼來簡化IoT的運作過程.
我司將會設立溫度感應節點,具有溫度偵測、光線偵測、LED與開關功能並應用MQTT(訊息序列遙測傳輸)技術將資料上傳到網路上. 藉由Node-Red(物連虛擬連結)技術來執行原始資料分析並將指令傳回到感應節點.

Linux崁入式系統搭配Edison基板應用在物連網開發平臺上源自於Yocto專案 http://www.yoctoproject.org 為Linux系統的核心設計應用於崁入式系統.

訊息序列遙測傳輸
MQTT(訊息序列遙測傳輸)為輕量型協定主要用來作機器與機器間訊息的傳遞. MQTT使用publish/subscribe訊息傳送模式並以TCP/IP協定來提供基本的網路連結. MQTT 主要的協定是MQTT伺服端與代理端來存取發送端與接收端使用MQTT,可以設立感測網路並透過這種不同的感應元件來傳送數值. 致動器能接收所需要的不同訊息. MQTT 代理端會注意從發送端到接收端之間所傳遞的訊息.
範例:
微控制器 A 能接收到開關的狀態並以 “開關開啟”的訊息發送給MQTT伺服器. 微控制器 B 則是夠過網路接收來自MQTT所傳送 “開關”的訊息.當使用者啟動開關, 微控制器 A 將會發送訊息給MQTT伺服端.而伺服端會將訊息發送給一整列的接收端.當微控制器 B 接收到訊息時,會開始分析所傳來訊息的內容並決定是否該啟動或關閉.
更進一步關於MQTT的訊息能參考以下網址: http://mqtt.org.
Edison Yocto OS系統搭配小型MQTT代理端,稱為RSMB(),很遺憾的是, 我們沒有大量 MQTT 用戶端進行測試. 在本文中,我們將構建另一個 MQTT 代理端 Mosquitto, 主要針對用戶端. 在後續文章中, 我們將使用這些用戶端連接至 Arduino sketches.

在Edison上建構Mosquitto
假定讀者已經安裝了 Edison,並且瞭解標準的 Linux系統操作流程
  1. 從mosquitto.org網站下載mosquitto.
    $> wget http://mosquitto.org/files/source/mosquitto-1.3.5.tar.gz
  2. 解壓縮檔
    $> tar xzf mosquitto-1.3.5
       $> cd mosquitto-1.3.5
  3. 建構
    $> make WITH_SRV=no
  4. 測試並安裝mosquitto編譯器
    # Create user mosquitto
       $> add user mosquitto
    
       # Test 
       $> cd test/broker
       $> make test
       $> cd ../../
    
       # Install
       $> cp client/mosquitto_pub /usr/bin
       $> cp client/mosquitto_sub /usr/bin
       $> cp lib/libmosquitto.so.1 /usr/lib
       $> cp src/mosquitto /usr/bin
在 mosquitto 根目錄中還有一個測試目標.但此目標需要 Python3,Edison 作業系統上無法使用 Python3, 因此會導致後續的測試失敗. 測試/代理端的目標不需要 Python3,並包含所有基本的 MQTT 操作。

測試mosquitto的客服與伺服端
Edison 作業系統已配置自動啟動 rsmb 代理. rsmb 已經設置為使用默認 TCP 連接端 1883. 將使用預設 MQTT連接端在 rsmb 代理上測試 mosquitto 用戶端.之後, 將配置 mosquitto 代理在其他埠上執行,同時對其連接端進行測試。
如要測試用戶端,請開啟 Edison 的兩個 ssh 連接.在第一個連接端, 執行一個在 rsmb 代理端接收 'test' 指令並在 Edison本地執行 mosquitto_sub 用戶端.

在第二個 ssh 連接中,向同一台本機伺服器的 test 標題發送 'Hello World!' 消息。您應可看到視窗中的執行 mosquitto_sub 程式的訊息.注意 mosquitto_sub 用戶端將持續接收來自伺服器的訊息,直到中斷為止.

上述測試顯示出mosquitto_sub 和 mosquitto_pub 用戶端能與所構建的本地rsmb MQTT 服務端能正常運作.
可利用所建立的mosquitto代理端與執行其他不同的連接埠(1993)做相同測試.

使用上述指令, 但是使用 -p 1993 參數來執行 mosquitto_sub 和 mosquitto_pub,並測試mosquitto代理端的1993連接埠.



總結

我們在英特爾 Edison 上構建並執行了 mosquitto 伺服器和用戶端. 在後續的文章中,我將開始開發能夠利用本文構建的 MQTT 用戶端的 Arduino sketch。

參考資料:
關於Mosquitto相關檔案可參閱: http://mosquitto.org/documentation
關於Intel Edison主機板相關內容考參閱: http://www.intel.com/edison

No comments:

Post a Comment

Related Posts Plugin for WordPress, Blogger...