精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

物聯網行業中MQTT通信協議詳解以及使用

jf_94171069 ? 來源:jf_94171069 ? 作者:jf_94171069 ? 2024-09-20 17:08 ? 次閱讀

一 概述

MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸協議),是一種基于發布/訂閱(publish/subscribe)模式的“輕量級”通訊協議,該協議構建于TCP/IP協議上,由IBM在1999年發布。

MQTT最大優點在于,用極少的代碼和有限的帶寬,為連接遠程設備提供實時可靠的消息服務

作為一種低開銷、低帶寬占用的即時通訊協議,使其在物聯網、小型設備、移動應用等方面有較廣泛的應用。

二 MQTT協議特點

MQTT是一個基于客戶端-服務器的消息發布/訂閱傳輸協議。

MQTT協議是輕量、簡單、開放和易于實現的,這些特點使它適用范圍非常廣泛。在很多情況下,包括受限的環境中,如:機器與機器(M2M通信和物聯網(IoT)。

其在,通過衛星鏈路通信傳感器、偶爾撥號的醫療設備、智能家居、及一些小型化設備中已廣泛使用。

MQTT協議當前版本為,2014年發布的MQTT v3.1.1。除標準版外,還有一個簡化版MQTT-SN,該協議主要針對嵌入式設備,這些設備一般工作于TCP/IP網絡,如:ZigBee

MQTT 與 HTTP 一樣,MQTT 運行在傳輸控制協議/互聯網協議 (TCP/IP) 堆棧之上。

wKgZombtO6KARHDwAACjTo72E04008.jpg

MQTT OSI

發布和訂閱

MQTT使用的發布/訂閱消息模式,它提供了一對多的消息分發機制,從而實現與應用程序的解耦。

這是一種消息傳遞模式,消息不是直接從發送器發送到接收器(即點對點),而是由MQTT server(或稱為 MQTT Broker)分發的。

wKgZombtO6OAIXKMAAHIvSvB7Ac403.jpg

MQTT 服務器是發布-訂閱架構的核心

它可以非常簡單地在Raspberry PiNAS等單板計算機上實現,當然也可以在大型機或 Internet 服務器上實現。

服務器分發消息,因此必須是發布者,但絕不是訂閱者!

客戶端可以發布消息(發送方)、訂閱消息(接收方)或兩者兼而有之。

客戶端(也稱為節點)是一種智能設備,如微控制器或具有 TCP/IP 堆棧和實現 MQTT 協議的軟件的計算機。

消息在允許過濾的主題下發布。主題是分層劃分的 UTF-8 字符串。不同的主題級別用斜杠/作為分隔符號。

我們來看看下面的設置。

光伏發電站是發布者(Publisher)。

主要主題(Topic)級別是"PV",這個工廠發布兩個子級別"sunshine"和"data";

"PV/sunshine"是一個布爾值(true/fault,也可以是 1/0),充電站需要它來知道是否應該裝載電動汽車(僅在陽光普照時 :))。

充電站(EVSE)是訂閱者,訂閱"PV/sunshine"從服務器獲取信息

"PV/data" 另一方面,以 kW 為單位傳輸工廠產生的瞬時功率,并且該主題可以例如通過計算機或平板電腦訂閱,以生成一天內傳輸功率的圖表。

這就是一個簡單的MQTT的應用場景,具體如下圖所示;

wKgaombtO6SABeE8AAXFTkN-9Eo622.jpg

MQTT 發布和訂閱

QoS(Quality of Service levels)

服務質量是 MQTT 的一個重要特性。當我們使用 TCP/IP 時,連接已經在一定程度上受到保護。但是在無線網絡中,中斷和干擾很頻繁,MQTT 在這里幫助避免信息丟失及其服務質量水平。這些級別在發布時使用。如果客戶端發布到 MQTT 服務器,則客戶端將是發送者,MQTT 服務器將是接收者。當MQTT服務器向客戶端發布消息時,服務器是發送者,客戶端是接收者。

QoS 0

這一級別會發生消息丟失或重復,消息發布依賴于底層TCP/IP網絡。即:<=1

wKgZombtO6aAM5FeAABJuC0LDjk502.jpg

QoS 1

QoS 1 承諾消息將至少傳送一次給訂閱者。

wKgaombtO6iAMAEOAABQg1RSSiY573.jpg

