前言

请先看这一节了解一下MQTT

)

如果自己有兴趣可以自己去安装MQTT软件

然后让自己的设备通过自己的服务器进行通信

或者根据文章直接连接阿里云物联网平台

ESP8266 AT指令开发(基于STC89C52单片机): 关于上一节MQTT底层封包解包源码使用说明_单片机




说明

用户看完上面的文章以后,需要明确,MQTT软件就是一个TCP服务器

然后在TCP服务器的基础上封装了一套协议

只要是咱的模块可以实现TCP,那么就可以实现连接MQTT

本人这节的MQTT包底层封装的非常全面,

用户可根据自己对MQTT的理解合理的运用.

由于本节的开发板使用的是89C58,其容量受到限制

故只能提供以消息等级0进行通信的基础例子

如果想了解封装的更加全面的代码请点击链接



先说一下程序的流程

一,配网(控制wifi模块连接上路由器)

配网采用的SmartConfig

ESP8266 AT指令开发(基于STC89C52单片机): 关于上一节MQTT底层封包解包源码使用说明_单片机_02



SmartConfig流程就是上一节的APP绑定设备的流程


具体流程请看上一节




模块配网以后便连接上了路由器,那么便可以访问广域网





控制模块连接MQTT

1.请用户自行打开一下函数

ESP8266 AT指令开发(基于STC89C52单片机): 关于上一节MQTT底层封包解包源码使用说明_封装_03



2.获取了MAC地址

连接MQTT的Client采用 设备的MAC地址


设备订阅的主题是:user/MAC地址


设备发布的主题是:device/MAC地址


所以获取了MAC地址


ESP8266 AT指令开发(基于STC89C52单片机): 关于上一节MQTT底层封包解包源码使用说明_单片机_04






3.连接TCP服务器

实际上就是连接MQTT服务器,MQTT服务器就是一个TCP

所以先用TCP连接上

  我使用的是AT+SAVETRANSLINK

这个指令是直接进入透传模式+自动重连

单片机通过串口发送的数据,wifi模块接收以后自动发给TCP服务器

wifi模块从TCP服务器接收的数据直接通过串口发给单片机

ESP8266 AT指令开发(基于STC89C52单片机): 关于上一节MQTT底层封包解包源码使用说明_封装_05



4.打包MQTT连接指令

ESP8266 AT指令开发(基于STC89C52单片机): 关于上一节MQTT底层封包解包源码使用说明_mac地址_06



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


ESP8266 AT指令开发(基于STC89C52单片机): 关于上一节MQTT底层封包解包源码使用说明_封装_07




判断是否连接上

ESP8266 AT指令开发(基于STC89C52单片机): 关于上一节MQTT底层封包解包源码使用说明_mac地址_08




6.订阅主题

ESP8266 AT指令开发(基于STC89C52单片机): 关于上一节MQTT底层封包解包源码使用说明_数据_09




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


ESP8266 AT指令开发(基于STC89C52单片机): 关于上一节MQTT底层封包解包源码使用说明_单片机_10







判断是否订阅成功

ESP8266 AT指令开发(基于STC89C52单片机): 关于上一节MQTT底层封包解包源码使用说明_单片机_11




7.发布消息

ESP8266 AT指令开发(基于STC89C52单片机): 关于上一节MQTT底层封包解包源码使用说明_封装_12





ESP8266 AT指令开发(基于STC89C52单片机): 关于上一节MQTT底层封包解包源码使用说明_单片机_13



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)

ESP8266 AT指令开发(基于STC89C52单片机): 关于上一节MQTT底层封包解包源码使用说明_封装_14







8.接收处理消息

ESP8266 AT指令开发(基于STC89C52单片机): 关于上一节MQTT底层封包解包源码使用说明_服务器_15



ESP8266 AT指令开发(基于STC89C52单片机): 关于上一节MQTT底层封包解包源码使用说明_服务器_16





9.发送心跳包


ESP8266 AT指令开发(基于STC89C52单片机): 关于上一节MQTT底层封包解包源码使用说明_封装_17



ESP8266 AT指令开发(基于STC89C52单片机): 关于上一节MQTT底层封包解包源码使用说明_mac地址_18










结语

这是最底层的MQTT封包

用户可根据自己的单片机容量合理的再次封装

ESP8266 AT指令开发(基于STC89C52单片机): 关于上一节MQTT底层封包解包源码使用说明_服务器_19