Skip to content

Commit 2402958

Browse files
authored
Merge pull request #7629 from Erriez/feature/issue-2246-multi-wifi-hidden
Add support for hidden SSID's Multi WiFi
2 parents 85e2fff + d90015e commit 2402958

File tree

2 files changed

+32
-2
lines changed

2 files changed

+32
-2
lines changed

libraries/ESP8266WiFi/examples/WiFiMulti/WiFiMulti.ino

+4
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
- Registering multiple networks (at least 1)
88
- Connect to WiFi with strongest signal (RSSI)
99
- Fall back to connect to next WiFi when a connection failed or lost
10+
- Fall back to connect to hidden SSID's which are not reported by WiFi scan
1011
1112
To enable debugging output, select in the Arduino iDE:
1213
- Tools | Debug Port: Serial
@@ -21,6 +22,9 @@ ESP8266WiFiMulti wifiMulti;
2122
const uint32_t connectTimeoutMs = 5000;
2223

2324
void setup() {
25+
// Don't save WiFi configuration in flash - optional
26+
WiFi.persistent(false);
27+
2428
Serial.begin(115200);
2529
Serial.println("\nESP8266 Multi WiFi example");
2630

libraries/ESP8266WiFi/src/ESP8266WiFiMulti.cpp

+28-2
Original file line numberDiff line numberDiff line change
@@ -326,12 +326,18 @@ wl_status_t ESP8266WiFiMulti::connectWiFiMulti(uint32_t connectTimeoutMs)
326326
}
327327
DEBUG_WIFI_MULTI("\n");
328328

329+
// Create indices for AP connection failures
330+
uint8_t connectSkipIndex[_APlist.size()];
331+
memset(connectSkipIndex, 0, sizeof(connectSkipIndex));
332+
329333
// Connect to known WiFi AP's sorted by RSSI
330334
for (int8_t i = 0; i < numNetworks; i++) {
331335
// Get network information
332336
WiFi.getNetworkInfo(known[i], ssid, encType, rssi, bssid, channel, hidden);
333337

334-
for (auto entry : _APlist) {
338+
for (uint8_t j = 0; j < _APlist.size(); j++) {
339+
auto &entry = _APlist[j];
340+
335341
// Check SSID
336342
if (ssid == entry.ssid) {
337343
DEBUG_WIFI_MULTI("[WIFIM] Connecting %s\n", ssid);
@@ -343,13 +349,33 @@ wl_status_t ESP8266WiFiMulti::connectWiFiMulti(uint32_t connectTimeoutMs)
343349
if (waitWiFiConnect(connectTimeoutMs) == WL_CONNECTED) {
344350
return WL_CONNECTED;
345351
}
352+
353+
// Failed to connect, skip for hidden SSID connects
354+
connectSkipIndex[j] = true;
355+
}
356+
}
357+
}
358+
359+
// Try to connect to hidden AP's which are not reported by WiFi scan
360+
for (uint8_t i = 0; i < _APlist.size(); i++) {
361+
auto &entry = _APlist[i];
362+
363+
if (!connectSkipIndex[i]) {
364+
DEBUG_WIFI_MULTI("[WIFIM] Try hidden connect %s\n", entry.ssid);
365+
366+
// Connect to WiFi
367+
WiFi.begin(entry.ssid, entry.passphrase);
368+
369+
// Wait for status change
370+
if (waitWiFiConnect(connectTimeoutMs) == WL_CONNECTED) {
371+
return WL_CONNECTED;
346372
}
347373
}
348374
}
349375

350376
DEBUG_WIFI_MULTI("[WIFIM] Could not connect\n", ssid);
351377

352-
// Coult not connect to any WiFi network
378+
// Could not connect to any WiFi network
353379
return WL_CONNECT_FAILED;
354380
}
355381

0 commit comments

Comments
 (0)