QoS 2

使用 QoS 2,我們保證消息僅傳送到目的地一次。為此,帶有唯一消息 ID 的消息會存儲兩次,首先來自發送者,然后是接收者。QoS 級別 2 在網絡中具有最高的開銷,因為在發送方和接收方之間需要兩個流。

wKgaombtO6mALPP5AABalVdaWSg449.jpg

MQTT 數據包結構

固定頭(Fixed header),存在于所有MQTT數據包中,表示數據包類型及數據包的分組類標識;

可變頭(Variable header),存在于部分MQTT數據包中,數據包類型決定了可變頭是否存在及其具體內容;

消息體(Payload),存在于部分MQTT數據包中,表示客戶端收到的具體內容;

整體MQTT的消息格式如下圖所示;

wKgZombtO6qATAwEAADiBC1Svgw529.jpg

3.1 MQTT固定頭

固定頭存在于所有MQTT數據包中,其結構如下:

wKgaombtO6uAbQLxAACQcubPcBQ671.jpg

下面簡單分析一下固定頭的消息格式;

MQTT消息類型 / message type

**位置:**byte 1, bits 7-4。

4位的無符號值,類型如下:

wKgZombtOzmAe17zAAEVHi6fzdY016.png

標識位 / DUP

**位置:**byte 1, bits 3-0。

在不使用標識位的消息類型中,標識位被作為保留位。如果收到無效的標志時,接收端必須關閉網絡連接:

wKgZombtO1GAAL7RAAC-hXYA6K8376.png

DUP:發布消息的副本。用來在保證消息的可靠傳輸,如果設置為 1,則在下面的變長中增加MessageId,并且需要回復確認,以保證消息傳輸完成,但不能用于檢測消息重復發送。

QoS發布消息的服務質量(前面已經做過介紹),即:保證消息傳遞的次數

00:最多一次,即:<=1

01:至少一次,即:>=1

10:一次,即:=1

11:預留

RETAIN:發布保留標識,表示服務器要保留這次推送的信息,如果有新的訂閱者出現,就把這消息推送給它,如果設有那么推送至當前訂閱者后釋放。

剩余長度(Remaining Length)

位置:byte 1。

固定頭的第二字節用來保存變長頭部和消息體的總大小的,但不是直接保存的。這一字節是可以擴展,其保存機制,前7位用于保存長度,后一部用做標識。當最后一位為 1時,表示長度不足,需要使用二個字節繼續保存。例如:計算出后面的大小為0

3.2 MQTT可變頭 / Variable header

MQTT數據包中包含一個可變頭,它駐位于固定的頭和負載之間。可變頭的內容因數據包類型而不同,較常的應用是做為包的標識:

wKgZombtO2OAT2x4AAAktz1lkck727.png

很多類型數據包中都包括一個2字節的數據包標識字段,這些類型的包有:

PUBLISH (QoS > 0)、PUBACK、PUBREC、PUBREL、PUBCOMP、

SUBSCRIBE、SUBACK、UNSUBSCRIBE、UNSUBACK

3.3 Payload消息體

Payload消息體是MQTT數據包的第三部分,CONNECT、SUBSCRIBE、SUBACK、UNSUBSCRIBE四種類型的消息 有消息體:

CONNECT,消息體內容主要是:客戶端的ClientID、訂閱的Topic、Message以及用戶名和密碼

SUBSCRIBE,消息體內容是一系列的要訂閱的主題以及QoS。

SUBACK,消息體內容是服務器對于SUBSCRIBE所申請的主題及QoS進行確認和回復。

UNSUBSCRIBE,消息體內容是要訂閱的主題。

MQTT服務器搭建

目前MQTT代理的主流平臺有下面幾個:

Mosquitto:https://mosquitto.org/

VerneMQ:https://vernemq.com/

EMQTT:http://emqtt.io/

五 MQTT模擬客戶端

目前MQTT主流模擬客戶端有下面幾個:

MQTT fx:https://www.softblade.de/

MQTTX:https://mqttx.app/zh/downloads?os=windows

六 MQTT協議使用場景

MQTT協議的應用場景非常豐富,特別是在物聯網領域。以下是對MQTT協議應用場景的清晰歸納:

