首页 > 解决方案 > 电涌后esp32重新连接

问题描述

我的网络中有一个 esp32 作为 STA,收集传感器数据,通过我的 wifi AP 发布到我的家庭网络。一切都很好,直到我们在附近出现了普遍的电力激增。当电源恢复时,esp32 已脱离网络。我不得不回收它的电源让它重新建立连接。对此有解释吗?很可能它的出现速度比 wifi 或 mqtt 代理要快得多。这可能是问题吗?如果这是问题所在,有没有办法在 wifi 网络和 mqtt 可用后推迟启动 esp32?

编辑:我回到我原来的帖子来添加一些我使用的代码。

  void setup() {
  Serial.begin(115200);
  delay(10);
  
  WiFi.mode(WIFI_STA);
  // Configures static IP address
  
  if (!WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS)) {
    Serial.println("STA Failed to configure");
  }
  
  // Connect to Wi-Fi network with SSID and password
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  // Print local IP address 
  Serial.println("");
  Serial.println("WiFi connected.");
  Serial.println("IP address: ");
  ...
  client.setKeepAlive( MQTT_KEEPALIVE );
  client.setServer(mqtt_server, 1883);
  client.connect(aHostname);
  if (!client.connected()) {
    Serial.print("mqtt status in setup: ");
    Serial.println(client.state());
    reconnect();
  } else {
    client.setCallback(callback);
    Serial.print("mqtt status in setup: ");
    Serial.println(client.state());
    client.setCallback(callback);
    client.setKeepAlive( MQTT_KEEPALIVE );
  }

此外,如果 mqtt 代理丢失,则会在循环中尝试重新连接:

void loop(){
  if (!client.connected()) {
    reconnect();
  }
..
}

标签: esp32

解决方案


如果是 ESP32 启动速度比 WiFi 接入点快的问题,那么这有一个非常简单的解决方案。在 ESP32 中重试 WiFi 连接,直到成功。然后对 MQTT 执行相同的操作。如果您考虑一下,如果没有 WiFi 和 MQTT 连接,该设备将毫无用处,因此请随时继续重试(或直到成功)。

在您的情况下,MQTT 代理的重试loop()应该是为 WiFi 添加类似重试的明显示例。由于我不使用 Arduino,而且我目前没有时间阅读 WiFi 模块的文档,所以我将把实现留给你。


推荐阅读