2424
2525#if defined(ESP8266)
2626#include < ESP8266WiFi.h>
27- #include < ESP8266WiFiMulti.h>
28- ESP8266WiFiMulti wifiMulti; // /< ESP8266 WiFi multi instance.
2927#elif defined(ESP32)
3028#include < WiFi.h>
31- #include < WiFiMulti.h>
32- WiFiMulti wifiMulti; // /< ESP32 WiFi multi instance.
3329#endif
3430
3531#include " FS.h"
@@ -40,25 +36,23 @@ WiFiMulti wifiMulti; ///< ESP32 WiFi multi instance.
4036#include " SinricProSwitch.h"
4137#include " SinricProWiFiSettings.h"
4238
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"
4642
4743#define BAUD_RATE 115200 // Change baudrate to your need
4844
4945#define SET_WIFI_PRIMARY " pro.sinric::set.wifi.primary"
5046#define SET_WIFI_SECONDARY " pro.sinric::set.wifi.secondary"
5147
5248const bool formatLittleFSIfFailed = true ;
53- const unsigned long NO_WIFI_REBOOT_TIMEOUT = 300000 ; // 5 minutes in milliseconds
54- unsigned long wifiStartTime;
5549
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
6054
61- SinricProWiFiSettings spws (primary_ssid, primary_password, secondary_ssid, secondary_password , " /wificonfig.dat" );
55+ SinricProWiFiSettings spws (primarySSID, primaryPassword, secondarySSID, secondaryPassword , " /wificonfig.dat" );
6256
6357bool onSetModuleSetting (const String& id, const String& value) {
6458 // Handle module settings.
@@ -81,28 +75,21 @@ bool onSetModuleSetting(const String& id, const String& value) {
8175 spws.updateSecondarySettings (ssid, password);
8276 }
8377
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);
9481 }
9582
9683 return true ;
9784}
9885
9986bool 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
10693
10794 Serial.println (" An Error has occurred while mounting LittleFS" );
10895
@@ -127,50 +114,51 @@ bool setupLittleFS() {
127114 return true ;
128115}
129116
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-
148117// setup function for WiFi connection
149118void setupWiFi () {
150119 Serial.printf (" \r\n [Wifi]: Connecting" );
151120
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-
160121 // Load settings from file or using defaults if loading fails.
161122 spws.begin ();
162123
163124 const SinricProWiFiSettings::wifi_settings_t & settings = spws.getWiFiSettings ();
125+ bool connected = false ;
164126
165127 if (spws.isValidSetting (settings.primarySSID , settings.primaryPassword )) {
166- wifiMulti. addAP (settings.primarySSID , settings.primaryPassword );
128+ connected = connectToWiFi (settings.primarySSID , settings.primaryPassword );
167129 }
168130
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 );
171133 }
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
172152
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;
174162}
175163
176164// setup function for SinricPro
@@ -198,19 +186,7 @@ void setup() {
198186 setupSinricPro ();
199187}
200188
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-
212189void loop () {
213- wifiMulti.run ();
214190 SinricPro.handle ();
215- rebootIfNoWiFi ();
191+ if (WiFi. status () != WL_CONNECTED) ESP. restart ();
216192}
0 commit comments