Skip to content

Commit e7248c4

Browse files
committed
leave WiFi disconnected by default
implement controlled retry - fixed at 60 seconds
1 parent 94656de commit e7248c4

File tree

6 files changed

+53
-24
lines changed

6 files changed

+53
-24
lines changed

data/config/wifiSettings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"ssid":"ssid",
2+
"ssid":"",
33
"password":"password",
44
"hostname":"esp8266-react",
55
"static_ip_config":false

interface/src/forms/APSettingsForm.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ class APSettingsForm extends React.Component {
6666
<Fragment>
6767
<TextValidator
6868
validators={['required', 'matchRegexp:^.{1,32}$']}
69-
errorMessages={['Access Point SSID is required', 'Access Point SSID must be 32 characeters or less']}
69+
errorMessages={['Access Point SSID is required', 'Access Point SSID must be 32 characters or less']}
7070
name="ssid"
7171
label="Access Point SSID"
7272
className={classes.textField}

interface/src/forms/WiFiSettingsForm.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,8 @@ class WiFiSettingsForm extends React.Component {
9999
{
100100
selectedNetwork ? this.renderSelectedNetwork() :
101101
<TextValidator
102-
validators={['required', 'matchRegexp:^.{1,32}$']}
103-
errorMessages={['SSID is required', 'SSID must be 32 characeters or less']}
102+
validators={['matchRegexp:^.{0,32}$']}
103+
errorMessages={['SSID must be 32 characters or less']}
104104
name="ssid"
105105
label="SSID"
106106
className={classes.textField}

src/WiFiSettingsService.cpp

Lines changed: 39 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -56,27 +56,11 @@ void WiFiSettingsService::onConfigUpdated() {
5656
}
5757

5858
void WiFiSettingsService::reconfigureWiFiConnection() {
59-
Serial.println("Reconfiguring WiFi...");
60-
6159
// disconnect and de-configure wifi and software access point
6260
WiFi.disconnect(true);
6361

64-
// configure for static IP
65-
if (_staticIPConfig) {
66-
WiFi.config(_localIP, _gatewayIP, _subnetMask, _dnsIP1, _dnsIP2);
67-
} else {
68-
// configure for DHCP
69-
#if defined(ESP8266)
70-
WiFi.config(INADDR_ANY, INADDR_ANY, INADDR_ANY);
71-
WiFi.hostname(_hostname);
72-
#elif defined(ESP_PLATFORM)
73-
WiFi.config(INADDR_NONE, INADDR_NONE, INADDR_NONE);
74-
WiFi.setHostname(_hostname.c_str());
75-
#endif
76-
}
77-
78-
// connect to the network
79-
WiFi.begin(_ssid.c_str(), _password.c_str());
62+
// reset last connection attempt to force loop to reconnect immediately
63+
_lastConnectionAttempt = 0;
8064
}
8165

8266
void WiFiSettingsService::readIP(JsonObject& root, String key, IPAddress& _ip){
@@ -90,3 +74,40 @@ void WiFiSettingsService::writeIP(JsonObject& root, String key, IPAddress& _ip){
9074
root[key] = _ip.toString();
9175
}
9276
}
77+
78+
void WiFiSettingsService::loop() {
79+
unsigned long currentMillis = millis();
80+
if (!_lastConnectionAttempt || (unsigned long)(currentMillis - _lastConnectionAttempt) >= WIFI_RECONNECTION_DELAY) {
81+
_lastConnectionAttempt = currentMillis;
82+
manageSTA();
83+
}
84+
}
85+
86+
void WiFiSettingsService::manageSTA() {
87+
// Abort if already connected, or if we have no SSID
88+
if (WiFi.isConnected() || _ssid.length() == 0) {
89+
return;
90+
}
91+
// Connect or reconnect as required
92+
if ((WiFi.getMode() & WIFI_STA) == 0) {
93+
Serial.println("Connecting to WiFi.");
94+
if (_staticIPConfig) {
95+
// configure for static IP
96+
WiFi.config(_localIP, _gatewayIP, _subnetMask, _dnsIP1, _dnsIP2);
97+
} else {
98+
// configure for DHCP
99+
#if defined(ESP8266)
100+
WiFi.config(INADDR_ANY, INADDR_ANY, INADDR_ANY);
101+
WiFi.hostname(_hostname);
102+
#elif defined(ESP_PLATFORM)
103+
WiFi.config(INADDR_NONE, INADDR_NONE, INADDR_NONE);
104+
WiFi.setHostname(_hostname.c_str());
105+
#endif
106+
}
107+
// attempt to connect to the network
108+
WiFi.begin(_ssid.c_str(), _password.c_str());
109+
} else {
110+
Serial.println("Retrying WiFi connection.");
111+
WiFi.reconnect();
112+
}
113+
}

src/WiFiSettingsService.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
#define WIFI_SETTINGS_FILE "/config/wifiSettings.json"
88
#define WIFI_SETTINGS_SERVICE_PATH "/rest/wifiSettings"
9+
#define WIFI_RECONNECTION_DELAY 1000 * 60
910

1011
class WiFiSettingsService : public AdminSettingsService {
1112

@@ -15,13 +16,13 @@ class WiFiSettingsService : public AdminSettingsService {
1516
~WiFiSettingsService();
1617

1718
void begin();
19+
void loop();
1820

1921
protected:
2022

2123
void readFromJsonObject(JsonObject& root);
2224
void writeToJsonObject(JsonObject& root);
2325
void onConfigUpdated();
24-
void reconfigureWiFiConnection();
2526

2627
private:
2728
// connection settings
@@ -30,6 +31,9 @@ class WiFiSettingsService : public AdminSettingsService {
3031
String _hostname;
3132
bool _staticIPConfig;
3233

34+
// for the mangement delay loop
35+
unsigned long _lastConnectionAttempt;
36+
3337
// optional configuration for static IP address
3438
IPAddress _localIP;
3539
IPAddress _gatewayIP;
@@ -39,6 +43,8 @@ class WiFiSettingsService : public AdminSettingsService {
3943

4044
void readIP(JsonObject& root, String key, IPAddress& _ip);
4145
void writeIP(JsonObject& root, String key, IPAddress& _ip);
46+
void reconfigureWiFiConnection();
47+
void manageSTA();
4248

4349
};
4450

src/main.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,9 @@ APStatus apStatus = APStatus(&server, &securitySettingsService);
4141
SystemStatus systemStatus = SystemStatus(&server, &securitySettingsService);;
4242

4343
void setup() {
44-
// Disable wifi config persistance
44+
// Disable wifi config persistance and auto reconnect
4545
WiFi.persistent(false);
46+
WiFi.setAutoReconnect(false);
4647

4748
Serial.begin(SERIAL_BAUD_RATE);
4849
SPIFFS.begin();
@@ -86,6 +87,7 @@ void setup() {
8687
}
8788

8889
void loop() {
90+
wifiSettingsService.loop();
8991
apSettingsService.loop();
9092
ntpSettingsService.loop();
9193
otaSettingsService.loop();

0 commit comments

Comments
 (0)