esp32 - 电涌后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 启动速度比 WiFi 接入点快的问题,那么这有一个非常简单的解决方案。在 ESP32 中重试 WiFi 连接,直到成功。然后对 MQTT 执行相同的操作。如果您考虑一下,如果没有 WiFi 和 MQTT 连接,该设备将毫无用处,因此请随时继续重试(或直到成功)。
在您的情况下,MQTT 代理的重试loop()
应该是为 WiFi 添加类似重试的明显示例。由于我不使用 Arduino,而且我目前没有时间阅读 WiFi 模块的文档,所以我将把实现留给你。
推荐阅读
- laravel - 如何在从控制器返回之前将 Laravel 5.5 中的 API 资源类转换为数组?
- sql - 语法错误缺少表达式
- python - 根据条件提取列值
- jakarta-mail - MimeBodyPart.getContent() 中的奇怪异常
- javascript - ajax 响应显示 javascript 而不是隐藏它
- javascript - 在vue.js中以降序数据对象制作项目对象
- python - 将多个数组合并在一起给出错误
- python - 搜索字符串并删除包含字符串的行和下面的行
- python-3.x - 类内的方法总是返回相同的输出,而类外的相同逻辑工作
- youtube - 如何列出 YouTube 频道中的所有视频?