ESP32连接华为云IoTDA返回failed with state 2

目录

问题描述:

 解决过程:

问题解决方法:

出现问题的软硬件环境:


问题描述:

  • ESP32连接华为云IoTDA返回failed with state 2

 解决过程:

  • 查询了PubSubClient库的文档中关于state编号的描述,stage 2代表“服务器拒绝了clientId"
  • PubSubClient库的文档
    经过检查,clientId是正确的

此处附上PubSubClient库的文档链接

然后我翻了一下华为云IoTDA的帮助文档,发现了设备连接鉴权说明原生MQTT协议设备和平台建链时,常见返回码原生MQTT协议设备和平台建链时,常见返回码设备连接鉴权说明这篇文档,其中:

原生MQTT协议设备和平台建链时的常见返回码——来自华为云IoTDA帮助文档

 stage 2 也代表心跳时间间隔不满足平台要求

  • 问题解决方法:

 在client.setServer(mqttServer, mqttPort)函数后加上client.setKeepAlive (60)设置心跳时间间隔即可

 

  • 出现问题的软硬件环境:

  • 硬件:

ESP32

  • 编程环境:

arduino IDE

  • 服务器:

华为云IoTDA(MQTT接口)

  • 使用的库:
#include <WiFi.h>
#include <PubSubClient.h>
  •  代码如下:
const char* ssid = "yourNetworkName";
const char* password =  "yourNetworkPassword";
const char* mqttServer = "m11.cloudmqtt.com";
const int mqttPort = 12948;
const char* mqttUser = "yourMQTTuser";
const char* mqttPassword = "yourMQTTpassword";
 
WiFiClient espClient;
PubSubClient client(espClient);
 
void setup() {
 
  Serial.begin(115200);
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println("Connecting to WiFi..");
  }
 
  Serial.println("Connected to the WiFi network");
 
  client.setServer(mqttServer, mqttPort);
 
  while (!client.connected()) {
    Serial.println("Connecting to MQTT...");
 
    if (client.connect("ESP32Client", mqttUser, mqttPassword )) {
 
      Serial.println("connected");
 
    } else {
 
      Serial.print("failed with state ");
      Serial.print(client.state());
      delay(2000);
 
    }
  }
 
  client.publish("esp/test", "Hello from ESP32");
 
}
 
void loop() {
  client.loop();
}

 

posted @ 2022-05-31 23:24  Witheart  阅读(24)  评论(1)    收藏  举报  来源