物聯網設備控制和監控:MQTT被廣泛應用于物聯網設備之間的通信,如智能家居、智能城市和工業自動化等領域。設備可以發布自身狀態到特定主題,用戶或系統可以訂閱這些主題來獲取設備信息,實現對設備的遠程監控與控制。

傳感器數據傳輸:MQTT可以用于傳感器數據的采集、傳輸和監控,例如氣象站、環境監測等領域。傳感器將采集到的數據通過MQTT協議發布到指定的主題,相關系統可以訂閱這些主題以實時獲取數據并進行處理。

實時信息發布和訂閱:MQTT支持實時信息的發布和訂閱,例如新聞、股票行情、天氣預報等。信息發布者將信息發布到特定的主題,信息訂閱者可以訂閱這些主題以實時獲取最新的信息。

聊天應用:MQTT也可以用于實時聊天應用的消息傳輸。通過MQTT協議,用戶可以實現即時通訊,發送和接收消息。

遠程監控和控制系統:在遠程監控和控制系統中,MQTT可以用于實現遠程設備的管理和控制。例如,遠程監控攝像頭可以通過MQTT協議將實時視頻流發布到指定的主題,用戶可以通過訂閱這些主題來查看攝像頭的視頻內容。

數據傳輸和同步:MQTT還可以用于跨平臺數據同步和數據備份等場景。通過將數據發布到MQTT主題,不同平臺或設備可以訂閱這些主題以實現數據的實時同步和備份。

位置跟蹤:MQTT協議可以用于實時位置跟蹤,例如車輛追蹤、貨物追蹤等。相關設備可以通過MQTT協議將位置信息發布到指定的主題,跟蹤系統可以訂閱這些主題以實時獲取位置信息。

智能城市管理:在智能城市管理中,MQTT可以用于實現不同設備之間的信息交互和協調。例如,路燈、交通信號燈、垃圾桶等設備可以通過MQTT協議連接到一個統一的平臺,實現對這些設備的集中管理和控制。

農業物聯網:MQTT可以應用于農業物聯網系統中,實現對農田環境的監測和控制。傳感器通過MQTT協議將農田的土壤濕度、溫度等信息發布到指定的主題,農民可以訂閱這些主題以實時了解農田環境情況,并進行相應的灌溉和施肥操作。

能源監測與管理:MQTT可用于能源監測與管理系統,如智能電網、智能能源監測等。通過將能源設備連接到MQTT網絡,可以實時獲取能源數據并進行能源調度和管理。

總結來說,MQTT協議在物聯網領域具有廣泛的應用場景,包括設備控制和監控、傳感器數據傳輸、實時信息發布和訂閱、聊天應用、遠程監控和控制系統、數據傳輸和同步、位置跟蹤以及智能城市管理、農業物聯網和能源監測與管理等領域。這些應用場景展示了MQTT協議在物聯網領域的強大功能和靈活性。

七 MQTT組件的使用

1 Gitee鏈接地址

組件位于amaziot_bloom_os_sdklibrariesamxtuam_mqtt.c

Gitee源碼地址:https://gitee.com/ning./hongdou

Github源碼地址:https://github.com/ayumid/hongdou

2 應用層組件功能介紹

提供MQTT連接實例,可以通過調用組件內的API,來實現MQTT本地客戶端和服務器之間的通信。

3 代碼講解

1 dtu_mqtt_wait_init_mqtt

功能:該函數用于,初始化MQTT。

參數

參數 釋義
st_dtu_file 文件地址

返回值:無

示例:

//連接mqtt服務器
dtu_mqtt_wait_connect_mqtt();

2 dtu_mqtt_wait_connect_mqtt

功能:該函數用于,等待mqtt連接。

參數:無

返回值:無

示例:

//連接mqtt服務器
dtu_mqtt_wait_connect_mqtt();

3 dtu_mqtt_subscribe_topic

功能:該函數用于,訂閱Topic。

參數:無

返回值:無

示例:

//訂閱Topic
dtu_mqtt_subscribe_topic();

4 dtu_mqtt_is_connect

功能:該函數用于,判斷mqtt是否連接。

參數:

參數 釋義
st_dtu_file 文件地址

返回值:無

示例:

//判斷是否配置了心跳
if(dtu_mqtt_is_connect(dtu_mqtt_ctx->dtu_mqtt_client) && dtu_file_ctx->gnss.gpsflag == 1)

