教程看的零基礎(chǔ)入門學(xué)用物聯(lián)網(wǎng) – MQTT基礎(chǔ)篇教程制作非常精良,強(qiáng)烈推薦!
-
MQTT是一個(gè)客戶端服務(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通訊的三個(gè)特點(diǎn),彼此可獨(dú)立,空間可分離、時(shí)間可異步。
MQTT與服務(wù)器的連接
MQTT連接服務(wù)器一共有兩部
- 客戶端向服務(wù)端發(fā)送請(qǐng)求連接.也就是發(fā)送一個(gè)請(qǐng)求數(shù)據(jù)包叫做:CONNECT
- CONNECT 所包含的內(nèi)容(示例):
- clientId: 客戶端名字,不同的客戶端不能有相同的名字
- cleanSession:干凈會(huì)話,服務(wù)端不保存數(shù)據(jù),設(shè)置為flase會(huì)要求客戶端對(duì)接收信息進(jìn)行確認(rèn),如果沒有得到確認(rèn)會(huì)認(rèn)為數(shù)據(jù)沒發(fā)送到,會(huì)保留數(shù)據(jù),反復(fù)重新發(fā)送.確保數(shù)據(jù)準(zhǔn)確到達(dá).這個(gè)字段就是告訴服務(wù)端我是不是一個(gè)重要的客戶端用的. 重要的會(huì)話要設(shè)置為flase.光設(shè)置這個(gè)是不夠的還需要QoS>0 以后在講.
- keepAlive :心跳時(shí)間間隔.給設(shè)備連接狀態(tài)可知用的.每個(gè)客戶端給服務(wù)器發(fā)送心跳包的間隔.如果超過時(shí)間就是掉線了.
- 服務(wù)端接收到客戶端請(qǐng)求后向客戶端發(fā)送連接確認(rèn),也是發(fā)送一個(gè)數(shù)據(jù)包叫做:CONNACK
- CONNACK 所包含的內(nèi)容:
- returnCode: 連接返回碼 成功連接返回0,1-5是連接錯(cuò)誤.具體表達(dá)什么意思網(wǎng)上查.
- sessionPresent: 當(dāng)前會(huì)話.值為true,表示上個(gè)會(huì)話有內(nèi)容沒有確認(rèn)還存有上次未發(fā)送的信息.和干凈會(huì)話相關(guān).
- Publish 界面有QoS 0 1 2可選
- Reained 就是 retainFlag后面講解 選中后,后訂閱的會(huì)立即發(fā)送此條信息 只會(huì)保留最后一條.
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:輸入主題 點(diǎn)擊訂閱,多了一條右上角0 表示接收數(shù)據(jù)數(shù)量
- 發(fā)布信息 Publish : 右側(cè)輸入主題名稱 ,然后輸入信息內(nèi)容 點(diǎn)Publish
ESP8266連接MQTT服務(wù)端
- PubSubClient庫最流行 用這個(gè).
暫時(shí)略過 需要編程時(shí)回來看看思路
MQTT客戶端發(fā)布/訂閱/取消 主題
- PUBLISH 發(fā)布信息
- 客戶端給服務(wù)器發(fā)送PUBLISH報(bào)文.
- 內(nèi)容如下
- topicName 主題名字: 發(fā)布的主題.
- payload 發(fā)布的具體內(nèi)容
- retainFlag 保留標(biāo)志,當(dāng)客戶端訂閱時(shí)正常不會(huì)給客戶端發(fā)送信息,只有在新的數(shù)據(jù)產(chǎn)生時(shí)才會(huì)發(fā)送.如果時(shí)間很久新來的客戶端獲取不到數(shù)據(jù).如果retainFlag為True,客戶端在訂閱后馬上會(huì)收到為True的這些內(nèi)容.(貌似只保留最后一個(gè)?)
- packetId 數(shù)據(jù)包id:數(shù)據(jù)包編號(hào).服務(wù)器管理數(shù)據(jù)包用的
- qos 服務(wù)質(zhì)量:決定數(shù)據(jù)信息重要性.0最低
- dupFlag 重發(fā)標(biāo)志,如果信息為重新發(fā)的會(huì)為True
- SUBSCRIBE 訂閱主題
- 客戶端給服務(wù)器發(fā)送SUBSCRIBE報(bào)文.
- 報(bào)文中可以包含一個(gè)或多個(gè)主題名字
- 也有Qos
- SUBACK 訂閱確認(rèn)
- 服務(wù)端收到訂閱請(qǐng)求后,回復(fù)的訂閱確認(rèn)包
- 訂閱返回碼 有沒有成功的訂閱主題. 0/1/2都為成功取決于訂閱請(qǐng)求時(shí)候的QoS0/QoS1/QoS2. 128為訂閱失敗
- UNSUBSCRIBE 取消訂閱
- 客戶端向服務(wù)端發(fā)送 取消訂閱包
- topic 主題可以有一個(gè)或者多個(gè).
ESP8266 發(fā)布信息
只記下流程 具體編程語法先略過.
- 先連接WiFi
- MQTT 服務(wù)器連接成功 返回服務(wù)器地址
- 返回CLientID
- 向一個(gè)主題發(fā)布內(nèi)容,保持心跳.
- 內(nèi)容的信息.
MQTT主題進(jìn)階
- 主題基本形式
- 就是一個(gè)字符串
- 主題區(qū)分大小寫
- 主題可以使用空格 但是盡量不要用 容易出問題
- 主題盡量使用ASCII字符 不要用中文 容易出錯(cuò)
- 主題分級(jí)
- MQTT主題可以用 / 分級(jí)處理
- 主題通配符
- 單級(jí)別通配符 + :可以替代一個(gè)主題級(jí)別
- 當(dāng)訂閱主題的時(shí)候 可以收到通配的主題內(nèi)容. 或者跳過一個(gè)級(jí)別的主題.
- 多級(jí)別通配符 用 # 可以代替任意數(shù)量主題級(jí)別
- 多級(jí)別通配符只能放在主題的最后面.
- 主題應(yīng)用注意事項(xiàng)
- 以$開始的主題是MQTT主題服務(wù)端系統(tǒng)保留的特殊主題,不能隨意訂閱
- 不要用 / 作為主題開頭 沒有意義.
- 保持主題簡潔明了 對(duì)通訊也有好處.
- 在主題中盡量嵌入客戶端ID 方便調(diào)試 好習(xí)慣.
ESP8266 訂閱主題
暫略
總結(jié)測(cè)試
本文摘自 :https://www.cnblogs.com/