前言
請先看這一節了解一下MQTT
https://www.cnblogs.com/yangfengwu/p/11762642.html (了解MQTT)
如果自己有興趣可以自己去安裝MQTT軟件
然后讓自己的設備通過自己的服務器進行通信
或者根據文章直接連接阿里雲物聯網平台

說明
用戶看完上面的文章以后,需要明確,MQTT軟件就是一個TCP服務器
然后在TCP服務器的基礎上封裝了一套協議
只要是咱的模塊可以實現TCP,那么就可以實現連接MQTT
本人這節的MQTT包底層封裝的非常全面,
用戶可根據自己對MQTT的理解合理的運用.
由於本節的開發板使用的是89C58,其容量受到限制
故只能提供以消息等級0進行通信的基礎例子
如果想了解封裝的更加全面的代碼請點擊鏈接
https://www.cnblogs.com/yangfengwu/p/12540710.html
先說一下程序的流程
一,配網(控制wifi模塊連接上路由器)
配網采用的SmartConfig

SmartConfig流程就是上一節的APP綁定設備的流程
具體流程請看上一節
模塊配網以后便連接上了路由器,那么便可以訪問廣域網
控制模塊連接MQTT
1.請用戶自行打開一下函數

2.獲取了MAC地址
連接MQTT的Client采用 設備的MAC地址
設備訂閱的主題是:user/MAC地址
設備發布的主題是:device/MAC地址
所以獲取了MAC地址

3.連接TCP服務器
實際上就是連接MQTT服務器,MQTT服務器就是一個TCP
所以先用TCP連接上
我使用的是AT+SAVETRANSLINK
這個指令是直接進入透傳模式+自動重連
單片機通過串口發送的數據,wifi模塊接收以后自動發給TCP服務器
wifi模塊從TCP服務器接收的數據直接通過串口發給單片機

4.打包MQTT連接指令

int mqtt_msg_connect(mqtt_connect_info_t* info,unsigned char **data_ptr,unsigned char* buffer,int buffer_length)

判斷是否連接上

6.訂閱主題

int mqtt_msg_subscribe_topic(unsigned char* topic, int qos,unsigned char **data_ptr,unsigned char* buffer,int buffer_length)

判斷是否訂閱成功

7.發布消息


int mqtt_msg_publish(unsigned char* topic,unsigned char* date, int data_length, int qos, int retain,unsigned char **data_ptr,unsigned char* buffer,int buffer_length)

8.接收處理消息


9.發送心跳包


結語
這是最底層的MQTT封包
用戶可根據自己的單片機容量合理的再次封裝

