Fix: Improve BLE data reception and WiFi connection stability

- Add BLE data timeout handling: auto-process data when timeout occurs
- Fix WiFi reconnection: add scanning conflict detection with isScanning flag
- Fix WiFi scanning timeout: reset WiFi hardware state before scanning
- Improve scan conflict handling: wait for scan completion instead of skipping
- Add WiFi.scanDelete() calls to prevent hardware state issues
- Add proper isScanning flag management in all scanning functions
This commit is contained in:
Admin
2026-03-03 16:06:57 +08:00
parent 435a7caa66
commit 64618617cf
2 changed files with 66 additions and 9 deletions

3
.gitignore vendored
View File

@@ -3,6 +3,5 @@
.vscode/c_cpp_properties.json
.vscode/launch.json
.vscode/ipch
GIT_GUIDE.md
git_upload.bat
Git提交方法.md
.trae/

View File

@@ -170,10 +170,21 @@ bool WiFiManager::connectToNetwork(const char* ssid, const char* password) {
*/
bool WiFiManager::scanAndMatchNetworks() {
if (isScanning) {
Serial.println("⚠️ [WiFi] 正在扫描中,跳过本次扫描");
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网络...");
currentState = WIFI_SCANNING;
isScanning = true;
@@ -279,14 +290,25 @@ bool WiFiManager::initializeWiFi() {
*/
void WiFiManager::scanAndSendResults() {
if (isScanning) {
Serial.println("⚠️ [WiFi] 正在扫描中,跳过本次扫描");
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\":\"scanWiFiResult\",\"success\":false,\"message\":\"正在扫描中,请稍后再试\",\"networks\":[],\"count\":0}");
String errorMsg = String("{\"type\":\"scanWiFiResult\",\"success\":false,\"message\":\"等待扫描超时,请稍后再试\",\"networks\":[],\"count\":0}");
sendJSONDataToBLE(errorMsg);
}
return;
}
Serial.println("✅ [WiFi] 扫描已完成,开始新的扫描");
}
Serial.println("📱 [BLE-WiFi] 开始WiFi扫描...");
isScanning = true;
@@ -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配置失败请检查密码是否正确\"}");