您好,
我写了一个草图,其中我将我的 esp8266-07 连接到 CloudMQTT 代理。在我的代码中,我总是检查我的 esp 是否连接到代理。我使用 client.connected() 来处理这个问题。
第一个问题:
有时 ESP 会断开连接(client.state() == -4)。这个问题的原因是什么?为什么这种情况在一分钟内发生超过 4 次????我的互联网连接很稳定!
第二个问题:
有时当我使用 client.connect(ID, username, pass); ESP 冻结 10 或 15 秒,然后它不连接代理 (client.state() == -2) 。为什么会这样,更重要的是,我怎样才能度过这个延迟?????
我不知道我的代码是否能帮助您找到解决方案,但这是我的职责。由于变量
time_out,此函数在每个主循环中被调用并在每隔 60 个循环中发挥作用:
代码:
全选void make_connection(void)
{
if (time_out == 1)
{
switch (connect_cycle_stat)
{
case 0:
{
Serial.printf(\"\\nmake_connection ==>\");
Serial.printf(\"\\ncase %d. \", connect_cycle_stat);
if (WiFi.softAP(ap_ssid, ap_pass))
{
server.begin();
connect_cycle_stat++;
time_out = 0;
}
break;
}
case 1:
{
Serial.printf(\"\\nmake_connection ==>\");
Serial.printf(\"\\ncase %d. \", connect_cycle_stat);
Serial.printf(\"\\nWiFi.status() = %d\", WiFi.status());
if (WiFi.status() == WL_CONNECTED)
{
time_out = 0;
connect_cycle_stat++;
uint8_t mac[6];
WiFi.macAddress(mac);
device_ID += macToStr(mac);
//update_esp();
}
else
{
WiFi.begin(wifi_ssid, wifi_pass);
}
break;
}
case 2:
{
Serial.printf(\"\\nmake_connection ==>\");
Serial.printf(\"\\ncase %d. \", connect_cycle_stat);
Serial.printf(\"\\nmqtt_client.connected() = %d\", mqtt_client.connected());
Serial.printf(\"\\nWiFi.status() = %d\", WiFi.status());
if (mqtt_client.connected() == true)
{
mqtt_client.publish(out_topic.c_str(), \"Hello from ESP8266\");
mqtt_client.subscribe(\"steamer/appClient\");
// will handle the incoming messages for the topics subscribed.
mqtt_client.setCallback(callback);
connect_cycle_stat++;
}
else
{
//mqtt_client.disconnect();
delay(100);
mqtt_client.connect(device_ID.c_str(), mqtt_user, mqtt_pass);
}
break;
}
case 3:
{
Serial.printf(\"\\nmake_connection ==>\");
Serial.printf(\"\\ncase %d. \", connect_cycle_stat);
Serial.printf(\"\\nmqtt_client.connected() = %d\", mqtt_client.connected());
Serial.printf(\"\\nWiFi.status() = %d\", WiFi.status());
if (mqtt_client.connected() == false)
{
//mqtt_client.disconnect();
delay(100);
connect_cycle_stat--;
}
if (WiFi.status() != WL_CONNECTED)
{
WiFi.begin(wifi_ssid, wifi_pass);
connect_cycle_stat = 1;
}
break;
}
}
}
time_out++;
if (time_out > 60) time_out = 0;
}