24
24
25
25
#if defined(ESP8266)
26
26
#include < ESP8266WiFi.h>
27
- #include < ESP8266WiFiMulti.h>
28
- ESP8266WiFiMulti wifiMulti; // /< ESP8266 WiFi multi instance.
29
27
#elif defined(ESP32)
30
28
#include < WiFi.h>
31
- #include < WiFiMulti.h>
32
- WiFiMulti wifiMulti; // /< ESP32 WiFi multi instance.
33
29
#endif
34
30
35
31
#include " FS.h"
@@ -40,25 +36,23 @@ WiFiMulti wifiMulti; ///< ESP32 WiFi multi instance.
40
36
#include " SinricProSwitch.h"
41
37
#include " SinricProWiFiSettings.h"
42
38
43
- #define APP_KEY " " // Should look like "de0bxxxx-1x3x-4x3x-ax2x-5dabxxxxxxxx"
44
- #define APP_SECRET " " // Should look like "5f36xxxx-x3x7-4x3x-xexe-e86724a9xxxx-4c4axxxx-3x3x-x5xe-x9x3-333d65xxxxxx"
45
- #define SWITCH_ID " " // Should look like "5dc1564130xxxxxxxxxxxxxx"
39
+ #define APP_KEY " " // Should look like "de0bxxxx-1x3x-4x3x-ax2x-5dabxxxxxxxx"
40
+ #define APP_SECRET " " // Should look like "5f36xxxx-x3x7-4x3x-xexe-e86724a9xxxx-4c4axxxx-3x3x-x5xe-x9x3-333d65xxxxxx"
41
+ #define SWITCH_ID " " // Should look like "5dc1564130xxxxxxxxxxxxxx"
46
42
47
43
#define BAUD_RATE 115200 // Change baudrate to your need
48
44
49
45
#define SET_WIFI_PRIMARY " pro.sinric::set.wifi.primary"
50
46
#define SET_WIFI_SECONDARY " pro.sinric::set.wifi.secondary"
51
47
52
48
const bool formatLittleFSIfFailed = true ;
53
- const unsigned long NO_WIFI_REBOOT_TIMEOUT = 300000 ; // 5 minutes in milliseconds
54
- unsigned long wifiStartTime;
55
49
56
- const char * primary_ssid = " " ; // Set to your primary wifi's ssid
57
- const char * primary_password = " " ; // Set to your primary wifi's password
58
- const char * secondary_ssid = " " ; // Set to your secondary wifi's ssid
59
- const char * secondary_password = " " ; // Set to your secondary wifi's password
50
+ const char * primarySSID = " " ; // Set to your primary wifi's ssid
51
+ const char * primaryPassword = " " ; // Set to your primary wifi's password
52
+ const char * secondarySSID = " " ; // Set to your secondary wifi's ssid
53
+ const char * secondaryPassword = " " ; // Set to your secondary wifi's password
60
54
61
- SinricProWiFiSettings spws (primary_ssid, primary_password, secondary_ssid, secondary_password , " /wificonfig.dat" );
55
+ SinricProWiFiSettings spws (primarySSID, primaryPassword, secondarySSID, secondaryPassword , " /wificonfig.dat" );
62
56
63
57
bool onSetModuleSetting (const String& id, const String& value) {
64
58
// Handle module settings.
@@ -81,28 +75,21 @@ bool onSetModuleSetting(const String& id, const String& value) {
81
75
spws.updateSecondarySettings (ssid, password);
82
76
}
83
77
84
- bool connect = doc[" connectNow" ] | false ;
85
- if (connect) {
86
- #if defined(ESP8266)
87
- wifiMulti.cleanAPlist ();
88
- #elif defined(ESP32)
89
- wifiMulti.APlistClean ();
90
- #endif
91
-
92
- wifiMulti.addAP (ssid, password);
93
- return waitForConnectResult ();
78
+ bool connectNow = doc[" connectNow" ] | false ;
79
+ if (connectNow) {
80
+ return connectToWiFi (ssid, password);
94
81
}
95
82
96
83
return true ;
97
84
}
98
85
99
86
bool setupLittleFS () {
100
- // Sets up the LittleFS.
101
- #if defined(ESP8266)
102
- if (!LittleFS.begin ()) {
103
- #elif defined(ESP32)
104
- if (!LittleFS.begin (true )) {
105
- #endif
87
+ // Sets up the LittleFS.
88
+ #if defined(ESP8266)
89
+ if (!LittleFS.begin ()) {
90
+ #elif defined(ESP32)
91
+ if (!LittleFS.begin (true )) {
92
+ #endif
106
93
107
94
Serial.println (" An Error has occurred while mounting LittleFS" );
108
95
@@ -127,50 +114,51 @@ bool setupLittleFS() {
127
114
return true ;
128
115
}
129
116
130
- bool waitForConnectResult () {
131
- unsigned long startTime = millis ();
132
- constexpr unsigned int connectTimeout = 10000 ;
133
-
134
- Serial.println (" Connecting Wifi..." );
135
- while (wifiMulti.run () != WL_CONNECTED) {
136
- Serial.print (" ." );
137
- delay (500 );
138
- if (millis () - startTime >= connectTimeout) {
139
- Serial.println (" WIFI not connected" );
140
- return false ;
141
- }
142
- }
143
-
144
- Serial.printf (" \n WiFi connected\n IP address: %s\n " , WiFi.localIP ().toString ().c_str ());
145
- return true ;
146
- }
147
-
148
117
// setup function for WiFi connection
149
118
void setupWiFi () {
150
119
Serial.printf (" \r\n [Wifi]: Connecting" );
151
120
152
- WiFi.mode (WIFI_STA);
153
- #if defined(ESP8266)
154
- WiFi.setSleepMode (WIFI_NONE_SLEEP);
155
- #elif defined(ESP32)
156
- WiFi.setSleep (false );
157
- #endif
158
- WiFi.setAutoReconnect (true );
159
-
160
121
// Load settings from file or using defaults if loading fails.
161
122
spws.begin ();
162
123
163
124
const SinricProWiFiSettings::wifi_settings_t & settings = spws.getWiFiSettings ();
125
+ bool connected = false ;
164
126
165
127
if (spws.isValidSetting (settings.primarySSID , settings.primaryPassword )) {
166
- wifiMulti. addAP (settings.primarySSID , settings.primaryPassword );
128
+ connected = connectToWiFi (settings.primarySSID , settings.primaryPassword );
167
129
}
168
130
169
- if (spws.isValidSetting (settings.secondarySSID , settings.secondaryPassword )) {
170
- wifiMulti. addAP (settings.secondarySSID , settings.secondaryPassword );
131
+ if (!connected && spws.isValidSetting (settings.secondarySSID , settings.secondaryPassword )) {
132
+ connected = connectToWiFi (settings.secondarySSID , settings.secondaryPassword );
171
133
}
134
+ }
135
+
136
+ bool connectToWiFi (const char * ssid, const char * password) {
137
+ Serial.print (" Connecting to " );
138
+ Serial.println (ssid);
139
+
140
+ WiFi.disconnect ();
141
+ delay (10 );
142
+
143
+ #if defined(ESP32)
144
+ WiFi.setSleep (false );
145
+ WiFi.begin (ssid, password);
146
+ #elif defined(ESP8266)
147
+ WiFi.setSleepMode (WIFI_NONE_SLEEP);
148
+ WiFi.begin (ssid, password);
149
+ #elif defined(ARDUINO_ARCH_RP2040)
150
+ WiFi.begin (ssid, password);
151
+ #endif
172
152
173
- waitForConnectResult ();
153
+ int timeout = 0 ;
154
+ while (WiFi.status () != WL_CONNECTED && timeout < 30 ) {
155
+ delay (500 );
156
+ Serial.print (" ." );
157
+ timeout++;
158
+ }
159
+ Serial.println ();
160
+
161
+ return WiFi.status () == WL_CONNECTED;
174
162
}
175
163
176
164
// setup function for SinricPro
@@ -198,19 +186,7 @@ void setup() {
198
186
setupSinricPro ();
199
187
}
200
188
201
- void rebootIfNoWiFi () {
202
- // If no WiFI connection for 5 mins reboot the ESP. ESP will connect to either primary or secondary based on availability
203
- if (WiFi.status () != WL_CONNECTED && (millis () - wifiStartTime >= NO_WIFI_REBOOT_TIMEOUT)) {
204
- Serial.println (" WiFi connection timed out. Rebooting..." );
205
- ESP.restart ();
206
- } else {
207
- // Reset the start time if WiFi is connected
208
- wifiStartTime = millis ();
209
- }
210
- }
211
-
212
189
void loop () {
213
- wifiMulti.run ();
214
190
SinricPro.handle ();
215
- rebootIfNoWiFi ();
191
+ if (WiFi. status () != WL_CONNECTED) ESP. restart ();
216
192
}
0 commit comments