標題: 在英特爾Edison上創(chuàng)建并運行Mosquitto MQTT [打印本頁]

作者: xiongda    時間: 2015-5-26 18:44
標題: 在英特爾Edison上創(chuàng)建并運行Mosquitto MQTT
簡介
英特爾(R) Edison 開發(fā)板的一大特性是它不僅能夠兼容 Arduino*,同時還是一款 Linux* 單板計算機,能夠全面訪問 Arduino 草案的底層 Linux 功能。
在本系列博客中,我將介紹將 Linux 功能集成至 Arduino 草案的各種方法,以及如何利用現(xiàn)有代碼簡化物聯(lián)網(wǎng)開發(fā)。
首先,我們先來構(gòu)建一個包含溫度傳感器、光線敏元件、LED 和開關(guān)的簡單傳感器節(jié)點。 然后,我們使用 MQTT 將該數(shù)據(jù)發(fā)布至互聯(lián)網(wǎng)。 使用 Node-Red 演示一些基本的數(shù)據(jù)分析,觸發(fā)活動并將命令傳回傳感器節(jié)點。
Edison 開發(fā)板隨附的 Linux 分發(fā)版來自 Yocto 項目 (http://www.yoctoproject.org)。 Yocto 是一個小型的 Linux 內(nèi)核,專門針對資源有限的嵌入式系統(tǒng)設計。
MQTT
MQTT 是一個輕型協(xié)議,專門用于機器對機器 (M2M) 通信。 MQTT 使用基于 TCP/IP 協(xié)議的發(fā)布/訂閱消息轉(zhuǎn)發(fā)模式。 MQTT 協(xié)議的中心是 MQTT 服務器或代理,支持發(fā)布程序和訂閱程序進行訪問。 用戶可以使用 MQTT 構(gòu)建一個傳感器網(wǎng)絡,其中各種傳感器都能夠以其傳感器獨有的消息形式發(fā)布傳感器值。 制動器能夠訂閱不同的消息,以據(jù)此采取措施。 MQTT 代理將處理從發(fā)布程序到訂閱程序的轉(zhuǎn)發(fā)消息。
示例:
微處理器 A 能夠讀取開關(guān)的狀態(tài),并以 "switch = on" 形式的消息將開關(guān)狀態(tài)發(fā)布至 MQTT 服務器。 互聯(lián)網(wǎng)某處的微處理器 B 訂閱 MQTT 消息 "switch"。 現(xiàn)在,無論用戶何時觸發(fā)開關(guān),微處理器 A 都會向 MQTT 代理發(fā)布一條消息。 代理將把消息轉(zhuǎn)發(fā)至訂閱程序列表。 當微處理器 B 收到消息時,將會對內(nèi)容進行解析,確定開關(guān)的狀態(tài),并相應地開啟或關(guān)閉指示燈。
如欲了解更多有關(guān) MQTT的信息,請訪問 http://mqtt.org。
Edison Yocto 操作系統(tǒng)配備名為 RSMB (Really Small Message broker) 的小型 MQTT 代理。 很遺憾,我們沒有大量 MQTT 客戶端進行測試。 在本文中,我們將構(gòu)建另一個 MQTT 代理 Mosquitto,主要針對客戶端。 在后續(xù)文章中,我們將使用這些客戶端連接至 Arduino 草案。
在 Edison 上構(gòu)建 Mosquitto
假定讀者已經(jīng)安裝了 Edison 開發(fā)板,并且了解標準的 Linux 操作。
構(gòu)建 Mosquitto 非常簡單。 以下是在 Edison 上構(gòu)建 Mosquitto 的步驟:
在 mosquitto 根目錄中還有一個測試目標。 但是,該目標需要 Python3,Edison 操作系統(tǒng)上無法使用 Python3,因此后來的一些測試失敗。 測試/代理中的目標不需要 Python3,并包含所有基本的 MQTT 操作。
測試 mosquitto 客戶端和服務器
Edison 操作系統(tǒng)配置為自動啟動 rsmb 代理。 rsmb 已經(jīng)設置為使用默認 TCP 端口 1883。 我們將使用默認 MQTT 端口在 rsmb 代理上測試 mosquitto 客戶端。 然后,我們將配置 mosquitto 代理在其他端口上運行,同時對其進行測試。
如要測試客戶端,請打開 Edison 的兩個 ssh 連接。 在第一個連接中,運行一個在 rsmb 代理上訂閱 'test' 主題并在 Edison 本地運行的 mosquitto_sub 客戶端

在第二個 ssh 連接中,向同一臺本地服務器的 test 主題發(fā)布一條 'Hello World!' 消息。
您應可看到窗口中的消息運行 mosquitto_sub 程序。 請注意,mosquitto_sub 客戶端是持久的,將持續(xù)偵聽來自服務器的新消息,直至其停止。

上述測試展示了我們所構(gòu)建的能夠與本地 rsmb MQTT 服務器正常兼容的 mosquitto_sub 和 mosquitto_pub 客戶端。
我們可以使用在其他端口 (1993) 上運行的mosquitto 代理運行相同的測試

使用上述命令,但是使用 -p 1993 參數(shù)來運行 mosquitto_sub 和 mosquitto_pub,在端口 1993 上測試 mosquitto 代理。


總結(jié)我們在英特爾 Edison 上構(gòu)建并運行了 mosquitto 服務器和客戶端。 在后續(xù)的文章中,我將開始開發(fā)能夠利用本文構(gòu)建的 MQTT 客戶端的 Arduino 草案。
參考資料:
如欲了解 Mosquitto 文檔,請參閱 http://mosquitto.org/documentation
如欲了解有關(guān)英特爾 Edison 開發(fā)板的詳情,請訪問: http://www.intel.com/edison


有關(guān)編譯器優(yōu)化的更完整信息,請參閱優(yōu)化通知。







歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1