Clean up and added comments about the esp32 sdk bug

This commit is contained in:
Jm Casler 2020-09-16 22:31:07 -07:00
parent 493b25f23e
commit 73b47a78aa
3 changed files with 42 additions and 46 deletions

View File

@ -20,8 +20,20 @@ bool isWifiAvailable()
// Disable WiFi // Disable WiFi
void deinitWifi() void deinitWifi()
{ {
/*
Note from Jm (Sept 16, 2020):
A bug in the ESP32 SDK was introduced in Oct 2019 that keeps the WiFi radio from
turning back on after it's shut off. See:
https://github.com/espressif/arduino-esp32/issues/3522
Until then, WiFi should only be allowed when there's no power
saving on the 2.4g transceiver.
*/
WiFi.mode(WIFI_MODE_NULL); WiFi.mode(WIFI_MODE_NULL);
DEBUG_MSG("WiFi Turned Off\n"); DEBUG_MSG("WiFi Turned Off\n");
WiFi.printDiag(Serial);
} }
@ -45,6 +57,8 @@ void initWifi()
} else { } else {
WiFi.mode(WIFI_MODE_STA); WiFi.mode(WIFI_MODE_STA);
WiFi.onEvent(WiFiEvent); WiFi.onEvent(WiFiEvent);
//esp_wifi_set_ps(WIFI_PS_NONE); // Disable power saving
DEBUG_MSG("JOINING WIFI: ssid=%s\n", wifiName); DEBUG_MSG("JOINING WIFI: ssid=%s\n", wifiName);
if (WiFi.begin(wifiName, wifiPsw) == WL_CONNECTED) { if (WiFi.begin(wifiName, wifiPsw) == WL_CONNECTED) {
@ -65,31 +79,31 @@ void WiFiEvent(WiFiEvent_t event)
switch (event) { switch (event) {
case SYSTEM_EVENT_WIFI_READY: case SYSTEM_EVENT_WIFI_READY:
DEBUG_MSG("WiFi interface ready"); DEBUG_MSG("WiFi interface ready\n");
break; break;
case SYSTEM_EVENT_SCAN_DONE: case SYSTEM_EVENT_SCAN_DONE:
DEBUG_MSG("Completed scan for access points"); DEBUG_MSG("Completed scan for access points\n");
break; break;
case SYSTEM_EVENT_STA_START: case SYSTEM_EVENT_STA_START:
DEBUG_MSG("WiFi client started"); DEBUG_MSG("WiFi client started\n");
break; break;
case SYSTEM_EVENT_STA_STOP: case SYSTEM_EVENT_STA_STOP:
DEBUG_MSG("WiFi clients stopped"); DEBUG_MSG("WiFi clients stopped\n");
break; break;
case SYSTEM_EVENT_STA_CONNECTED: case SYSTEM_EVENT_STA_CONNECTED:
DEBUG_MSG("Connected to access point"); DEBUG_MSG("Connected to access point\n");
break; break;
case SYSTEM_EVENT_STA_DISCONNECTED: case SYSTEM_EVENT_STA_DISCONNECTED:
DEBUG_MSG("Disconnected from WiFi access point"); DEBUG_MSG("Disconnected from WiFi access point\n");
// Reconnect WiFi // Reconnect WiFi
reconnectWiFi(); reconnectWiFi();
break; break;
case SYSTEM_EVENT_STA_AUTHMODE_CHANGE: case SYSTEM_EVENT_STA_AUTHMODE_CHANGE:
DEBUG_MSG("Authentication mode of access point has changed"); DEBUG_MSG("Authentication mode of access point has changed\n");
break; break;
case SYSTEM_EVENT_STA_GOT_IP: case SYSTEM_EVENT_STA_GOT_IP:
DEBUG_MSG("Obtained IP address: "); DEBUG_MSG("Obtained IP address: \n");
Serial.println(WiFi.localIP()); Serial.println(WiFi.localIP());
// Start web server // Start web server
@ -97,72 +111,56 @@ void WiFiEvent(WiFiEvent_t event)
break; break;
case SYSTEM_EVENT_STA_LOST_IP: case SYSTEM_EVENT_STA_LOST_IP:
DEBUG_MSG("Lost IP address and IP address is reset to 0"); DEBUG_MSG("Lost IP address and IP address is reset to 0\n");
break; break;
case SYSTEM_EVENT_STA_WPS_ER_SUCCESS: case SYSTEM_EVENT_STA_WPS_ER_SUCCESS:
DEBUG_MSG("WiFi Protected Setup (WPS): succeeded in enrollee mode"); DEBUG_MSG("WiFi Protected Setup (WPS): succeeded in enrollee mode\n");
break; break;
case SYSTEM_EVENT_STA_WPS_ER_FAILED: case SYSTEM_EVENT_STA_WPS_ER_FAILED:
DEBUG_MSG("WiFi Protected Setup (WPS): failed in enrollee mode"); DEBUG_MSG("WiFi Protected Setup (WPS): failed in enrollee mode\n");
break; break;
case SYSTEM_EVENT_STA_WPS_ER_TIMEOUT: case SYSTEM_EVENT_STA_WPS_ER_TIMEOUT:
DEBUG_MSG("WiFi Protected Setup (WPS): timeout in enrollee mode"); DEBUG_MSG("WiFi Protected Setup (WPS): timeout in enrollee mode\n");
break; break;
case SYSTEM_EVENT_STA_WPS_ER_PIN: case SYSTEM_EVENT_STA_WPS_ER_PIN:
DEBUG_MSG("WiFi Protected Setup (WPS): pin code in enrollee mode"); DEBUG_MSG("WiFi Protected Setup (WPS): pin code in enrollee mode\n");
break; break;
case SYSTEM_EVENT_AP_START: case SYSTEM_EVENT_AP_START:
DEBUG_MSG("WiFi access point started"); DEBUG_MSG("WiFi access point started\n");
break; break;
case SYSTEM_EVENT_AP_STOP: case SYSTEM_EVENT_AP_STOP:
DEBUG_MSG("WiFi access point stopped"); DEBUG_MSG("WiFi access point stopped\n");
break; break;
case SYSTEM_EVENT_AP_STACONNECTED: case SYSTEM_EVENT_AP_STACONNECTED:
DEBUG_MSG("Client connected"); DEBUG_MSG("Client connected\n");
break; break;
case SYSTEM_EVENT_AP_STADISCONNECTED: case SYSTEM_EVENT_AP_STADISCONNECTED:
DEBUG_MSG("Client disconnected"); DEBUG_MSG("Client disconnected\n");
break; break;
case SYSTEM_EVENT_AP_STAIPASSIGNED: case SYSTEM_EVENT_AP_STAIPASSIGNED:
DEBUG_MSG("Assigned IP address to client"); DEBUG_MSG("Assigned IP address to client\n");
break; break;
case SYSTEM_EVENT_AP_PROBEREQRECVED: case SYSTEM_EVENT_AP_PROBEREQRECVED:
DEBUG_MSG("Received probe request"); DEBUG_MSG("Received probe request\n");
break; break;
case SYSTEM_EVENT_GOT_IP6: case SYSTEM_EVENT_GOT_IP6:
DEBUG_MSG("IPv6 is preferred"); DEBUG_MSG("IPv6 is preferred\n");
break; break;
case SYSTEM_EVENT_ETH_START: case SYSTEM_EVENT_ETH_START:
DEBUG_MSG("Ethernet started"); DEBUG_MSG("Ethernet started\n");
break; break;
case SYSTEM_EVENT_ETH_STOP: case SYSTEM_EVENT_ETH_STOP:
DEBUG_MSG("Ethernet stopped"); DEBUG_MSG("Ethernet stopped\n");
break; break;
case SYSTEM_EVENT_ETH_CONNECTED: case SYSTEM_EVENT_ETH_CONNECTED:
DEBUG_MSG("Ethernet connected"); DEBUG_MSG("Ethernet connected\n");
break; break;
case SYSTEM_EVENT_ETH_DISCONNECTED: case SYSTEM_EVENT_ETH_DISCONNECTED:
DEBUG_MSG("Ethernet disconnected"); DEBUG_MSG("Ethernet disconnected\n");
break; break;
case SYSTEM_EVENT_ETH_GOT_IP: case SYSTEM_EVENT_ETH_GOT_IP:
DEBUG_MSG("Obtained IP address"); DEBUG_MSG("Obtained IP address\n");
break; break;
default: break; default: break;
} }
} }
void reconnectWiFi() {
const char *wifiName = radioConfig.preferences.wifi_ssid;
const char *wifiPsw = radioConfig.preferences.wifi_password;
if (radioConfig.has_preferences) {
if (*wifiName) {
DEBUG_MSG("... Reconnecting to WiFi access point");
WiFi.mode(WIFI_MODE_STA);
WiFi.begin(wifiName, wifiPsw);
}
}
}

View File

@ -4,8 +4,6 @@
#include <functional> #include <functional>
#include <WiFi.h> #include <WiFi.h>
void reconnectWiFi();
void initWifi(); void initWifi();
void deinitWifi(); void deinitWifi();

View File

@ -523,12 +523,12 @@ void setBluetoothEnable(bool on)
if (firstTime) { if (firstTime) {
firstTime = 0; firstTime = 0;
} else { } else {
reconnectWiFi(); initWifi();
} }
} else { } else {
// We have to totally teardown our bluetooth objects to prevent leaks // We have to totally teardown our bluetooth objects to prevent leaks
deinitBLE();
deinitWifi(); // shutdown wifi deinitWifi(); // shutdown wifi
deinitBLE();
Serial.printf("Shutdown BT: %u heap size\n", ESP.getFreeHeap()); Serial.printf("Shutdown BT: %u heap size\n", ESP.getFreeHeap());
// ESP_ERROR_CHECK( heap_trace_stop() ); // ESP_ERROR_CHECK( heap_trace_stop() );