Just some handy pointers for working with and managing WiFi on the ESP32.
void wifiConnect(const char* ssid, const char* passphrase) {
while (WiFi.status() != WL_CONNECTED) {
WiFi.mode(WIFI_STA);
WiFi.setHostname("ESP32-Dev");
WiFi.begin(ssid, passphrase);
for (uint8_t i = 0; i < 6; i++) {
delay(1000);
if (WiFi.status() == WL_CONNECTED) {
WiFi.config(WiFi.localIP(), WiFi.gatewayIP(), WiFi.subnetMask(), IPAddress(9,9,9,9), IPAddress(8,8,8,8));
//Serial.println(WiFi.status());
return;
}
Serial.print(".");
}
Serial.println();
//Serial.println(WiFi.status());
Serial.print("WiFi didn't connect: ");
switch(WiFi.status()) {
case WL_IDLE_STATUS : Serial.println("WiFi idle"); break;
case WL_NO_SSID_AVAIL : Serial.println("SSID unavailable"); break;
case WL_SCAN_COMPLETED : Serial.println("Network scan complete"); break;
case WL_CONNECTED : Serial.println("Connected"); break;
case WL_CONNECT_FAILED : Serial.println("Connection failed"); break;
case WL_CONNECTION_LOST : Serial.println("Connection lost"); break;
case WL_DISCONNECTED : Serial.println("Disconnected"); break;
default : Serial.println(WiFi.status()); break;
}
Serial.println("Will try again in 10s.");
WiFi.disconnect();
WiFi.mode(WIFI_MODE_NULL);
delay(10000);
}
Serial.println(WiFi.status());
}
void setup() {
...
wifiConnect(ssid, password);
...
}
void loop() {
...
// Set state to for expected power management
WiFi.disconnect();
WiFi.mode(WIFI_MODE_NULL);
...
}