Huyi преди 1 година
родител
ревизия
e57f7fdbf8
променени са 2 файла, в които са добавени 43 реда и са изтрити 19 реда
  1. 42 18
      Drivers/Modules/esp32/Esp32_UDP_Client5.c
  2. 1 1
      Drivers/Modules/esp32/esp32.c

+ 42 - 18
Drivers/Modules/esp32/Esp32_UDP_Client5.c

@@ -79,6 +79,7 @@ enum Step{
 	STEP_WAIT, 				// 等待
 	
 	STEP_SELECT_AP,			// 选择AP
+	STEP_TEST_AP,			// 检验已选择的AP
 	STEP_CONNECT_AP,		// 连接AP
 	STEP_QUERY_SIGNAL,		// 查询WiFi信号强度
 	STEP_SET_CIPMODE,		// 设置传输模式
@@ -214,8 +215,10 @@ void UDPCLIENT_ProcessHandle(void)
 }
 
 // 发送数据的逻辑
-static int wifi_number = 0; //wifi信息编号变量
 int wifi_rssi[10];			//各wifi信号值存储数组
+static int wifi_number = 0; //wifi信息编号变量
+static int wifi_location=0; 	// 最佳wifi信号在数组中的位置	
+static int select_ap_flag = 0;  // 选择AP标志位 0:未选择 1:已选择
 static enum Result result = Result_None;
 
 //获取最佳wifi_rssi中最佳信号位置
@@ -259,32 +262,53 @@ static void UDPCLIENT_Process(void)
 						break;
 						
 		case STEP_SELECT_AP:	
-		
-						if(wifi_number < regist_response.wifiNumber)
+						if(select_ap_flag == 0)
 						{
-							result = esp32.query_id_signal(regist_response.wifi[wifi_number].wifiName, &wifi_rssi[wifi_number]);
-							if(result == Result_Success ||result == Result_Failed)
+							if(wifi_number < regist_response.wifiNumber)
 							{
-//								Log_Printf_Debug("wifi%d的信号值RSSI=%d\r\n",wifi_number,wifi_rssi[wifi_number]);
-//								Log_Printf_Debug("wifi_number=%d\r\n",wifi_number);
-								wifi_number++;
-								PCTRL_GotoStep(&pctrl, STEP_SELECT_AP, "继续选择AP");
+								result = esp32.query_id_signal(regist_response.wifi[wifi_number].wifiName, &wifi_rssi[wifi_number]);
+								if(result == Result_Success ||result == Result_Failed)
+								{
+//									Log_Printf_Debug("wifi%d的信号值RSSI=%d\r\n",wifi_number,wifi_rssi[wifi_number]);
+//									Log_Printf_Debug("wifi_number=%d\r\n",wifi_number);
+									wifi_number++;
+									PCTRL_GotoStep(&pctrl, STEP_SELECT_AP, "继续选择AP");
+								}
+							}
+							else 
+							{
+								//获取信号最佳的wifi在数组中的位置
+								wifi_location=get_BestWifiSignal(wifi_rssi, wifi_number);
+								//拷贝wifi信息
+								strcpy(WIFI_ID,regist_response.wifi[wifi_location].wifiName);
+								strcpy(WIFI_PASSWORD,regist_response.wifi[wifi_location].wifiPassword);
+								//选择AP标志位置1
+								select_ap_flag =1;
+								
+								Log_Printf_Debug("选择信号最好的第%d组wifi\r\n",wifi_location);
+								Log_Printf_Debug("WIFI_ID=%s\r\n",WIFI_ID);
+								Log_Printf_Debug("WIFI_PASSWORD=%s\r\n",WIFI_PASSWORD);
+								PCTRL_GotoStep(&pctrl, STEP_CONNECT_AP, "连接AP");
 							}
 						}
 						else
 						{
-							//获取信号最佳的wifi在数组中的位置
-							int i=get_BestWifiSignal(wifi_rssi, wifi_number);
-							//拷贝wifi信息
-							strcpy(WIFI_ID,regist_response.wifi[i].wifiName);
-							strcpy(WIFI_PASSWORD,regist_response.wifi[i].wifiPassword);
-							Log_Printf_Debug("选择信号最好的第%d组wifi\r\n",i);
-							Log_Printf_Debug("WIFI_ID=%s\r\n",WIFI_ID);
-							Log_Printf_Debug("WIFI_PASSWORD=%s\r\n",WIFI_PASSWORD);
+							PCTRL_GotoStep(&pctrl, STEP_TEST_AP, "检验已选择的AP");
+						}
+						break;
+		case STEP_TEST_AP:
+						result = esp32.query_id_signal(regist_response.wifi[wifi_location].wifiName, &wifi_rssi[wifi_location]);
+						if(result == Result_Success)
+						{
 							PCTRL_GotoStep(&pctrl, STEP_CONNECT_AP, "连接AP");
 						}
+						else if(result == Result_Failed)
+						{
+							wifi_number = 0;
+							select_ap_flag = 0;
+							goto_failure("检验已选择的AP失败");
+						}
 						break;
-				
 		case STEP_CONNECT_AP:			// 连接AP
 						result = esp32.connect_ap(WIFI_ID,WIFI_PASSWORD);
 						if(result == Result_Success)

+ 1 - 1
Drivers/Modules/esp32/esp32.c

@@ -388,7 +388,7 @@ enum Result esp32_set_sleep_sync(uint8_t mode)
 enum Result esp32_connect_ap(char * id, char * password)
 {
 	enum Result result = Result_None;
-	int activeID = 13, time=5000; 		// 活动ID, 超时时间
+	int activeID = 13, time=6000; 		// 活动ID, 超时时间
 	// 校验ID
 	if(!verifyActiveID(activeID)){ return Result_Failed; }
 	// 判断状态