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() {
|
bool initWifi() {
|
||||||
|
uint32_t _numNetworks = 0;
|
||||||
// Connect to Wi-Fi
|
// Connect to Wi-Fi
|
||||||
WifiSettings wifiSettings = settingsManager.getWifiSettings();
|
WifiSettings wifiSettings = settingsManager.getWifiSettings();
|
||||||
WiFi.mode(WIFI_STA);
|
WiFi.mode(WIFI_STA);
|
||||||
WiFi.config(INADDR_NONE, INADDR_NONE, INADDR_NONE, INADDR_NONE);
|
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.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;
|
int counter = 0;
|
||||||
while (WiFi.status() != WL_CONNECTED) {
|
while (WiFi.status() != WL_CONNECTED) {
|
||||||
delay(1000);
|
delay(1000);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user