在英特爾 Edison 平台上建造與執行 Mosquitto MQTT

評論
A WowWee robot is seen at the SIdO, the Connected Business trade show in Lyon April 7, 2015. The new professional event dedicated to the Internet of Things (IoT) takes place in Lyon on April 7 and 8.  REUTERS/Robert Pratta - RTR4WETL
A WowWee robot is seen at the SIdO, the Connected Business trade show in Lyon April 7, 2015. The new professional event dedicated to the Internet of Things (IoT) takes place in Lyon on April 7 and 8. REUTERS/Robert Pratta - RTR4WETL
評論

 

2015 二月 20 日由 Tuan Bui (英特爾) 提交

簡介

英特爾 Edison 板子的一個最大特色就是它不僅僅是一個 Arduino 兼容開發板,它也是一個可以提供基礎 linux 存取能力給 Arduino sketch 的 linux 單板電腦。

在這個一系列的部落格中,我將探究不同種方式將 linux 能力整合到 Arduino sketch 當中,並且如何借用既有的程式碼來讓物聯網開發更加簡單。

我們將開始建造一個簡單的感測器結點,包含溫度感測器,光感測器和 LED 與開關。之後我們會使用 MQTT 發佈資料到網際網路。使用 Node-Red 來觸發事件,並且傳送命令回到我們的感測器端點,藉此證明某些初步的資料分析。

Edison 板子的 linux 分支是來自於 Yocto 專案  。 Yocto 是一個為了有限資源的嵌入式系統所設計的小型的 Linux 核心。

MQTT

MQTT 是一個機器與機器間溝通的輕巧協定。 MQTT 基於 TCP/IP 協定之上,使用了 publish/subscribe 訊息 轉傳模式。 MQTT 協定的中心是一個 MQTT 伺服器或代理人,它可以讓 publisher 或是 subscriber 來存取。使用 MQTT 可以建置一個感測網路,各種感測器可以用其獨特的訊息格式發佈它的感測值給其他的感測器。促動器也可以附註它所產生的功用到不同的訊息中。 MQTT 代理人將負責將訊息從 publishers 轉送到 subscribers 。

範例:

微處理器 A 可以讀取開關的狀態,並且以"switch = on" 的訊息模式發佈開關狀態的訊息到 MQTT 伺服器。網路上的微處理器 B 訂閱 MQTT 訊息"switch"。一但使用者撥動開關,微處理器 A 將發佈一個訊息到 MQTT 代理人。這個代理人將轉發這個訊息到列表上的訂閱者。當微處理器 B 收到這個訊息,它可以分析這個內容,決定開關的狀態並且決定電燈開或關。

更詳細的 MQTT 可以在 http://mqtt.org 找到。

Edison 平台的 Yocto 作業系統 OS 伴隨著一個小型的 MQTT 代理人,稱之為 RSMB  (十分小型的訊息代理人)。不幸的是,為了測試目的的用戶端 MQTT 並沒有包含在內。 在這篇文章中,我們將建置另一個 MQTT 代理人,稱之為 Mosquitto ,大部分主要是當用戶端的角色。在後續的文章中,我們將使用這些用戶連接到我們的 Arduino sketches 。

 

在 Edison 平台建置 Mosquitto

預先假設讀者已經架設好他們的 Edison 板子,並且熟悉標準的 Linux 操作。

建造 Mosquitto 是十分直覺的,並不需要思考太多。以下是在 Edison 平台上建造 Mosquitto 的步驟:

1. 從 org 下載 mosquitto

螢幕截圖 2015-12-08 18.12.35
2. 解壓縮檔案
螢幕截圖 2015-12-08 18.29.09
3. 編譯
螢幕截圖 2015-12-08 18.30.14

4. 測試並安裝您所編譯的 mosquitto

螢幕截圖 2015-12-08 18.31.34

在 mosquitto 的根目錄也有一個測試目標物。這個目標物需要安裝 Python3,但它並沒有包含在 Edison 作業系統中,所以後續的某些測試將會失敗。而在 test/broker 目錄裡的目標物並不需要安裝 Python3,而且它可以涵蓋所有的 MQTT 操作。

測試您的客戶端與伺服器端 mosquitto

Edison 作業系統預設會自動啟動 rsmb 代理人。所以預設的 TCP 1883 埠以經被 rsmb 使用。我們將使用預設的 MQTT 埠測試用戶端 mosquitto 到 rsmb  代理者。之後我們將會設置 mosquitto 代理人在不同的埠上並再測試一次。

開啟兩個 ssh  連線到 Edison 平台來測試用戶端 mosquitto。

在第一個 ssh 連線,執行一個訂閱'test' 主題的用戶端程式 amosquitto_sub,並在 Edison 端執行。

pic1_0

在第二個 ssh  連線,發佈一個'Hello World!' 的訊息到同一個本地伺服器。

您應該可以看到在視窗中執行 mosquitto_sub  程式的訊息。請注意用戶端 mosquitto_sub 程式是持續在運作,並會持續監聽從伺服器端傳來的新訊息直到終止執行。

pic2

上面的測試顯示出我們編譯的用戶端 mosquitto_sub 和 mosquitto_pub 正與本地端的 rsmb MQTT 伺服器正常的工作。

我們可以利用執行在不同埠 (1993) 上的 mosquitto  代理人來執行同樣的測試。

pic3
pic4
使用同上的命令但是加上參數 -p 1993 給 mosquito_sub 和 mosquitto_pub,在埠 1993 上測試 mosquito 代理人。
pic5

總結

我們在英特爾 Edison 平台上建造並執行伺服器與用戶端 mosquitto 。在後續的文章中,我將開始利用我們建置的用戶端 MQTT 開發 Arduino sketches 。

參考 :

Mosquitto 文件可以在這找到 http://mosquitto.org/documentation

英特爾 Edison 板子的詳細資訊可以在這找到 http://www.intel.com/edison

更多精選文章.....

 

歡迎加入「Inside」Line 官方帳號,關注最新創業、科技、網路、工作訊息

好友人數

精選熱門好工作

(Backend)Senior Software Engineer

ShopBack 回饋網股份有限公司
臺北市.台灣

獎勵 NT$20,000

產品經理-Product Manager (Backend System)

酷遊天國際旅行社股份有限公司
臺北市.台灣

獎勵 NT$20,000

平台測試技術專員 QA Specialist

SHOPLINE 商線科技有限公司
臺北市.台灣

獎勵 NT$20,000

評論