From e7248c4774651f93c386ae8b8ea37311c643453c Mon Sep 17 00:00:00 2001 From: Rick Watson Date: Tue, 4 Jun 2019 21:13:55 +0100 Subject: [PATCH] leave WiFi disconnected by default implement controlled retry - fixed at 60 seconds --- data/config/wifiSettings.json | 2 +- interface/src/forms/APSettingsForm.js | 2 +- interface/src/forms/WiFiSettingsForm.js | 4 +- src/WiFiSettingsService.cpp | 57 +++++++++++++++++-------- src/WiFiSettingsService.h | 8 +++- src/main.cpp | 4 +- 6 files changed, 53 insertions(+), 24 deletions(-) diff --git a/data/config/wifiSettings.json b/data/config/wifiSettings.json index 4f0b28a..8ff0621 100644 --- a/data/config/wifiSettings.json +++ b/data/config/wifiSettings.json @@ -1,5 +1,5 @@ { - "ssid":"ssid", + "ssid":"", "password":"password", "hostname":"esp8266-react", "static_ip_config":false diff --git a/interface/src/forms/APSettingsForm.js b/interface/src/forms/APSettingsForm.js index 582241d..bdd9191 100644 --- a/interface/src/forms/APSettingsForm.js +++ b/interface/src/forms/APSettingsForm.js @@ -66,7 +66,7 @@ class APSettingsForm extends React.Component { = WIFI_RECONNECTION_DELAY) { + _lastConnectionAttempt = currentMillis; + manageSTA(); + } +} + +void WiFiSettingsService::manageSTA() { + // Abort if already connected, or if we have no SSID + if (WiFi.isConnected() || _ssid.length() == 0) { + return; + } + // Connect or reconnect as required + if ((WiFi.getMode() & WIFI_STA) == 0) { + Serial.println("Connecting to WiFi."); + if (_staticIPConfig) { + // configure for static IP + WiFi.config(_localIP, _gatewayIP, _subnetMask, _dnsIP1, _dnsIP2); + } else { + // configure for DHCP +#if defined(ESP8266) + WiFi.config(INADDR_ANY, INADDR_ANY, INADDR_ANY); + WiFi.hostname(_hostname); +#elif defined(ESP_PLATFORM) + WiFi.config(INADDR_NONE, INADDR_NONE, INADDR_NONE); + WiFi.setHostname(_hostname.c_str()); +#endif + } + // attempt to connect to the network + WiFi.begin(_ssid.c_str(), _password.c_str()); + } else { + Serial.println("Retrying WiFi connection."); + WiFi.reconnect(); + } +} diff --git a/src/WiFiSettingsService.h b/src/WiFiSettingsService.h index 1675471..a631258 100644 --- a/src/WiFiSettingsService.h +++ b/src/WiFiSettingsService.h @@ -6,6 +6,7 @@ #define WIFI_SETTINGS_FILE "/config/wifiSettings.json" #define WIFI_SETTINGS_SERVICE_PATH "/rest/wifiSettings" +#define WIFI_RECONNECTION_DELAY 1000 * 60 class WiFiSettingsService : public AdminSettingsService { @@ -15,13 +16,13 @@ class WiFiSettingsService : public AdminSettingsService { ~WiFiSettingsService(); void begin(); + void loop(); protected: void readFromJsonObject(JsonObject& root); void writeToJsonObject(JsonObject& root); void onConfigUpdated(); - void reconfigureWiFiConnection(); private: // connection settings @@ -30,6 +31,9 @@ class WiFiSettingsService : public AdminSettingsService { String _hostname; bool _staticIPConfig; + // for the mangement delay loop + unsigned long _lastConnectionAttempt; + // optional configuration for static IP address IPAddress _localIP; IPAddress _gatewayIP; @@ -39,6 +43,8 @@ class WiFiSettingsService : public AdminSettingsService { void readIP(JsonObject& root, String key, IPAddress& _ip); void writeIP(JsonObject& root, String key, IPAddress& _ip); + void reconfigureWiFiConnection(); + void manageSTA(); }; diff --git a/src/main.cpp b/src/main.cpp index d3256fb..3503240 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -41,8 +41,9 @@ APStatus apStatus = APStatus(&server, &securitySettingsService); SystemStatus systemStatus = SystemStatus(&server, &securitySettingsService);; void setup() { - // Disable wifi config persistance + // Disable wifi config persistance and auto reconnect WiFi.persistent(false); + WiFi.setAutoReconnect(false); Serial.begin(SERIAL_BAUD_RATE); SPIFFS.begin(); @@ -86,6 +87,7 @@ void setup() { } void loop() { + wifiSettingsService.loop(); apSettingsService.loop(); ntpSettingsService.loop(); otaSettingsService.loop();