當(dāng)前位置:首頁 > IT技術(shù) > 其他 > 正文

MQTT 協(xié)議筆記
2022-05-31 17:14:42

教程看的零基礎(chǔ)入門學(xué)用物聯(lián)網(wǎng) – MQTT基礎(chǔ)篇教程制作非常精良,強烈推薦!

  • MQTT是一個客戶端服務(wù)端架構(gòu)的發(fā)布/訂閱模式的消息傳輸協(xié)議。

  • 用MQTT 3.1.1版本 5的版本還沒有流行


  • MQTT 客戶端: 數(shù)據(jù)產(chǎn)生和數(shù)據(jù)接收的角色都稱為客戶端.(傳感器和APP都需要接收和發(fā)送數(shù)據(jù)所以他們都是客戶端.)
  • MQTT服務(wù)端: 接收和分發(fā)數(shù)據(jù)的服務(wù)器.可以解決網(wǎng)絡(luò)不穩(wěn)定,以及多設(shè)備分發(fā)的問題.
  • MQTT 主題: 發(fā)布與訂閱 都需要主題. 服務(wù)器也是根據(jù)主題來管理數(shù)據(jù)的(接收和分發(fā))發(fā)布者發(fā)布數(shù)據(jù)到相應(yīng)的主題,訂閱者得到服務(wù)器推送已經(jīng)訂閱主題的數(shù)據(jù).
  • MQTT通訊的三個特點,彼此可獨立,空間可分離、時間可異步。

MQTT與服務(wù)器的連接

MQTT連接服務(wù)器一共有兩部

  1. 客戶端向服務(wù)端發(fā)送請求連接.也就是發(fā)送一個請求數(shù)據(jù)包叫做:CONNECT
  • CONNECT 所包含的內(nèi)容(示例):
    image.png
  • clientId: 客戶端名字,不同的客戶端不能有相同的名字
  • cleanSession:干凈會話,服務(wù)端不保存數(shù)據(jù),設(shè)置為flase會要求客戶端對接收信息進行確認,如果沒有得到確認會認為數(shù)據(jù)沒發(fā)送到,會保留數(shù)據(jù),反復(fù)重新發(fā)送.確保數(shù)據(jù)準確到達.這個字段就是告訴服務(wù)端我是不是一個重要的客戶端用的. 重要的會話要設(shè)置為flase.光設(shè)置這個是不夠的還需要QoS>0 以后在講.
  • keepAlive :心跳時間間隔.給設(shè)備連接狀態(tài)可知用的.每個客戶端給服務(wù)器發(fā)送心跳包的間隔.如果超過時間就是掉線了.
  1. 服務(wù)端接收到客戶端請求后向客戶端發(fā)送連接確認,也是發(fā)送一個數(shù)據(jù)包叫做:CONNACK
  • CONNACK 所包含的內(nèi)容:
    image.png
  • returnCode: 連接返回碼 成功連接返回0,1-5是連接錯誤.具體表達什么意思網(wǎng)上查.
  • sessionPresent: 當(dāng)前會話.值為true,表示上個會話有內(nèi)容沒有確認還存有上次未發(fā)送的信息.和干凈會話相關(guān).
  1. Publish 界面有QoS 0 1 2可選
  2. Reained 就是 retainFlag后面講解 選中后,后訂閱的會立即發(fā)送此條信息 只會保留最后一條.

MQTT.fx連接MQTT服務(wù)端

  1. MQTT公用服務(wù)端:然也物聯(lián) www.ranye-iot.net ,MQTT服務(wù)器地址:test.ranye-iot.net,TCP端口:1883,TCP/TLS端口:8883
  2. clientId:英文字符,不重復(fù)即可
  3. keepalive
  4. clean session
  5. 訂閱主題 Subscribe:輸入主題 點擊訂閱,多了一條右上角0 表示接收數(shù)據(jù)數(shù)量
  6. 發(fā)布信息 Publish : 右側(cè)輸入主題名稱 ,然后輸入信息內(nèi)容 點Publish

ESP8266連接MQTT服務(wù)端

  1. PubSubClient庫最流行 用這個.
    暫時略過 需要編程時回來看看思路

MQTT客戶端發(fā)布/訂閱/取消 主題

  1. PUBLISH 發(fā)布信息
  • 客戶端給服務(wù)器發(fā)送PUBLISH報文.
  • 內(nèi)容如下
    image.png
    • topicName 主題名字: 發(fā)布的主題.
    • payload 發(fā)布的具體內(nèi)容
    • retainFlag 保留標志,當(dāng)客戶端訂閱時正常不會給客戶端發(fā)送信息,只有在新的數(shù)據(jù)產(chǎn)生時才會發(fā)送.如果時間很久新來的客戶端獲取不到數(shù)據(jù).如果retainFlag為True,客戶端在訂閱后馬上會收到為True的這些內(nèi)容.(貌似只保留最后一個?)
    • packetId 數(shù)據(jù)包id:數(shù)據(jù)包編號.服務(wù)器管理數(shù)據(jù)包用的
    • qos 服務(wù)質(zhì)量:決定數(shù)據(jù)信息重要性.0最低
    • dupFlag 重發(fā)標志,如果信息為重新發(fā)的會為True
  1. SUBSCRIBE 訂閱主題
  • 客戶端給服務(wù)器發(fā)送SUBSCRIBE報文.
  • 報文中可以包含一個或多個主題名字
  • 也有Qos
  1. SUBACK 訂閱確認
    • 服務(wù)端收到訂閱請求后,回復(fù)的訂閱確認包
    • 訂閱返回碼 有沒有成功的訂閱主題. 0/1/2都為成功取決于訂閱請求時候的QoS0/QoS1/QoS2. 128為訂閱失敗
  2. UNSUBSCRIBE 取消訂閱
    • 客戶端向服務(wù)端發(fā)送 取消訂閱包
    • topic 主題可以有一個或者多個.
      image.png

ESP8266 發(fā)布信息

只記下流程 具體編程語法先略過.

  1. 先連接WiFi
  2. MQTT 服務(wù)器連接成功 返回服務(wù)器地址
  3. 返回CLientID
  4. 向一個主題發(fā)布內(nèi)容,保持心跳.
  5. 內(nèi)容的信息.

MQTT主題進階

  1. 主題基本形式
  • 就是一個字符串
  • 主題區(qū)分大小寫
  • 主題可以使用空格 但是盡量不要用 容易出問題
  • 主題盡量使用ASCII字符 不要用中文 容易出錯
  1. 主題分級
  • MQTT主題可以用 / 分級處理
  1. 主題通配符
  • 單級別通配符 + :可以替代一個主題級別
  • 當(dāng)訂閱主題的時候 可以收到通配的主題內(nèi)容. 或者跳過一個級別的主題.
    image.png
  • 多級別通配符 用 # 可以代替任意數(shù)量主題級別
  • 多級別通配符只能放在主題的最后面.
  1. 主題應(yīng)用注意事項
  • 以$開始的主題是MQTT主題服務(wù)端系統(tǒng)保留的特殊主題,不能隨意訂閱
  • 不要用 / 作為主題開頭 沒有意義.
  • 保持主題簡潔明了 對通訊也有好處.
  • 在主題中盡量嵌入客戶端ID 方便調(diào)試 好習(xí)慣.

ESP8266 訂閱主題

暫略

總結(jié)測試

本文摘自 :https://www.cnblogs.com/

開通會員,享受整站包年服務(wù)立即開通 >