From 9dca608181edfcbaf31463a28ce3a1ae92a35787 Mon Sep 17 00:00:00 2001 From: Mit4el Date: Mon, 17 Mar 2025 00:32:18 +0300 Subject: [PATCH] fix scanning wifi --- src/Main.cpp | 2 +- src/WsServer.cpp | 20 ++++++++++++++++---- src/utils/WiFiUtils.cpp | 24 ++++++++++++++++-------- 3 files changed, 33 insertions(+), 13 deletions(-) diff --git a/src/Main.cpp b/src/Main.cpp index 48c82c0b..d05248f9 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -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(); diff --git a/src/WsServer.cpp b/src/WsServer.cpp index 4d9edf27..e8201934 100644 --- a/src/WsServer.cpp +++ b/src/WsServer.cpp @@ -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,17 +183,19 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length) // запуск асинхронного сканирования wifi сетей при нажатии выпадающего // списка if (headerStr == "/scan|") { +#ifdef ESP8266 std::vector 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); - ScanAsync(); + if (ssidListHeapJson == "{\"0\":\"Scanning...\"}") + ScanAsync(); #endif } diff --git a/src/utils/WiFiUtils.cpp b/src/utils/WiFiUtils.cpp index b6a18d56..a583dbbb 100644 --- a/src/utils/WiFiUtils.cpp +++ b/src/utils/WiFiUtils.cpp @@ -9,7 +9,6 @@ #ifndef ESP8266 std::vector _ssidList; std::vector _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 + 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"); - scanInProgress = false; - handleScanResults(); + //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);