如何修复 ESP32 不连接 Wifi 网络的问题

如果你使用类似我们的最小 ESP32 wifi 示例的程序:

example-5.txt
#include <WiFi.h>

void setup() {
  Serial.begin(115200);
  WiFi.begin("MyWifiNetworkName", "MyWifiPassword");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.println("Wifi connecting...");
    delay(500);
  }
  Serial.println("Wifi connected");
}
void loop() {
  // 将你的主要代码放在这里,重复运行:
}

而你只看到循环的

example-4.txt

消息,按下你板子的 RESET 按钮(或拔下并重新插入电源以重置)然后再试。如果你在尝试重置 5 次后仍然只看到 Wifi connecting... 消息,很可能是你的 wifi 凭据错误或 ESP32 看不到你的 Wifi 网络!

否则,如果你的 ESP32 有时几乎立即连接到 Wifi 网络,有时似乎根本不连接,请使用此代码在 5 秒内未连接时自动重置 ESP32:

example-3.cpp
uint32_t notConnectedCounter = 0;
while (WiFi.status() != WL_CONNECTED) {
    delay(100);
    Serial.println("Wifi connecting...");
    notConnectedCounter++;
    if(notConnectedCounter > 150) { // 如果 15 秒后未连接则重置板
        Serial.println("Resetting due to Wifi not connecting...");
        ESP.restart();
    }
}

完整示例:

example-2.cpp
#include <WiFi.h>

void setup() {
  Serial.begin(115200);
  WiFi.begin("MyWifiSSID", "MyWifiPassword");

  // 等待 wifi 连接
  uint32_t notConnectedCounter = 0;
  while (WiFi.status() != WL_CONNECTED) {
      delay(100);
      Serial.println("Wifi connecting...");
      notConnectedCounter++;
      if(notConnectedCounter > 150) { // 如果 5 秒后未连接则重置板
          Serial.println("Resetting due to Wifi not connecting...");
          ESP.restart();
      }
  }
  Serial.print("Wifi connected, IP address: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  // 将你的主要代码放在这里,重复运行:
}

或者,使用此函数:

example-1.cpp
 * 等待 WiFi 连接,如果未连接则重启
 */
void waitForWiFiConnectOrReboot(bool printOnSerial=true) {
  uint32_t notConnectedCounter = 0;
  while (WiFi.status() != WL_CONNECTED) {
      delay(100);
      if(printOnSerial) {
        Serial.println("Wifi connecting...");
      }
      notConnectedCounter++;
      if(notConnectedCounter > 150) { // 如果 5 秒后未连接则重置板
          if(printOnSerial) {
            Serial.println("Resetting due to Wifi not connecting...");
          }
          ESP.restart();
      }
  }
  if(printOnSerial) {
    // 打印 wifi IP 地址
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
  }
}

Check out similar posts by category: Arduino, ESP8266/ESP32, PlatformIO