物聯網的基礎協議之MQTT

  • 2020 年 3 月 17 日
  • 筆記

1.本文概述

本文主要介紹MQTT相關的概念,並且通過搭建MQTT伺服器和客戶端,測試MQTT的通訊。本文主要從實際使用的角度去理解MQTT,並不會講述過於深奧的理論知識。可以通過下面的文章了解MQTT的相關介紹。

2.MQTT基本介紹

MQTT的全稱為Message Queuing Telemetry Transport,也就是消息隊列遙測傳輸。1999年,IBM公司的Andy Stanford-Clark 和來自Eurotech公司的Arlen Nipper創造了MQTT協議。其中「MQTT」中的「MQ」是來自IBM的MQ系列消息隊列產品線。

MQTT最初的用法是在石YouTube道控制中,將每一個節點的資訊通過衛星傳到到控制中心去。所以MQTT從創立之初就是為物聯網創立。

那麼什麼是MQTT協議呢?簡單地說,主要有下面三個特點:

(1)協議本身基於TCP/IP,輕量級的發布和訂閱

(2)開放的協議

(3)簡單,容易實現

所以該協議可以應用於各種環境中,非常適合需要低功耗而且頻寬有限的IoT場景中,比如:

  • 遙感數據
  • 汽車
  • 智慧家居
  • 智慧城市
  • 醫療醫護

運用MQTT協議,設備可以很方便的接入物聯網服務,管理並處理數據,最後應用到各種業務場景

3.mqtt伺服器的搭建

目前伺服器的搭建環境是ubuntu16.04

採用的伺服器是mosquitto,官方網站https://mosquitto.org

在控制台上輸入下面的命令進行下載。

wget https://mosquitto.org/files/source/mosquitto-1.5.7.tar.gz

下載完成後解壓並進入mosquitto-1.5.7目錄

在編譯時,先安裝gcc編譯工具,然後下載依賴的環境

sudo apt-get install openssl  sudo apt-get install libssl-dev  sudo apt-get install uuid-dev

最後執行 make開始編譯,編譯完成後輸入 sudo make install安裝程式。

接著配置伺服器相關資訊

sudo cp /etc/mosquitto/mosquitto.conf.example /etc/mosquitto/mosquitto.conf  sudo vim /etc/mosquitto/mosquitto.conf

添加一個用戶,如下圖所示

這樣,mqtt伺服器就安裝完成了。

下面啟動伺服器

mosquitto -c /etc/mosquitto/mosquitto.conf -v

測試

對於MQTT協議來說,有一個非常關鍵的模式:發布/訂閱模式。發布/訂閱模式(pub / sub)是傳統客戶端 – 伺服器模型的替代方案,客戶端直接與端點通訊。然而,Pub / Sub將正在接收消息(稱為訂戶)的另一客戶端(或更多客戶端)發送特定消息(稱為發布者)的客戶端去耦,這意味著發布者和訂閱者不了解彼此的存在,有一個第三個組件,稱為代理,由它作為中轉,它將過濾所有傳入的消息並相應地分發給它們,所以我們來詳細介紹一下剛剛提及的方面。

訂閱者

訂閱者的角色要保持長連接狀態,我們可以另外開一個控制台窗口進行測試訂閱一個topic01的主題,去接收這個主題的消息。

mosquitto_sub -v -t topic01

這個過程可能會遇到如下的錯誤

解決辦法

sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1

這樣訂閱者就處於不斷等待消息到來的模式。

發布者

這時可以另外再開一個控制台,去發布topic01主題的消息。

mosquitto_pub -t topic01 -m "123456"

不難看出,我們的訂閱者已經接收到消息了。

4. mqtt客戶端的使用

對於mqtt客戶端的使用,可以測試mqtt,所以我們的環境選擇Windows平台。可以使用MQTT.fx。

MQTT.fx 是目前主流的mqtt客戶端,可以快速驗證是否可以與IoT Hub 服務交流發布或訂閱消息。設備將當前所處的狀態作為MQTT主題發送給IoT Hub,每個MQTT主題topic具有不同等級的名稱,如「建築/樓層/溫度。」 MQTT代理伺服器將接收到的主題topic發送給給所有訂閱的客戶端。

下載地址:http://www.jensd.de/apps/mqttfx

安裝最新的版本就可以了

由於我們前面已經在ubuntu上搭建好了MQTT伺服器,所以接下來直接使用

點擊publish即可在我們的訂閱者上監聽到消息

同時MQTT.fx 也可以作為監聽者

這樣我們就創建好了一個mqtt本地的測試環境。

5. 總結

本次的實驗目的是體驗一下mqtt的數據傳輸,同時學習了mqtt的一些基本的使用方法,後面會詳細介紹物聯網通訊以及雲伺服器相關的知識,本文並沒有詳細介紹mqtt具體在項目中的使用方法,後面再做完善。