5 dtu_mqtt_disconnect

功能:該函數用于,斷開mqtt連接狀態。

參數:無

返回值:無

示例:


6 dtu_mqtt_msg_dl_arriver

功能:該函數用于,mqtt下行數據回調函數。

參數:無

返回值:無

示例:

mqtt_set_interceptor_handler(dtu_mqtt_t.dtu_mqtt_client,dtu_mqtt_msg_dl_arriver);

7 dtu_mqtt_send

功能:該函數用于,mqtt信息發送。

參數:

參數 釋義
data 數據緩沖區指針
data_sz 數據長度

返回值:無

示例:

dtu_mqtt_send(send, strlen(send));

8 dtu_mqtt_send_serial_data

功能:該函數用于,at接口數據發送到mqtt服務器。

參數:

參數 釋義
uartData 數據指針

返回值:無

示例:

dtu_mqtt_send_serial_data(uartData);

4 Demo實戰

本文章源自奇跡物聯開源的物聯網應用知識庫Cellular IoT Wiki,更多技術干貨歡迎關注收藏Wiki:Cellular IoT Wiki 知識庫(https://rckrv97mzx.feishu.cn/wiki/wikcnBvAC9WOkEYG5CLqGwm6PHf)

歡迎同學們走進AmazIOT知識庫的世界!

這里是為物聯網人構建的技術應用百科,以便幫助你更快更簡單的開發物聯網產品

Cellular IoT Wiki初心:

在我們長期投身于蜂窩物聯網 ODM/OEM 解決方案的實踐過程中,一直被物聯網技術碎片化與產業資源碎片化的問題所困擾。從產品定義、芯片選型,到軟硬件研發和測試,物聯網技術的碎片化以及產業資源的碎片化,始終對團隊的產品開發交付質量和效率形成制約。為了減少因物聯網碎片化而帶來的重復開發工作,我們著手對物聯網開發中高頻應用的技術知識進行沉淀管理,并基于 Bloom OS 搭建了不同平臺的 RTOS 應用生態。后來我們發現,很多物聯網產品開發團隊都面臨著相似的困擾,于是,我們決定向全體物聯網行業開發者開放奇跡物聯內部沉淀的應用技術知識庫 Wiki,期望能為更多物聯網產品開發者減輕一些重復造輪子的負擔。

Cellular IoT Wiki沉淀的技術內容方向如下:

wKgaombqoM2AYL2RAAQrZ8e-uz8392.jpg

奇跡物聯的業務服務范圍:基于自研的NB-IoT、Cat1、Cat4等物聯網模組,為客戶物聯網ODM/OEM解決方案服務。我們的研發技術中心在石家莊,PCBA生產基地分布在深圳、石家莊、北京三個工廠,滿足不同區域&不同量產規模&不同產品開發階段的生產制造任務。跟傳統PCBA工廠最大的區別是我們只服務物聯網行業客戶。

連接我們,和10000+物聯網開發者一起 降低技術和成本門檻

讓蜂窩物聯網應用更簡單~~

哈哈你終于滑到最重要的模塊了,

千萬不!要!劃!走!忍住沖動!~

歡迎加入飛書“開源技術交流”,隨時找到我們哦~

點擊鏈接如何加入奇跡物聯技術話題群(https://rckrv97mzx.feishu.cn/docx/Xskpd1cFQo7hu9x5EuicbsjTnTf)可以獲取加入技術話題群攻略

Hey 物聯網從業者,

你是否有了解過奇跡物聯的官方公眾號“eSIM物聯工場”呢?

這里是奇跡物聯的物聯網應用技術開源wiki主陣地,歡迎關注公眾號,不迷路~

及時獲得最新物聯網應用技術沉淀發布

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 通信協議
    +關注

    關注

    28

    文章

    858

    瀏覽量

    40265
  • 物聯網
    +關注

    關注

    2903

    文章

    44279

    瀏覽量

    371298
  • MQTT
    +關注

    關注

    5

    文章

    649

    瀏覽量

    22435
收藏 人收藏

    評論

    相關推薦

    聯網通信協議詳解及選擇建議

    通信聯網來說十分關鍵,無論是近距離無線傳輸技術還是移動通信技術,甚至是LPWAN都影響著聯網
    發表于 05-23 14:23 ?6.7w次閱讀
    <b class='flag-5'>物</b><b class='flag-5'>聯網通信協議</b>的<b class='flag-5'>詳解</b>及選擇建議

    聯網傳輸協議MQTT到底是個什么?

    MQTT是什么?MQTT是一個聯網傳輸協議,它被設計用于輕量級的發布/訂閱式消息傳輸,旨在為低帶寬和不穩定的網絡環境
    發表于 01-08 11:27

    工業無線MQTT聯網網關

    通信)和非常少的開銷(較之 HTTP 等協議)。 在 3G 網絡MQTT 的吞吐量速度是使用 HTTP 的表述性狀態轉移 (REST) 的 93 倍。工業無線
    發表于 02-07 14:00

    8種聯網通信協議介紹

    協議不僅充當通信媒介,還為聯網網絡提供增值功能。諸如Zigbee之類的聯網
    發表于 12-24 06:13

    聯網常見通信協議 精選資料分享

    1概述在上一篇文章《聯網常見通信協議與通訊協議梳理【上】-通訊協議,對
    發表于 07-30 06:02

    MQTT協議及其應用開發介紹

    聯網是指什么?聯網通信協議包括哪些?MQTT協議是由哪些部分組成的?
    發表于 09-24 07:44

    聯網常見的通信協議有哪些?

    聯網常見的通信協議有哪些?
    發表于 11-05 09:12

    常見的聯網通信協議藍牙簡單對比

    @TOC淺析聯網(智能家居)無線通信協議聯網無線傳輸方案產品開發,通信協議(生態)選擇至關重
    發表于 01-11 07:24

    聯網的基石-MQTT協議初識

    的設備接入和設備管理對網絡帶寬、通信協議以及平臺服務架構都帶來了很大挑戰。對于 聯網協議 來說,必須針對性地解決
    發表于 09-08 16:03

    全志T3+Logos FPGA開發板——MQTT通信協議案例

    、FPGA、ROM、RAM、電源、晶振、連接器等所有器件均采用國產工業級方案,國產化率100%。給大家詳細講解嵌入式行業,常使用到的MQTT通信協議案例,分別涵蓋了
    發表于 03-31 15:35

    Modbus通信協議詳解

    關于Modbus通信協議詳解和應用分析
    發表于 10-12 16:54 ?150次下載
    Modbus<b class='flag-5'>通信協議</b><b class='flag-5'>詳解</b>

    mqtt-v3.1.1版協議

    mqtt-v3.1.1版協議,英文版,時間2014.10.29,聯網通信協議MQTT
    發表于 10-29 11:22 ?0次下載

    聯網硬件接入之通信協議MQTT,CoAP,LwM2M協議)的詳細資料概述

    本文檔的作用內容詳細技術的是聯網硬件接入之通信協議MQTT,CoAP,LwM2M協議)的詳細資料概述。
    發表于 09-11 16:25 ?19次下載
    <b class='flag-5'>物</b><b class='flag-5'>聯網</b>硬件接入之<b class='flag-5'>通信協議</b>(<b class='flag-5'>MQTT</b>,CoAP,LwM2M<b class='flag-5'>協議</b>)的詳細資料概述

    聯網硬件接入之通信協議MQTT,CoAP,LwM2M協議)的詳細資料概述

    本文檔的作用內容詳細技術的是聯網硬件接入之通信協議MQTT,CoAP,LwM2M協議)的詳細資料概述。
    發表于 09-11 16:25 ?294次下載
    <b class='flag-5'>物</b><b class='flag-5'>聯網</b>硬件接入之<b class='flag-5'>通信協議</b>(<b class='flag-5'>MQTT</b>,CoAP,LwM2M<b class='flag-5'>協議</b>)的詳細資料概述

    MQTT網關:聯網的關鍵橋梁

    基于發布/訂閱模式的輕量級通信協議,特別適用于低帶寬、不穩定網絡環境下的數據傳輸。MQTT網關則是連接物聯網設備與消息代理服務器之間的橋梁,通過它,
    的頭像 發表于 08-22 14:15 ?341次閱讀
    <b class='flag-5'>MQTT</b>網關:<b class='flag-5'>物</b><b class='flag-5'>聯網</b><b class='flag-5'>中</b>的關鍵橋梁