本帖最后由 zkzk 于 2021-8-25 14:33 编辑
一:定时检查连接 要在连接丢失后重新连接到 Wi-Fi,您可以使用 WiFi.reconnect() 尝试重新连接到之前连接的接入点: WiFi.reconnect()或者,您可以使用 WiFi.disconnect() WiFi.begin(ssid,password). WiFi.disconnect();//断开连接WiFi.begin(ssid, password);//重新连接或者,您也可以尝试使用以下命令重新启动 ESP32 ESP.restart() 当连接丢失时。 您可以将类似于下面的代码段的内容添加到 loop() 定时时检查电路板是否已连接,并在失去连接时尝试重新连接。 - unsigned long currentMillis = millis();
- // 定时检查WIFI是否连接,如果无连接则重连
- if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillis >=interval)) {
- Serial.print(millis());
- Serial.println("Reconnecting to WiFi...");
- WiFi.disconnect();
- WiFi.reconnect();
- previousMillis = currentMillis;
- }
复制代码完整示例: - #include <WiFi.h>
- // Replace with your network credentials (STATION)
- const char* ssid = "REPLACE_WITH_YOUR_SSID";
- const char* password = "REPLACE_WITH_YOUR_PASSWORD";
- unsigned long previousMillis = 0;
- unsigned long interval = 30000;
- void initWiFi() {
- WiFi.mode(WIFI_STA);
- WiFi.begin(ssid, password);
- Serial.print("Connecting to WiFi ..");
- while (WiFi.status() != WL_CONNECTED) {
- Serial.print('.');
- delay(1000);
- }
- Serial.println(WiFi.localIP());
- }
- void setup() {
- Serial.begin(115200);
- initWiFi();
- Serial.print("RRSI: ");
- Serial.println(WiFi.RSSI());
- }
- void loop() {
- unsigned long currentMillis = millis();
- // if WiFi is down, try reconnecting every CHECK_WIFI_TIME seconds
- if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillis >=interval)) {
- Serial.print(millis());
- Serial.println("Reconnecting to WiFi...");
- WiFi.disconnect();
- WiFi.reconnect();
- previousMillis = currentMillis;
- }
- }
复制代码
二:WIFI事件自动连接 ESP32 能够处理不同的 Wi-Fi 事件。使用 Wi-Fi 事件,您无需经常检查 Wi-Fi 状态。当某个事件发生时,它会自动调用相应的处理函数。 - SYSTEM_EVENT_STA_CONNECTED:ESP32 以站模式连接到接入点/热点(您的路由器);
- SYSTEM_EVENT_STA_DISCONNECTED:ESP32 站与接入点断开连接。
转到下一部分以查看应用示例。 失去连接后重新连接到 Wi-Fi 网络(Wi-Fi 事件)
Wi-Fi 事件可用于检测连接丢失并在之后立即尝试重新连接(使用 SYSTEM_EVENT_AP_STADISCONNECTED事件)。这是一个示例代码: - #include <WiFi.h>
-
- const char* ssid = "REPLACE_WITH_YOUR_SSID";
- const char* password = "REPLACE_WITH_YOUR_PASSWORD";
- //连接事件
- void WiFiStationConnected(WiFiEvent_t event, WiFiEventInfo_t info){
- Serial.println("Connected to AP successfully!");
- }
- //获取IP事件
- void WiFiGotIP(WiFiEvent_t event, WiFiEventInfo_t info){
- Serial.println("WiFi connected");
- Serial.println("IP address: ");
- Serial.println(WiFi.localIP());
- }
- //断开连接事件
- void WiFiStationDisconnected(WiFiEvent_t event, WiFiEventInfo_t info){
- Serial.println("Disconnected from WiFi access point");
- Serial.print("WiFi lost connection. Reason: ");
- Serial.println(info.disconnected.reason);
- Serial.println("Trying to Reconnect");
复制代码
|