MQTT通信協議的基本介紹參考文章 NT35 MQTT通信 ,本篇給出阿里云的基本操作,NT35E通過訂閱阿里云的主題發布信息與阿里云平臺相互通信。
紅河網站建設公司創新互聯公司,紅河網站設計制作,有大型網站制作公司豐富經驗。已為紅河成百上千家提供企業網站建設服務。企業網站搭建\外貿網站建設要多少錢,請找那個售后服務好的紅河做網站的公司定做!
登錄阿里云?→?工作臺?→ 物聯網平臺?→ 進入控制臺→ 公共實例
阿里云默認通信協議為MQTT,不需要特殊選擇,用戶按照如下步驟創建自己的產品:
創建產品 → 添加設備?
在"查看"標簽中,包含了MQTT連接的基本三元組信息,也就是后面設備要填充的基本參數
? 用戶每定義一類產品都會自動生成對應的Topic列表,當然我們也可以"自定義Topic"便于自己測試。
? ?指令解析參考《Lierda NT35ENT26E-CN AT命令手冊》,這里給出使用到的AT指令對應參數說明以便于理解。
AT+LMQTTCFG=cloud,tcpconnectID[,cloud _ type,data_type ]
tcpconnectID 。MQTT Socket 標識符。范圍:0~4。
cloud_type整型。2 alibaba,其他參數指定其他平臺
data_type整型。阿里云平臺 1 json數據?
AT+LMQTTCFG="cloud",0,2,1 ? 對應就是對接阿里云平臺,發送json格式的數據
AT+LMQTTCFG=aliauth,tcpconnectID[,product_key,device_name,device_secret]
填充阿里云平臺中設備的三元組信息
AT+LMQTTCFG="aliauth",0,"a1JszCpjS61","NT35E_06011","390358fc595040aa73221e8393aba86c"
這部分是模組進行TCP鏈路連接(需抓包確認)
AT+LMQTTOPEN=tcpconnectID,host_name,port
host_name對應阿里云 "設備信息"→"MQTT連接參數" 中的 "mqttHostUrl"
AT+LMQTTOPEN=0,"a1JszCpjS61.iot-as-mqtt點吸煙 -shanghai.aliyuncs點抗 ",1883
模組作為客戶端,通過MQTT協議連接到服務器(需抓包確認)
AT+LMQTTCONN=tcpconnectID[,clientID[,username[,password]]]
clientID字符串型。客戶端標識符。用戶可以隨便定義。 username,password 不需要填寫
AT+LMQTTCONN=0,"NT35E"
AT+LMQTTSUBUNSUB=tcpconnectID,subflag,msgID,topic1[,qos1[,topic2[,qos2]d…]]
subflag整型。消息類型 0 訂閱 1 取消訂閱
msgID整型。數據包消息標識符。范圍:0~65535。
topic帶雙引號的字符串型。客戶端訂閱或者退訂的主題。長度范圍:0~256 字節。
qos整型。客戶端發送訂閱消息(SUBSCRIBE)的 QoS 等級,此時為必選參數。2?正好一次,該主題下的消息確保接收端僅接收到一次
AT+LMQTTSUBUNSUB=0,0,1,"/a1JszCpjS61/ NT35E_06011 /user/COMMUTEST",2
這里注意topic對應參數的替換,里面的deviceName需要替換。
訂閱主題之后,服務器下發的數據模組就可以正常接收了。模組下發位置
? ?發布消息在對應的設備目錄下,如果有設備"訂閱"對應的消息,平臺"發布"相應的數據設備就可以接收到了。
AT+LMQTTPUB=tcpconnectID,msgID,qos,retain,topic,msglen,msg
msgID整型。 0~65535。任意定義,但qos=0 時,該參數值只能為0。
qos整型。 0?最多一次 1?至少一次 2 ?正好一次
retain整型 。服務器是否保存該消息。0?不保存? 1?保存
topic帶雙引號的字符串型。 客戶端發布消息的主題。長度范圍:0~256 字節
msglen整型 。指定的消息數據長度。范圍:0~1460。
msg字符串型。 需要發布的消息數據。
AT+LMQTTPUB=0,0,0,1,"/a1JszCpjS61/ NT35E_06011 /user/COMMUTEST",10,"1122334455"
?注意剛剛自己創建的主題屬性是" 發布和訂閱 ",所以模組發送該主題的信息,阿里云也是可以收到的
注意這里模組發送數據的時候,也推送了自己發送的數據,因為剛剛訂閱了這個主題,所以模組訂閱(收)到了對應的數據
? ?前面我們通過NT35E與平臺進行信息交互,那么為什么是這樣填寫對應的參數呢,每個參數對應的說明在阿里云上是什么樣的呢,用戶可以查看阿里云的幫助文檔進行確認。
? ?上面我們使用三元組的方式( 一機一密 )實現NT35E與阿里云平臺通信,但實際生產過程中該方式不好實現,比如工廠有1000個設備生產,如果每個設備都復制不同的三元組,很難實現工廠批量化生產,此時可以通過 一型一密 的通信方式解決該問題。
一型一密模組端實現方式后續更新。
需要用到的庫:
引入"PubSubClient.h"后
打開"PubSubClient.h"
修改如下內容:
關于MQTT協議, 請參考文章:
請參考我之前整理的文檔:
【騰訊文檔】MQTT連接阿里云示例(1)
如果使用了AliyunMqttArduino, 就不需要關系協議的報文和加密方式了
首先創建一個mqtt客戶端
返回值: 連接結果
返回: 狀態碼
mqttClient.publish(主題, 內容)
首先, 創建產品:
其次, 為產品添加設備
第三, 查看設備關鍵信息:
創建完后,我們發現系統已經自動創建了一些功能定義
找到產品的功能頁面, 點擊"編輯草稿"
最后發布新的物模型
非常簡單的修改, 只修改了要發送json里的param
注意同步修改param和json的內存占用大小
MQTT協議是廣泛應用的物聯網協議,使用測試MQTT協議需要MQTT的代理。有兩種方法使用MQTT服務,一是租用現成的MQTT服務器,如阿里云,百度云,華為云等公用的云平臺提供的MQTT服務,使用公用的MQTT服務器的好處是省事,但如果僅僅用于測試學習還需要注冊帳號,靈活性差些,有的平臺還需要付費。另一方法是自己使用開源的MQTT組件來搭建。
MQTT服務器非常多,如apache的ActiveMQ,emtqqd,HiveMQ,Emitter,Mosquitto,Moquette等等。
這里介紹的是用輕量級的mosquitto開源項目來搭建一個屬于自己的MQTT服務器。
第一步:需要安裝一臺linux主機,這不多介紹,可以使用真機安裝也可以使用虛擬機安裝。如果僅僅是自己測試使用都可以。
第二步:下載mosquitto需要的依賴
sudo apt-get install libssl-devsudo apt-get install uuid-devsudo apt-get install cmake
第三步:下載mosquitto并解壓,現在mosquitto官網最新的版本是1.5.1
tar xzvf mosquitto-1.5.1.tar.gz
第四步:編譯
cd mosquitto-1.5.1/
make
make install
第五步:啟動mosquitto
./mosquitto -v
1535473957: mosquitto version 1.5.1 starting
1535473957: Using default config.
1535473957: Opening ipv4 listen socket on port 1883.
1535473957: Opening ipv6 listen socket on port 1883.
這時候mosquitto就會以默認的參數啟動。如果需要帶配置文件可以修改配置文件mosquitto.conf,
啟動時候加上參數 -c,
./mosquitto -c mosquitto.conf
可以看到,mosquitto監聽的端口為1883.
這時候我們的MQTT服務器就搭建好了。可找一個mqtt客戶端來測試一下。
先發布一個主題“home/garden/fountain/2”
內容是“hello world”
這時候在mosquitto會打印出下面的log
535474247: New connection from 192.168.1.105 on port 1883.
1535474247: New client connected from 192.168.1.105 as MQTT_FX_Client (c1, k60).
1535474247: No will message specified.
1535474247: Sending CONNACK to MQTT_FX_Client (0, 0)
1535474307: Received PINGREQ from MQTT_FX_Client
1535474307: Sending PINGRESP to MQTT_FX_Client
1535474339: Received PUBLISH from MQTT_FX_Client (d0, q0, r0, m0, 'home/garden/fountain/2', ... (12 bytes))
1535474367: Received PINGREQ from MQTT_FX_Client
1535474367: Sending PINGRESP to MQTT_FX_Client
訂閱主題“home/garden/fountain/2”
可以看到收到了自己發布的消息。
用wireshark抓包
可以看到抓到了一個MQTT的publish的報文。
有很多通信模塊只有TCP功能,沒有MQTT功能,比如WIFI,W5500等模塊,還有一些NBIOT模塊,但是又想連接阿里云物聯網平臺,官方提供了操作系統,需要自己移植,很麻煩,比較難看得懂。就在想有沒有一些簡單一定的方法。
心想MQTT是基于TCP的,能否使用TCP轉MQTT?因此就想使用TCP協議然后轉MQTT協議連接阿里云物聯網平臺,經過試驗證明是可以的。
首先我們先分析一下如何登陸接入Onenet平臺。
先從它數據格式開始分析。首先我們要從后臺取出三個信息,我們以這個為例。
我們把產品ID,設備名稱,設備秘鑰,簡稱三要素 (具體是什么看你自己的設備)
其實阿里云物聯網平臺的MQTT協議用的就是標準的,不過它加入了自己的認證方式。
MQTT協議需要上傳四個參數,報活時間,clientID,用戶名,密碼。
那么阿里云的就在clientID,用戶名,密碼做了手腳。
clientID比較長,按照一定的格式
用戶名:設備名和秘鑰組成
密碼:使用了加密串進行了加密,有sha1或者MD5加密方式
下面我們來介紹一下
MQTT接入都是發十六進制的數據。
么我們發送的時候就是這樣子的一串數據
0x74 0x00 0x04 0x4d 0x51 0x54 0x54 0x04 0xC0 0078 0033 0x61 0x62 0x63 0x7c 0x73 0x65 0x63 0x75 0x72 0x65 0x6d 0x6f 0x64 0x65 0x3d 0x33 0x2c 0x73 0x69 0x67
0x6e 0x6d 0x65 0x74 0x68 0x6f 0x64 0x3d 0x68 0x6d 0x61 0x63 0x73 0x68 0x61 0x31 0x2c 0x74 0x69 0x6d 0x65 0x73 0x74 0x61 0x6d 0x70 0x3d 0x31 0x32 0x30 0x7c 0009
0x35 0x36 0x37 0x38 0x26 0x31 0x32 0x33 0x34 0028 0x32 0x32 0x32 0x37 0x35 0x30 0x44 0x45 0x44 0x46 0x45 0x34 0x46 0x37 0x37 0x34 0x30 0x30 0x32 0x45 0x45 0x38 0x37 0x45 0x45 0x44 0x32 0x39 0x43 0x46 0x44 0x30 0x36 0x33 0x38 0x43 0x35 0x46 0x36 0x36
十六進制解釋
數據長度:0x74
協議數據長度 0x00 0x04
協議類型: 0x4d 0x51 0x54 0x54
協議數據: 0x04 0xC0
keepAlive數據:0078
ClientID長度:0033
ClientID: 0x61 0x62 0x63 0x7c 0x73 0x65 0x63 0x75 0x72 0x65 0x6d 0x6f 0x64 0x65 0x3d 0x33 0x2c 0x73 0x69 0x67 0x6e 0x6d 0x65 0x74 0x68 0x6f 0x64 0x3d 0x68 0x6d 0x61 0x63 0x73 0x68 0x61 0x31 0x2c 0x74 0x69 0x6d 0x65 0x73 0x74 0x61 0x6d 0x70 0x3d 0x31 0x32 0x30 0x7c
用戶名:0009
用戶名: 0x35 0x36 0x37 0x38 0x26 0x31 0x32 0x33 0x34
密碼長度:0028
密碼: 0x32 0x32 0x32 0x37 0x35 0x30 0x44 0x45 0x44 0x46 0x45 0x34 0x46 0x37 0x37 0x34 0x30 0x30 0x32 0x45 0x45 0x38 0x37 0x45 0x45 0x44 0x32 0x39 0x43 0x46 0x44 0x30 0x36 0x33 0x38 0x43 0x35 0x46 0x36 0x36復制代碼上面的就是連接服務器的連接包
下面呢,我們來做個發布包(上傳數據到服務器)
0x30 0x1D 0009 2f7379732f706f7374 0x7b 0x70 0x61 0x72 0x61 0x6d 0x73 0x3a 0x7b 0x74 0x65 0x6d 0x70 0x3a 0x31 0x30 0x7d 0x7d
十六進制數據解釋
數據頭:0x30
數據長度:0x1D
TopicName數據長度:0009
TopicName數據內容:2f7379732f706f7374
主體json數據: 0x7b 0x70 0x61 0x72 0x61 0x6d 0x73 0x3a 0x7b 0x74 0x65 0x6d 0x70 0x3a 0x31 0x30 0x7d 0x7d復制代碼以上就是連接阿里云的數據包格式及發布數據的格式,由于時間問題沒有做訂閱的數據包分析,下一次更新訂閱的內容。
本文題目:阿里云mqtt服務器連接 8266mqtt連接阿里云
文章路徑:http://vcdvsql.cn/article10/ddiggdo.html
成都網站建設公司_創新互聯,為您提供響應式網站、App設計、全網營銷推廣、商城網站、ChatGPT、域名注冊
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