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,果然很快就連接上阿里雲了!
 
遇到相同問題的同學不妨試下!
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM