教程看的零基礎(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ù)器一共有兩部
- 客戶端向服務(wù)端發(fā)送請求連接.也就是發(fā)送一個請求數(shù)據(jù)包叫做:CONNECT
- CONNECT 所包含的內(nèi)容(示例):
- 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ā)送心跳包的間隔.如果超過時間就是掉線了.
- 服務(wù)端接收到客戶端請求后向客戶端發(fā)送連接確認,也是發(fā)送一個數(shù)據(jù)包叫做:CONNACK
- CONNACK 所包含的內(nèi)容:
- returnCode: 連接返回碼 成功連接返回0,1-5是連接錯誤.具體表達什么意思網(wǎng)上查.
- sessionPresent: 當(dāng)前會話.值為true,表示上個會話有內(nèi)容沒有確認還存有上次未發(fā)送的信息.和干凈會話相關(guān).
- Publish 界面有QoS 0 1 2可選
- Reained 就是 retainFlag后面講解 選中后,后訂閱的會立即發(fā)送此條信息 只會保留最后一條.
MQTT.fx連接MQTT服務(wù)端
- MQTT公用服務(wù)端:然也物聯(lián) www.ranye-iot.net ,MQTT服務(wù)器地址:test.ranye-iot.net,TCP端口:1883,TCP/TLS端口:8883
- clientId:英文字符,不重復(fù)即可
- keepalive
- clean session
- 訂閱主題 Subscribe:輸入主題 點擊訂閱,多了一條右上角0 表示接收數(shù)據(jù)數(shù)量
- 發(fā)布信息 Publish : 右側(cè)輸入主題名稱 ,然后輸入信息內(nèi)容 點Publish
ESP8266連接MQTT服務(wù)端
- PubSubClient庫最流行 用這個.
暫時略過 需要編程時回來看看思路
MQTT客戶端發(fā)布/訂閱/取消 主題
- PUBLISH 發(fā)布信息
- 客戶端給服務(wù)器發(fā)送PUBLISH報文.
- 內(nèi)容如下
- 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
- SUBSCRIBE 訂閱主題
- 客戶端給服務(wù)器發(fā)送SUBSCRIBE報文.
- 報文中可以包含一個或多個主題名字
- 也有Qos
- SUBACK 訂閱確認
- 服務(wù)端收到訂閱請求后,回復(fù)的訂閱確認包
- 訂閱返回碼 有沒有成功的訂閱主題. 0/1/2都為成功取決于訂閱請求時候的QoS0/QoS1/QoS2. 128為訂閱失敗
- UNSUBSCRIBE 取消訂閱
- 客戶端向服務(wù)端發(fā)送 取消訂閱包
- topic 主題可以有一個或者多個.
ESP8266 發(fā)布信息
只記下流程 具體編程語法先略過.
- 先連接WiFi
- MQTT 服務(wù)器連接成功 返回服務(wù)器地址
- 返回CLientID
- 向一個主題發(fā)布內(nèi)容,保持心跳.
- 內(nèi)容的信息.
MQTT主題進階
- 主題基本形式
- 就是一個字符串
- 主題區(qū)分大小寫
- 主題可以使用空格 但是盡量不要用 容易出問題
- 主題盡量使用ASCII字符 不要用中文 容易出錯
- 主題分級
- MQTT主題可以用 / 分級處理
- 主題通配符
- 單級別通配符 + :可以替代一個主題級別
- 當(dāng)訂閱主題的時候 可以收到通配的主題內(nèi)容. 或者跳過一個級別的主題.
- 多級別通配符 用 # 可以代替任意數(shù)量主題級別
- 多級別通配符只能放在主題的最后面.
- 主題應(yīng)用注意事項
- 以$開始的主題是MQTT主題服務(wù)端系統(tǒng)保留的特殊主題,不能隨意訂閱
- 不要用 / 作為主題開頭 沒有意義.
- 保持主題簡潔明了 對通訊也有好處.
- 在主題中盡量嵌入客戶端ID 方便調(diào)試 好習(xí)慣.
ESP8266 訂閱主題
暫略
總結(jié)測試
本文摘自 :https://www.cnblogs.com/