From e03aa16330ca1d301bc08d4b3d1d701c43e6abf4 Mon Sep 17 00:00:00 2001 From: Leopoldo Pla Sempere Date: Mon, 20 Jul 2026 17:17:16 +0200 Subject: [PATCH] fix: select strongest AP for matching WiFi SSID (#2655) --- src/activities/network/WifiSelectionActivity.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/activities/network/WifiSelectionActivity.cpp b/src/activities/network/WifiSelectionActivity.cpp index 119ae4a8..c577f04c 100644 --- a/src/activities/network/WifiSelectionActivity.cpp +++ b/src/activities/network/WifiSelectionActivity.cpp @@ -354,6 +354,11 @@ void WifiSelectionActivity::attemptConnection() { WiFi.disconnect(true, true); // Abort any in-progress SDK auto-connect and clear NVS-saved SSID delay(100); + // Scan all channels so networks with multiple APs use the strongest matching + // BSSID instead of the first match found by the framework's default fast scan. + WiFi.setScanMethod(WIFI_ALL_CHANNEL_SCAN); + WiFi.setSortMethod(WIFI_CONNECT_AP_BY_SIGNAL); + // Set hostname so routers show "CrossPoint-Reader-AABBCCDDEEFF" instead of "esp32-XXXXXXXXXXXX" String mac = WiFi.macAddress(); mac.replace(":", ""); @@ -382,6 +387,16 @@ void WifiSelectionActivity::checkConnectionStatus() { connectedIP = ipStr; autoConnecting = false; +#if defined(ENABLE_SERIAL_LOG) && LOG_LEVEL >= 2 + uint8_t connectedBssid[6] = {}; + WiFi.BSSID(connectedBssid); + LOG_DBG("WIFI", "Connected BSSID: %02x:%02x:%02x:%02x:%02x:%02x, channel: %d, RSSI: %d dBm", + static_cast(connectedBssid[0]), static_cast(connectedBssid[1]), + static_cast(connectedBssid[2]), static_cast(connectedBssid[3]), + static_cast(connectedBssid[4]), static_cast(connectedBssid[5]), WiFi.channel(), + WiFi.RSSI()); +#endif + // Sync RTC from NTP on the first successful WiFi connection only. The DS3231 // drifts ~2 ppm so one sync is enough; users can force a re-sync from // Settings > Customise Status Bar > Sync clock now.