Skip to content

Commit 0d94b5f

Browse files
committed
Add support for hidden AP's
1 parent 85ba53a commit 0d94b5f

File tree

2 files changed

+29
-2
lines changed

2 files changed

+29
-2
lines changed

libraries/ESP8266WiFi/examples/WiFiMulti/WiFiMulti.ino

+1
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

libraries/ESP8266WiFi/src/ESP8266WiFiMulti.cpp

+28-2
Original file line numberDiff line numberDiff line change
@@ -323,12 +323,18 @@ wl_status_t ESP8266WiFiMulti::connectWiFiMulti(uint32_t connectTimeoutMs)
323323
}
324324
DEBUG_WIFI_MULTI("\n");
325325

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

331-
for (auto entry : _APlist) {
335+
for (uint8_t j = 0; j < _APlist.size(); j++) {
336+
auto &entry = _APlist[j];
337+
332338
// Check SSID
333339
if (ssid == entry.ssid) {
334340
DEBUG_WIFI_MULTI("[WIFIM] Connecting %s\n", ssid);
@@ -340,13 +346,33 @@ wl_status_t ESP8266WiFiMulti::connectWiFiMulti(uint32_t connectTimeoutMs)
340346
if (waitWiFiConnect(connectTimeoutMs) == WL_CONNECTED) {
341347
return WL_CONNECTED;
342348
}
349+
350+
// Failed to connect, skip for hidden SSID connects
351+
connectSkipIndex[j] = true;
352+
}
353+
}
354+
}
355+
356+
// Try to connect to hidden AP's which are not reported by WiFi scan
357+
for (uint8_t i = 0; i < _APlist.size(); i++) {
358+
auto &entry = _APlist[i];
359+
360+
if (!connectSkipIndex[i]) {
361+
DEBUG_WIFI_MULTI("[WIFIM] Try hidden connect %s\n", entry.ssid);
362+
363+
// Connect to WiFi
364+
WiFi.begin(entry.ssid, entry.passphrase);
365+
366+
// Wait for status change
367+
if (waitWiFiConnect(connectTimeoutMs) == WL_CONNECTED) {
368+
return WL_CONNECTED;
343369
}
344370
}
345371
}
346372

347373
DEBUG_WIFI_MULTI("[WIFIM] Could not connect\n", ssid);
348374

349-
// Coult not connect to any WiFi network
375+
// Could not connect to any WiFi network
350376
return WL_CONNECT_FAILED;
351377
}
352378

0 commit comments

Comments
 (0)