目录:
- 1.情况介绍
- 2.发送心跳包和MQTT重连实现步骤
- 3.运行效果
1.情况介绍
硬件通过ESP8266-01s连接自己的MQTT服务器EMQX的时候,发现连上后没过多久就自动断开了,由于硬件代码使用的是ONNET的案例代码改的,所以发现该案例代码并没有发送心跳包和重连,所以根据自己的理解在ONNET案例代码的基础上增加了发送心跳包和重连的操作。
- 采用的ONNET的案例代码
案例代码网站:https://open.iot.10086.cn/bbs/thread-863-1-1.html,百度网盘链接:https://pan.baidu.com/s/1x4HmJWm-JkJkEftLBHs72g 提取码:l00d
- 我使用的案例代码是:21.MQTT-例程
- 心跳机制
所谓的心跳机制就是客户端每隔N秒向服务端发送一个心跳消息,服务端收到心跳消息后,回复同样的心跳消息给客户端。如果服务端或客户端在M秒(M>N)内都没有收到包括心跳消息在内的任何消息,即心跳超时,我们就认为目标TCP连接已经断开了。 ----来源于 https://blog.csdn.net/hanhailong18/article/details/82785610
- 本案例的心跳机制
在该案例中客户端发送心跳包就是向服务端发送一个消息,该消息只有消息头,没有其他内容,消息头的内容为0xC0 0x00,服务端收到该消息时会给客户端回复一个消息,该消息也是一样的只有消息头内容为0xD0 0x00,如果客户端发送心跳包后,没有收到任何消息,说明和服务端断开连接了,这时需要重新连接服务端。 —来源于 https://open.iot.10086.cn/bbs/thread-880-1-1.html
- 在MqttKit文件中存在心跳请求组包的函数代码,但是案例中并没有相应发送心跳包的函数,所以需要自己编写。
2.发送心跳包和MQTT重连实现步骤
- 首先,在esp8266文件中编写发送心跳包的函数MQTT_Ping()
-
在main中按时发送心跳包,这里我并没有采用定时器,而是按软件计数的方式来发送心跳包
3.运行效果
- 发送心跳包收到回复,表示和服务器的连接没有问题
- 发送的心跳包没有收到数据,并进行重连