?一、前言
本篇文章通過發送AT指令,與云平臺建立通訊:
1.創建云平臺
2.燒錄AT固件
3.MQTT訂閱(本篇)
4.單片機代碼編寫
5.微信小程序(下載微信開發者工具即可使用)
二、AT指令集介紹
AT指令是一種文本序列,用于控制調制解調器、手機等通訊設備。“AT"代表"Attention”,其后跟隨的文字指定要執行的命令。在ESP8266等模塊中,AT指令用于設定模塊參數、控制網絡連接和其他功能。
以下是一些常用的AT指令示例:
AT:檢測通信模塊與控制端之間的連接。
AT+RST:重置模塊。
AT+CWMODE:設置Wi-Fi工作模式(例如Station模式、AP模式)。
AT+CWJAP:連接Wi-Fi網絡。
AT指令集的優勢在于其簡單性,使得開發者能夠不必深入微控制器的復雜編程,就能夠快速實現無線通信的基本功能。
AT指令的解釋及其用途:
官方AT指令地址:ESP-AT用戶指南
https://docs.espressif.com/projects/esp-at/zh_CN/latest/esp32/AT_Command_Set/MQTT_AT_Commands.html#cmd-mqttpubraw
很多AT指令后面都帶有一些數字參數,可以通過上方文檔了解每個參數的意義
1.AT+MQTTUSERCFG=0,1,"CSDN","YqRZ5hrM6p","version=2018-10-31&res=products%2FYqRZ5hrM6p%2Fdevices%2FCSDN&et=2028715245&method=md5&sign=G4I0xqIYmYUtCdTTo2t%2FqQ%3D%3D",0,0,""
意義:這個指令用于配置MQTT客戶端的用戶參數。參數0指的是客戶端ID,1為MQTT版本,"CSDN"是設備名稱,"YqRZ5hrM6p"為產品ID,后面一長串是Token,最后的兩個0表示是否清理會話和是否啟用遺囑消息。
作用:設置了客戶端的認證信息和其他MQTT連接選項,這對于與MQTT代理進行通信是必要的。
2.AT+MQTTCONN=0,"mqtts.heclouds.com",1883,1
意義:此指令用于發起到MQTT服務器的連接。參數0是客戶端ID,"mqtts.heclouds.com"是MQTT服務器地址,1883是服務器端口號,最后的1表示啟用清理會話。
作用:根據提供的服務器詳情和客戶端配置信息,指令會嘗試建立MQTT連接。
3.AT+MQTTSUB=0,"$sys/YqRZ5hrM6p/CSDN/thing/property/post/reply",0
意義:指令用于訂閱MQTT主題。0是客戶端ID,"$sys/YqRZ5hrM6p/CSDN/thing/property/post/reply"是MQTT主題,最后的0是請求的服務質量(QoS)等級。
作用:向MQTT服務器表明客戶端想要接收與該主題相關的消息。
4.AT+MQTTPUB=0,"$sys/YqRZ5hrM6p/CSDN/thing/property/post","{\"id\":\"123\"\,\"params\":{\"temp\":{\"value\":23.6\}}}",0,0
意義:通過此指令將消息發布到MQTT主題。0是客戶端ID,"$sys/YqRZ5hrM6p/CSDN/thing/property/post"是要發布消息的主題。緊接著的是要發布的消息內容,0,0分別表示消息的QoS等級和是否保留消息。
作用:發送一條消息到MQTT服務器,服務器則將該消息轉發給訂閱了對應主題的所有客戶端
5.AT+MQTTSUB=0,"$sys/YqRZ5hrM6p/CSDN/thing/property/set",0
意義:該指令用于指示ESP8266模塊訂閱一個指定的MQTT主題,"$sys/YqRZ5hrM6p/CSDN/thing/property/set"。
作用:使ESP8266模塊能夠監聽并接收到任何發送到這個主題的消息,通常這些消息是針對設備設置或控制指令。
開始用AT指令連接MQTT
記得將下面的內容更改自己的信息
按順序從1到11上傳即可,每次成功即返回“OK”;?
?收到最后一條需要回應的數據:
AT+MQTTPUB=0,"$sys/7M6S32xnSS/20010712/thing/property/set_reply","{\"id\":\"4\"\,\"code\": 200\,\"msg\":\"success\"}",0,0
7M6S32xnSS:設備ID
20010712:設備名稱
4:ID(要與下發的ID相同)
注:如果第11條回應了“OK”,但是沒有回應藍框部分,這時候你就要注意了,因為他對后面沒有任何影響(桀桀桀桀桀),只要發完第11條,平臺下發了藍框上面那一部分和“OK”就行。
OneNET數據下發
①:點擊運維監控
②:點擊API調試
③:物模型使用:設置設備屬性
④:填入參數
⑤:這里是接收到的數據
⑥:回應數據:產品id和設備名稱需要更改為自己的,以及里面回應的id需要和接收到的id一致
重點:先點擊一次執行,然后看串口打印助手上面的ID:
此條消息是需要在約定時間內回復的,格式為,其中設備ID和設備名稱改為自己的,id需要與下發的消息ID一致,提前放在待發送區,然后再次點擊執行,在執行有灰色變為藍色(執行右邊圓圈結束)之前,發送這條數據:
AT+MQTTPUB=0,"$sys/7M6S32xnSS/20010712/thing/property/set_reply","{\"id\":\"28\"\,\"code\": 200\,\"msg\":\"success\"}",0,0
⑦:如果回應成功后,這個頁面會顯示code:0
成功之后在這個界面可以看到自己上傳的23.6
每次下發這個指令,修改后面的數值,云平臺的數據就會變化。
AT+MQTTPUB=0,"$sys/7M6S32xnSS/20010712/thing/property/post","{\"id\":\"123\"\,\"params\":{\"temp\":{\"value\":23.6\}}}",0,0
三、MQTT.fx使用教程
這個軟件主要是測試上傳和下發的數據是否有問題:
1.創建工程
2.訂閱
在訂閱欄輸入以下網址:
$sys/7M6S32xnSS/20010712/thing/property/set? ? ? ? ? ? ? ? ? ? ? ? 訂閱
$sys/產品ID/設備名稱/thing/property/set
如果你的ESP8266已經連接上云平臺這個就會失敗;
3.發布
圖中2目標設備:
$sys/7M6S32xnSS/20010712/thing/property/post? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 發布
$sys/產品ID/設備名稱/thing/property/post
圖中3.發布內容:
嚴格版本:
{"id": "123","version": "1.0","params": {"temp": {"value": 12.5}}
}
隨意版本:
{"id":"123","params":{"temp":{"value":2.5}}}
發布之后,你在軟件的訂閱端也是能夠看到的: