ESP32连接华为云IoTDA返回failed with state 2
目录
问题描述:
- ESP32连接华为云IoTDA返回failed with state 2
解决过程:
- 查询了PubSubClient库的文档中关于state编号的描述,stage 2代表“服务器拒绝了clientId"
-
经过检查,clientId是正确的
PubSubClient库的文档
然后我翻了一下华为云IoTDA的帮助文档,发现了设备连接鉴权说明原生MQTT协议设备和平台建链时,常见返回码原生MQTT协议设备和平台建链时,常见返回码设备连接鉴权说明这篇文档,其中:
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();
}
浙公网安备 33010602011771号