Esp8266 Arduino PubSubClient连接阿里云老是返回rc=2错误的解决方案

Posted yeshuimaowei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Esp8266 Arduino PubSubClient连接阿里云老是返回rc=2错误的解决方案相关的知识,希望对你有一定的参考价值。

  最近在用Esp8266 Arduino连接阿里云IOT的时候,服务器端老是返回rc=2 的错误!

用了MQTTfx模拟连接阿里云IOT没有问题,但是把同样的ClientID,UserName和Password

用PubSubClient去连接阿里云的时候,就会出现问题.

  所以对MQTTfx的发送过程,和PubSubclient的发送过程进行了抓包,

技术图片

 

可以发现两种方式连接只有第14个字节内容不同,把pubsubclient的源码捞出来,可以看到:

buffer[length++] =((MQTT_KEEPALIVE) & 0xFF);
这个应该是对KEEPALIVE的请求定义,
MQTT_KEEPALIVE 宏定义为0x0F,经过这里计算后这个字节的结果仍为0x0F,而MQTTfx的为0x3C,找出不同后,把这一句的代码直接改为:
 
buffer[length++] =0x3C;// ((MQTT_KEEPALIVE) & 0xFF);
 
然后编译代码,上传到Esp8266,果然很快就连接上阿里云了!
 
遇到相同问题的同学不妨试下!
 

 

以上是关于Esp8266 Arduino PubSubClient连接阿里云老是返回rc=2错误的解决方案的主要内容,如果未能解决你的问题,请参考以下文章

ESP8266开发入门

在Arduino IDE中安装固件ESP32,ESP8266板

Arduino开发ESP8266——安装与配置ESP8266开发板

arduino下esp8266+web实现远程开关窗和雨滴感应开关窗

arduino UNO r3和arduino mega2560 用esp8266 01的WiFi模块可以接入百度天工物联网平台吗?

Arduino框架下ESP8266与ESP8266之间SPI主从收发通讯示例