added scan_method = WIFI_ALL_CHANNEL_SCAN into wifi config in WiFi.begin() to let the scan choose the nearest / strongest AP in case that there are multiple APs with the same SSID (#4947)
In case you have multiple APs with the same SSID/password and WiFi.begin(ssid, pwd) is called, ESP32 defaults to connect to THE FIRST AP FOUND matching ssid - according to: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/network/esp_wifi.html#_CPPv418wifi_scan_method_t This can cause situations that ESP32 is trying to connect to AP which is far away from it (weak signal) even there is AP close to it, just as in my house - I have AP on channel 6 which is in the 1st floor (quite far from room where I do the programming) and AP on channel 13 in the same room I do the programming (which is in the 2nd floor) - result: ESP32 is trying to connect to the AP on channel 6 because it finds it first and never try the AP on channel 13 in the same room, result of this is very unreliable WiFi connection. When scan_method is set to WIFI_ALL_CHANNEL_SCAN, ESP32 scans all channels and choose the nearest / strongest AP (matching the ssid of course) as expected - result is no connection problems at all. Therefore I propose adding this parameter into WiFi.begin, connection problems as described above are quite confusing (especially for beginners), I can imagine that for example Schools there are usually using mutliple APs and this can cause intermittent connection problems without obvious reason.
This commit is contained in:
parent
a31f30529d
commit
3253de8792
@ -134,6 +134,7 @@ wl_status_t WiFiSTAClass::begin(const char* ssid, const char *passphrase, int32_
|
|||||||
wifi_config_t conf;
|
wifi_config_t conf;
|
||||||
memset(&conf, 0, sizeof(wifi_config_t));
|
memset(&conf, 0, sizeof(wifi_config_t));
|
||||||
strcpy(reinterpret_cast<char*>(conf.sta.ssid), ssid);
|
strcpy(reinterpret_cast<char*>(conf.sta.ssid), ssid);
|
||||||
|
conf.sta.scan_method = WIFI_ALL_CHANNEL_SCAN; //force full scan to be able to choose the nearest / strongest AP
|
||||||
|
|
||||||
if(passphrase) {
|
if(passphrase) {
|
||||||
if (strlen(passphrase) == 64){ // it's not a passphrase, is the PSK
|
if (strlen(passphrase) == 64){ // it's not a passphrase, is the PSK
|
||||||
|
Loading…
Reference in New Issue
Block a user