乐鑫技术交流
直播中

张国厚

7年用户 1347经验值
私信 关注
[问答]

esp8266-07连接到CloudMQTT代理有时会断开连接的原因?

您好,
我写了一个草图,其中我将我的 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;
}







                     

更多回帖

发帖
×
20
完善资料,
赚取积分