diff --git a/.gitignore b/.gitignore index 32a377e..e6de87d 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,5 @@ .vscode/c_cpp_properties.json .vscode/launch.json .vscode/ipch -GIT_GUIDE.md -git_upload.bat +Git提交方法.md .trae/ diff --git a/src/wifi_manager.cpp b/src/wifi_manager.cpp index 576ec75..c31c848 100644 --- a/src/wifi_manager.cpp +++ b/src/wifi_manager.cpp @@ -170,8 +170,19 @@ bool WiFiManager::connectToNetwork(const char* ssid, const char* password) { */ bool WiFiManager::scanAndMatchNetworks() { if (isScanning) { - Serial.println("⚠️ [WiFi] 正在扫描中,跳过本次扫描"); - return false; + Serial.println("⏳ [WiFi] 正在扫描中,等待扫描完成..."); + int waitCount = 0; + while (isScanning && waitCount < 50) { + vTaskDelay(100 / portTICK_PERIOD_MS); + waitCount++; + } + + if (isScanning) { + Serial.println("⚠️ [WiFi] 等待超时,跳过本次扫描"); + return false; + } + + Serial.println("✅ [WiFi] 扫描已完成,开始新的扫描"); } Serial.println("🔍 [WiFi] 开始扫描WiFi网络..."); @@ -279,12 +290,23 @@ bool WiFiManager::initializeWiFi() { */ void WiFiManager::scanAndSendResults() { if (isScanning) { - Serial.println("⚠️ [WiFi] 正在扫描中,跳过本次扫描"); - if (deviceConnected) { - String errorMsg = String("{\"type\":\"scanWiFiResult\",\"success\":false,\"message\":\"正在扫描中,请稍后再试\",\"networks\":[],\"count\":0}"); - sendJSONDataToBLE(errorMsg); + Serial.println("⏳ [WiFi] 正在扫描中,等待扫描完成..."); + int waitCount = 0; + while (isScanning && waitCount < 50) { + vTaskDelay(100 / portTICK_PERIOD_MS); + waitCount++; } - return; + + if (isScanning) { + Serial.println("⚠️ [WiFi] 等待超时,跳过本次扫描"); + if (deviceConnected) { + String errorMsg = String("{\"type\":\"scanWiFiResult\",\"success\":false,\"message\":\"等待扫描超时,请稍后再试\",\"networks\":[],\"count\":0}"); + sendJSONDataToBLE(errorMsg); + } + return; + } + + Serial.println("✅ [WiFi] 扫描已完成,开始新的扫描"); } Serial.println("📱 [BLE-WiFi] 开始WiFi扫描..."); @@ -399,13 +421,39 @@ bool WiFiManager::handleConfigurationData(const char* ssid, const char* password return false; } + if (isScanning) { + Serial.println("⏳ [WiFi] 正在扫描中,等待扫描完成..."); + int waitCount = 0; + while (isScanning && waitCount < 50) { + vTaskDelay(100 / portTICK_PERIOD_MS); + waitCount++; + } + + if (isScanning) { + Serial.println("⚠️ [WiFi] 等待超时"); + if (deviceConnected) { + String errorMsg = String("{\"type\":\"wifiConfigResult\",\"success\":false,\"message\":\"等待扫描超时,请稍后再试\"}"); + sendJSONDataToBLE(errorMsg); + } + return false; + } + + Serial.println("✅ [WiFi] 扫描已完成,开始新的扫描"); + } + // 先扫描WiFi网络,检查是否存在匹配的网络 Serial.println("🔍 [WiFi] 扫描WiFi网络,检查是否存在匹配的网络..."); + currentState = WIFI_SCANNING; + isScanning = true; + int n = WiFi.scanNetworks(); Serial.printf("🔍 扫描到 %d 个WiFi网络\n", n); if (n == 0) { Serial.println("❌ 未扫描到任何WiFi网络"); + WiFi.scanDelete(); + isScanning = false; + currentState = WIFI_DISCONNECTED; if (deviceConnected) { String resultMsg = String("{\"type\":\"wifiConfigResult\",\"success\":false,\"message\":\"未扫描到任何WiFi网络,请检查设备位置\"}"); @@ -445,12 +493,20 @@ bool WiFiManager::handleConfigurationData(const char* ssid, const char* password Serial.println("❌ 未找到目标WiFi网络"); } + WiFi.scanDelete(); + isScanning = false; + currentState = WIFI_DISCONNECTED; + if (deviceConnected) { sendJSONDataToBLE(errorMsg); } return false; } + WiFi.scanDelete(); + isScanning = false; + vTaskDelay(300 / portTICK_PERIOD_MS); + // 尝试连接到指定网络 if (connectToNetwork(ssid, password)) { // 连接成功后保存配置 @@ -466,6 +522,8 @@ bool WiFiManager::handleConfigurationData(const char* ssid, const char* password } Serial.println("❌ WiFi配置失败"); + isScanning = false; + currentState = WIFI_DISCONNECTED; if (deviceConnected) { String resultMsg = String("{\"type\":\"wifiConfigResult\",\"success\":false,\"message\":\"WiFi配置失败,请检查密码是否正确\"}");