Choosing the most efficient accesspoint now
This commit is contained in:
parent
e9b307343d
commit
f7a56bdc2c
@ -251,14 +251,83 @@ bool checkPairingValid() {
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t WiFi_scanNetworks(void ){
|
||||
uint32_t _numNetworks = 0;
|
||||
|
||||
int8_t res;
|
||||
res = WiFi.scanNetworks();
|
||||
if(res == WIFI_SCAN_FAILED){
|
||||
addLogMessage(F("NetworkScanFailed"));
|
||||
}else if(res == WIFI_SCAN_RUNNING){
|
||||
while(WiFi.scanComplete() == WIFI_SCAN_RUNNING){
|
||||
delay(100);
|
||||
}
|
||||
_numNetworks = WiFi.scanComplete();
|
||||
}else if(res >=0 ) {
|
||||
_numNetworks = res;
|
||||
}
|
||||
return _numNetworks;
|
||||
}
|
||||
|
||||
|
||||
bool initWifi() {
|
||||
uint32_t _numNetworks = 0;
|
||||
// Connect to Wi-Fi
|
||||
WifiSettings wifiSettings = settingsManager.getWifiSettings();
|
||||
WiFi.mode(WIFI_STA);
|
||||
WiFi.config(INADDR_NONE, INADDR_NONE, INADDR_NONE, INADDR_NONE);
|
||||
WiFi.setSortMethod(WIFI_CONNECT_AP_BY_SIGNAL);
|
||||
WiFi.setScanMethod(WIFI_ALL_CHANNEL_SCAN);
|
||||
WiFi.persistent(false);
|
||||
WiFi.mode(WIFI_OFF);
|
||||
WiFi.mode(WIFI_STA);
|
||||
WiFi.disconnect(true); // delete old config
|
||||
WiFi.begin();
|
||||
delay(500); // 500ms seems to work in most cases, may depend on AP
|
||||
WiFi.disconnect(true); // delete old config
|
||||
|
||||
WiFi.setHostname(wifiSettings.hostname.c_str()); //define hostname
|
||||
WiFi.begin(wifiSettings.ssid.c_str(), wifiSettings.password.c_str());
|
||||
_numNetworks = WiFi_scanNetworks(); // scan in case this gets called before any scans
|
||||
|
||||
if (_numNetworks == 0) {
|
||||
addLogMessage(F("No networks found"));
|
||||
WiFi.begin(wifiSettings.ssid.c_str(), wifiSettings.password.c_str());
|
||||
} else {
|
||||
#ifdef WM_DEBUG_LEVEL
|
||||
DEBUG_WM(n, F("networks found"));
|
||||
#endif
|
||||
int bestConnection = -1;
|
||||
// Find best RSSI AP for given SSID
|
||||
for (int i = 0; i < _numNetworks; i++) {
|
||||
if (wifiSettings.ssid == WiFi.SSID(i)) {
|
||||
addLogMessage(String(F("SSID ")) + wifiSettings.ssid + String(F(" found with RSSI: ")) +
|
||||
String(WiFi.RSSI(i)) + String(F("(")) +
|
||||
String(constrain((100.0 + WiFi.RSSI(i)) * 2, 0, 100)) +
|
||||
String(F(" %) and BSSID: ")) + WiFi.BSSIDstr(i) +
|
||||
String(F(" and channel: ")) + String(WiFi.channel(i)));
|
||||
if (bestConnection == -1) {
|
||||
bestConnection = i;
|
||||
} else {
|
||||
if (WiFi.RSSI(i) > WiFi.RSSI(bestConnection)) {
|
||||
bestConnection = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (bestConnection == -1) {
|
||||
addLogMessage(String(F("No network found with SSID: "))+wifiSettings.ssid.c_str());
|
||||
WiFi.begin(wifiSettings.ssid.c_str(), wifiSettings.password.c_str());
|
||||
} else {
|
||||
addLogMessage(String(F("Trying to connect to SSID ")) + wifiSettings.ssid + String(F(" found with RSSI: ")) +
|
||||
String(WiFi.RSSI(bestConnection)) + String(F("(")) +
|
||||
String(constrain((100.0 + WiFi.RSSI(bestConnection)) * 2, 0, 100)) +
|
||||
String(F(" %) and BSSID: ")) + WiFi.BSSIDstr(bestConnection) +
|
||||
String(F(" and channel: ")) + String(WiFi.channel(bestConnection)));
|
||||
WiFi.begin(wifiSettings.ssid.c_str(), wifiSettings.password.c_str(), 0,
|
||||
WiFi.BSSID(bestConnection));
|
||||
}
|
||||
}
|
||||
//WiFi.begin(wifiSettings.ssid.c_str(), wifiSettings.password.c_str());
|
||||
int counter = 0;
|
||||
while (WiFi.status() != WL_CONNECTED) {
|
||||
delay(1000);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user