Merge pull request #399 from Mit4el/ver4dev

fix scanning wifi
This commit is contained in:
Mit4el
2025-03-17 00:33:40 +03:00
committed by GitHub
3 changed files with 33 additions and 13 deletions

View File

@@ -146,7 +146,7 @@ void setup() {
jsonRead(settingsFlashJson, "pinSDA", pinSDA, false);
jsonRead(settingsFlashJson, "i2cFreq", i2cFreq, false);
jsonRead(settingsFlashJson, "i2c", i2c, false);
jsonWriteStr_(ssidListHeapJson, "0", "Scaning...");
//jsonWriteStr_(ssidListHeapJson, "0", "Scaning...");
if (i2c != 0) {
#ifdef ESP32
Wire.end();

View File

@@ -143,6 +143,10 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
sendFileToWsByFrames("/widgets.json", "widget", "", num, WEB_SOCKETS_FRAME_SIZE);
sendFileToWsByFrames("/config.json", "config", "", num, WEB_SOCKETS_FRAME_SIZE);
sendStringToWs("settin", settingsFlashJson, num);
#ifndef ESP8266
ssidListHeapJson = "{}";
jsonWriteStr_(ssidListHeapJson, "0", "Scanning...");
#endif
sendStringToWs("ssidli", ssidListHeapJson, num);
sendStringToWs("errors", errorsHeapJson, num);
// запуск асинхронного сканирования wifi сетей при переходе на страницу
@@ -157,6 +161,12 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
sendStringToWs("errors", errorsHeapJson, num);
// если не было создано приема данных по udp - то создадим его
addThisDeviceToList();
#ifndef ESP8266
settingsFlashJson = readFile(F("settings.json"), 4096);
settingsFlashJson.replace("\r\n", "");
Serial.println(settingsFlashJson);
WiFiUtilsItit();
#endif
}
// обработка кнопки сохранить настройки mqtt
@@ -173,16 +183,18 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
// запуск асинхронного сканирования wifi сетей при нажатии выпадающего
// списка
if (headerStr == "/scan|") {
#ifdef ESP8266
std::vector<String> jArray;
jsonReadArray(settingsFlashJson, "routerssid", jArray);
#ifdef ESP8266
RouterFind(jArray);
sendStringToWs("ssidli", ssidListHeapJson, num);
#else
//String ssidScan = "{Scaning...}";
ssidListHeapJson = "{}";
jsonWriteStr_(ssidListHeapJson, "0", "Scaning...");
//ssidListHeapJson = "{}";
//jsonWriteStr_(ssidListHeapJson, "0", "Scanning...");
//Serial.println("Async scan:" + String(ssidListHeapJson));
sendStringToWs("ssidli", ssidListHeapJson, num);
if (ssidListHeapJson == "{\"0\":\"Scanning...\"}")
ScanAsync();
#endif

View File

@@ -9,7 +9,6 @@
#ifndef ESP8266
std::vector<String> _ssidList;
std::vector<String> _passwordList;
volatile bool scanInProgress = false;
// номер сети, для перебирания в момент подключения к сетям из массива
volatile uint8_t currentNetwork = 0;
volatile bool wifiConnecting = false;
@@ -79,10 +78,17 @@ void WiFiEvent(arduino_event_t *event)
#else
case SYSTEM_EVENT_SCAN_DONE:
#endif
// Завершилось сканирование сетей
Serial.println("Scan completed");
scanInProgress = false;
if (WiFi.scanComplete() >= 0) {
Serial.println("Valid Scan completed");
handleScanResults();
WiFi.scanDelete(); // Очищаем только при успешном сканировании
} else {
//Serial.println("Empty scan or error");
//WiFi.scanDelete(); // Принудительная очистка буфера
}
// Завершилось сканирование сетей
//Serial.println("Scan completed");
//handleScanResults();
break;
}
}
@@ -120,11 +126,11 @@ void handleScanResults()
connectNumNet = i;
}
}
sendStringToWs("ssidli", ssidListHeapJson, -1);
// if
}
sendStringToWs("ssidli", ssidListHeapJson, -1);
SerialPrint("i", "WIFI", "Scan Found: " + ssidListHeapJson);
if (connectNumNet >= 0)
if (connectNumNet >= 0 && !isNetworkActive())
{
// ts.remove(WIFI_SCAN);
connectToNextNetwork();
@@ -142,11 +148,13 @@ void WiFiUtilsItit()
#else
WiFi.setAutoConnect(false);
#endif
WiFi.persistent(false);
WiFi.setSleep(true);
WiFi.persistent(true); // Сохраняет текущую сеть при сканировании
WiFi.setSleep(false);
#endif
WiFi.mode(WIFI_STA);
WiFi.onEvent(WiFiEvent);
_ssidList.clear();
_passwordList.clear();
jsonReadArray(settingsFlashJson, "routerssid", _ssidList);
jsonReadArray(settingsFlashJson, "routerpass", _passwordList);