Compare commits
4 Commits
78e81da80f
...
435a7caa66
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
435a7caa66 | ||
| 0f00dfbb5d | |||
|
|
4c1a38fd1f | ||
|
|
ba2832abf8 |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -3,3 +3,6 @@
|
|||||||
.vscode/c_cpp_properties.json
|
.vscode/c_cpp_properties.json
|
||||||
.vscode/launch.json
|
.vscode/launch.json
|
||||||
.vscode/ipch
|
.vscode/ipch
|
||||||
|
GIT_GUIDE.md
|
||||||
|
git_upload.bat
|
||||||
|
.trae/
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
// ESP32 GPIO控制演示
|
// ESP32 GPIO控制演示
|
||||||
#define BOOT_BUTTON_PIN 0 // Boot按钮引脚
|
#define BOOT_BUTTON_PIN 0 // Boot按钮引脚
|
||||||
#define NETWORK_LED_PIN 48 // 网络状态LED指示灯开发板48引脚,雷达板5引脚
|
#define NETWORK_LED_PIN 5 // 网络状态LED指示灯开发板48引脚,雷达板5引脚
|
||||||
#define CONFIG_CLEAR_PIN 4 // 配置清除指示灯
|
#define CONFIG_CLEAR_PIN 4 // 配置清除指示灯
|
||||||
#define GPIO8 8 // 自定义GPIO8
|
#define GPIO8 8 // 自定义GPIO8
|
||||||
#define GPIO9 9 // 自定义GPIO9
|
#define GPIO9 9 // 自定义GPIO9
|
||||||
@@ -617,3 +617,4 @@ void loop() {
|
|||||||
|
|
||||||
esp_task_wdt_reset();
|
esp_task_wdt_reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ WiFiManager::WiFiManager() {
|
|||||||
savedNetworkCount = 0;
|
savedNetworkCount = 0;
|
||||||
currentState = WIFI_IDLE;
|
currentState = WIFI_IDLE;
|
||||||
lastReconnectAttempt = 0;
|
lastReconnectAttempt = 0;
|
||||||
|
isScanning = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -129,12 +130,12 @@ bool WiFiManager::connectToNetwork(const char* ssid, const char* password) {
|
|||||||
setNetworkStatus(NET_CONNECTING);
|
setNetworkStatus(NET_CONNECTING);
|
||||||
|
|
||||||
WiFi.mode(WIFI_STA);
|
WiFi.mode(WIFI_STA);
|
||||||
|
vTaskDelay(200 / portTICK_PERIOD_MS);
|
||||||
WiFi.begin(ssid, password);
|
WiFi.begin(ssid, password);
|
||||||
|
|
||||||
unsigned long startTime = millis();
|
unsigned long startTime = millis();
|
||||||
unsigned long lastStatusPrint = 0;
|
unsigned long lastStatusPrint = 0;
|
||||||
|
|
||||||
// 等待连接成功或超时
|
|
||||||
while (WiFi.status() != WL_CONNECTED && (millis() - startTime) < WIFI_CONNECT_TIMEOUT) {
|
while (WiFi.status() != WL_CONNECTED && (millis() - startTime) < WIFI_CONNECT_TIMEOUT) {
|
||||||
if (millis() - lastStatusPrint >= 500) {
|
if (millis() - lastStatusPrint >= 500) {
|
||||||
Serial.printf("[WiFi] 连接中,状态: %d\n", WiFi.status());
|
Serial.printf("[WiFi] 连接中,状态: %d\n", WiFi.status());
|
||||||
@@ -168,13 +169,23 @@ bool WiFiManager::connectToNetwork(const char* ssid, const char* password) {
|
|||||||
* @return 是否成功连接到匹配的网络
|
* @return 是否成功连接到匹配的网络
|
||||||
*/
|
*/
|
||||||
bool WiFiManager::scanAndMatchNetworks() {
|
bool WiFiManager::scanAndMatchNetworks() {
|
||||||
|
if (isScanning) {
|
||||||
|
Serial.println("⚠️ [WiFi] 正在扫描中,跳过本次扫描");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
Serial.println("🔍 [WiFi] 开始扫描WiFi网络...");
|
Serial.println("🔍 [WiFi] 开始扫描WiFi网络...");
|
||||||
currentState = WIFI_SCANNING;
|
currentState = WIFI_SCANNING;
|
||||||
|
isScanning = true;
|
||||||
|
|
||||||
|
if (WiFi.status() == WL_CONNECTED) {
|
||||||
|
Serial.println("📶 WiFi已连接,断开后扫描");
|
||||||
|
WiFi.disconnect(false);
|
||||||
|
vTaskDelay(200 / portTICK_PERIOD_MS);
|
||||||
|
}
|
||||||
|
|
||||||
WiFi.disconnect(true);
|
|
||||||
vTaskDelay(100 / portTICK_PERIOD_MS);
|
|
||||||
WiFi.mode(WIFI_STA);
|
WiFi.mode(WIFI_STA);
|
||||||
vTaskDelay(100 / portTICK_PERIOD_MS);
|
vTaskDelay(200 / portTICK_PERIOD_MS);
|
||||||
|
|
||||||
int n = WiFi.scanNetworks();
|
int n = WiFi.scanNetworks();
|
||||||
Serial.printf("🔍 扫描到 %d 个WiFi网络\n", n);
|
Serial.printf("🔍 扫描到 %d 个WiFi网络\n", n);
|
||||||
@@ -182,6 +193,7 @@ bool WiFiManager::scanAndMatchNetworks() {
|
|||||||
if (n <= 0) {
|
if (n <= 0) {
|
||||||
Serial.println("❌ 未扫描到任何WiFi网络或扫描失败");
|
Serial.println("❌ 未扫描到任何WiFi网络或扫描失败");
|
||||||
currentState = WIFI_DISCONNECTED;
|
currentState = WIFI_DISCONNECTED;
|
||||||
|
isScanning = false;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -221,13 +233,19 @@ bool WiFiManager::scanAndMatchNetworks() {
|
|||||||
if (bestNetwork.ssid != nullptr) {
|
if (bestNetwork.ssid != nullptr) {
|
||||||
Serial.printf("✅ 选择信号最强的网络: %s, 信号: %d dBm\n",
|
Serial.printf("✅ 选择信号最强的网络: %s, 信号: %d dBm\n",
|
||||||
bestNetwork.ssid, bestNetwork.rssi);
|
bestNetwork.ssid, bestNetwork.rssi);
|
||||||
|
|
||||||
|
WiFi.scanDelete();
|
||||||
|
vTaskDelay(300 / portTICK_PERIOD_MS);
|
||||||
|
|
||||||
if (connectToNetwork(bestNetwork.ssid, bestNetwork.password)) {
|
if (connectToNetwork(bestNetwork.ssid, bestNetwork.password)) {
|
||||||
|
isScanning = false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Serial.println("❌ 未找到匹配的WiFi网络或信号过弱");
|
Serial.println("❌ 未找到匹配的WiFi网络或信号过弱");
|
||||||
currentState = WIFI_DISCONNECTED;
|
currentState = WIFI_DISCONNECTED;
|
||||||
|
isScanning = false;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -260,18 +278,33 @@ bool WiFiManager::initializeWiFi() {
|
|||||||
* 扫描附近的WiFi网络,过滤信号弱的网络,将结果通过BLE发送给客户端
|
* 扫描附近的WiFi网络,过滤信号弱的网络,将结果通过BLE发送给客户端
|
||||||
*/
|
*/
|
||||||
void WiFiManager::scanAndSendResults() {
|
void WiFiManager::scanAndSendResults() {
|
||||||
Serial.println("📱 [BLE-WiFi] 开始WiFi扫描...");
|
if (isScanning) {
|
||||||
|
Serial.println("⚠️ [WiFi] 正在扫描中,跳过本次扫描");
|
||||||
|
if (deviceConnected) {
|
||||||
|
String errorMsg = String("{\"type\":\"scanWiFiResult\",\"success\":false,\"message\":\"正在扫描中,请稍后再试\",\"networks\":[],\"count\":0}");
|
||||||
|
sendJSONDataToBLE(errorMsg);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Serial.println("📱 [BLE-WiFi] 开始WiFi扫描...");
|
||||||
|
isScanning = true;
|
||||||
|
|
||||||
|
if (WiFi.status() == WL_CONNECTED) {
|
||||||
|
Serial.println("📶 WiFi已连接,断开后扫描");
|
||||||
|
WiFi.disconnect(false);
|
||||||
|
vTaskDelay(200 / portTICK_PERIOD_MS);
|
||||||
|
}
|
||||||
|
|
||||||
WiFi.disconnect(true);
|
|
||||||
vTaskDelay(100 / portTICK_PERIOD_MS);
|
|
||||||
WiFi.mode(WIFI_STA);
|
WiFi.mode(WIFI_STA);
|
||||||
vTaskDelay(100 / portTICK_PERIOD_MS);
|
vTaskDelay(200 / portTICK_PERIOD_MS);
|
||||||
|
|
||||||
int n = WiFi.scanNetworks();
|
int n = WiFi.scanNetworks();
|
||||||
Serial.printf("🔍 扫描到 %d 个WiFi网络\n", n);
|
Serial.printf("🔍 扫描到 %d 个WiFi网络\n", n);
|
||||||
|
|
||||||
if (n <= 0) {
|
if (n <= 0) {
|
||||||
Serial.println("❌ 未扫描到任何WiFi网络或扫描失败");
|
Serial.println("❌ 未扫描到任何WiFi网络或扫描失败");
|
||||||
|
isScanning = false;
|
||||||
if (deviceConnected) {
|
if (deviceConnected) {
|
||||||
String errorMsg = String("{\"type\":\"scanWiFiResult\",\"success\":false,\"message\":\"未扫描到任何WiFi网络或扫描失败\",\"networks\":[],\"count\":0}");
|
String errorMsg = String("{\"type\":\"scanWiFiResult\",\"success\":false,\"message\":\"未扫描到任何WiFi网络或扫描失败\",\"networks\":[],\"count\":0}");
|
||||||
sendJSONDataToBLE(errorMsg);
|
sendJSONDataToBLE(errorMsg);
|
||||||
@@ -331,6 +364,9 @@ void WiFiManager::scanAndSendResults() {
|
|||||||
|
|
||||||
Serial.printf("✅ 发送WiFi扫描结果,包含 %d 个可用网络\n", first ? 0 : n);
|
Serial.printf("✅ 发送WiFi扫描结果,包含 %d 个可用网络\n", first ? 0 : n);
|
||||||
|
|
||||||
|
WiFi.scanDelete();
|
||||||
|
isScanning = false;
|
||||||
|
|
||||||
if (deviceConnected) {
|
if (deviceConnected) {
|
||||||
sendJSONDataToBLE(wifiList);
|
sendJSONDataToBLE(wifiList);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -89,6 +89,7 @@ private:
|
|||||||
int savedNetworkCount; // 已保存的网络数量
|
int savedNetworkCount; // 已保存的网络数量
|
||||||
WiFiManagerState currentState; // 当前WiFi管理器状态
|
WiFiManagerState currentState; // 当前WiFi管理器状态
|
||||||
unsigned long lastReconnectAttempt; // 上次尝试重连的时间
|
unsigned long lastReconnectAttempt; // 上次尝试重连的时间
|
||||||
|
bool isScanning; // 是否正在扫描
|
||||||
|
|
||||||
bool scanAndMatchNetworks(); // 扫描并匹配网络
|
bool scanAndMatchNetworks(); // 扫描并匹配网络
|
||||||
bool connectToNetwork(const char* ssid, const char* password); // 连接到指定网络
|
bool connectToNetwork(const char* ssid, const char* password); // 连接到指定网络
|
||||||
|
|||||||
Reference in New Issue
Block a user