ESP32网络断开时如何基于事件实现WiFi自动重连?
ESP32 基于事件的WiFi自动重连实现
连接性处理是ESP32固件开发中的重要环节,基于事件的重连方案稳定性表现良好。网上流传的一段常用示例代码无法直接运行,以下是修复后的可运行版本:
#include <WiFi.h> const char* ssid = "你的WiFi名称"; const char* password = "你的WiFi密码"; void WiFiStationConnected(WiFiEvent_t event, WiFiEventInfo_t info){ Serial.println("成功接入WiFi热点!"); } void WiFiGotIP(WiFiEvent_t event, WiFiEventInfo_t info){ Serial.println("WiFi已连接"); Serial.println("IP地址:"); Serial.println(WiFi.localIP()); } void WiFiStationDisconnected(WiFiEvent_t event, WiFiEventInfo_t info){ Serial.println("已断开与WiFi热点的连接"); Serial.print("断开原因:"); Serial.println(info.disconnected.reason); Serial.println("正在尝试重新连接..."); WiFi.begin(ssid, password); } void setup(){ Serial.begin(115200); // 清除旧的WiFi配置 WiFi.disconnect(true); delay(1000); // 注册WiFi事件回调(适配新版Arduino-ESP32框架) WiFi.onEvent(WiFiStationConnected, ARDUINO_EVENT_WIFI_STA_CONNECTED); WiFi.onEvent(WiFiGotIP, ARDUINO_EVENT_WIFI_STA_GOT_IP); WiFi.onEvent(WiFiStationDisconnected, ARDUINO_EVENT_WIFI_STA_DISCONNECTED); WiFi.begin(ssid, password); Serial.println(); Serial.println(); Serial.println("等待WiFi连接... "); } void loop(){ delay(1000); }
关键修复点
- 事件类型适配:新版Arduino-ESP32框架已将原
SYSTEM_EVENT_*系列事件宏替换为ARDUINO_EVENT_WIFI_STA_*,这是原代码无法运行的核心原因 - 完善调试信息:在断开事件中添加了具体断开原因的打印,便于排查连接问题
- 保留配置清除逻辑:清除旧WiFi配置可避免残留参数影响新连接流程
内容的提问来源于stack exchange,提问作者Tashfi Nowroz
相关产品推荐
相关产品推荐

