Huyi 1 anno fa
parent
commit
d52f386634

+ 13 - 1
Drivers/Modules/esp32/Esp32.Regist.c

@@ -65,6 +65,7 @@ enum Step{
 	STEP_ENTER_DEEP_SLEEP, 	// 进入深睡眠
 	STEP_WAIT,				// 等待
 	
+	STEP_SET_MODE,			// 设置WIFI工作模式
 	STEP_CLOSE_AUTOCONNECT,	// 关闭自动连接AP
 	STEP_CONNECT_AP,		// 连接AP
 	STEP_QUERY_SIGNAL,		// 查询WiFi信号强度
@@ -236,13 +237,24 @@ static void REGIST_Process()
 						result = esp32.autoconnect_ap(0);
 						if(result == Result_Success)
 						{
-							PCTRL_GotoStep(&pctrl, STEP_CONNECT_AP, "连接AP");
+							PCTRL_GotoStep(&pctrl, STEP_SET_MODE, "设置WiFi为Station工作模式");
 						}
 						else if(result == Result_Failed)
 						{
 							goto_failure("关闭自动连接AP模式失败");
 						}
 						break;
+		case STEP_SET_MODE:    			// 设置WiFi为Station模式
+						result = esp32.set_mode(1);
+						if(result == Result_Success)
+						{
+							PCTRL_GotoStep(&pctrl, STEP_CONNECT_AP, "连接AP");
+						}
+						else if(result == Result_Failed)
+						{
+							goto_failure("设置工作模式失败");
+						}
+						break;
 		case STEP_CONNECT_AP:			// 连接AP
 						result = esp32.connect_ap(INITIAL_WIFI_ID,INITIAL_WIFI_PASSWORD);
 						if(result == Result_Success)

+ 13 - 2
Drivers/Modules/esp32/Esp32_UDP_Client5.c

@@ -78,6 +78,7 @@ enum Step{
 	STEP_ENTER_DEEP_SLEEP, 	// 进入深睡眠
 	STEP_WAIT, 				// 等待
 	
+	STEP_SET_MODE,			// 设置WIFI工作模式
 	STEP_SELECT_AP,			// 选择AP
 	STEP_TEST_AP,			// 检验已选择的AP
 	STEP_CONNECT_AP,		// 连接AP
@@ -253,14 +254,24 @@ static void UDPCLIENT_Process(void)
 						result = esp32.recv_ready_with_time(5000);
 						if(result == Result_Success)
 						{
-							PCTRL_GotoStep(&pctrl, STEP_SELECT_AP, "选择AP");
+							PCTRL_GotoStep(&pctrl, STEP_SET_MODE, "设置WiFi为Station工作模式");
 						}
 						else if(result == Result_Failed)
 						{
 							goto_failure("WiFi模块启动失败");
 						}
 						break;
-						
+		case STEP_SET_MODE:    			// 设置WiFi为Station模式
+						result = esp32.set_mode(1);
+						if(result == Result_Success)
+						{
+							PCTRL_GotoStep(&pctrl, STEP_SELECT_AP, "选择AP");
+						}
+						else if(result == Result_Failed)
+						{
+							goto_failure("设置工作模式失败");
+						}
+						break;				
 		case STEP_SELECT_AP:	
 						if(select_ap_flag == 0)
 						{

+ 70 - 59
Drivers/Modules/esp32/esp32.c

@@ -54,6 +54,9 @@ enum Result esp32_handle_data_sync(uint8_t * data, uint16_t send_data_length, ui
 enum Result esp32_recv_ready(void);							//30.判断模块是否正常启动
 enum Result esp32_recv_ready_with_time(uint32_t time_out);	//31.判断模块是否正常启动+等待时间
 
+enum Result esp32_set_mode(uint8_t mode);					//32.设置WiFi模式
+enum Result esp32_set_mode_sync(uint8_t mode);				//33.设置WiFi模式-同步
+
 /*************************************************** AT指令相关函数 ***************************************************/
 
 //AT指令数组
@@ -1148,65 +1151,72 @@ enum Result esp32_recv_ready_with_time(uint32_t time_out)
 	return result;
 }
 
+/*************************************************************************************
+* 32.设置WiFi工作模式
+* param1: mode(0:无WiFi模式  1:Station模式 2:SoftAP模式 3:SoftAP+Station模式)
+*
+**************************************************************************************/
+enum Result esp32_set_mode(uint8_t mode)
+{
+	enum Result result = Result_None;
+	int activeID = 88, time=500; 		// 活动ID, 超时时间
+	//校验参数
+	if(mode != 1)						//本模块采用Station模式
+	{
+		Log_Printf_Debug("set mode error!\r\n");
+		return Result_Failed;
+	}
+	// 校验ID
+	if(!verifyActiveID(activeID)){ return Result_Failed; }
+	// 判断状态
+	if(getStatus() == Status_None) 		// 空闲状态
+	{
+		sprintf(AT_CMD, "AT+CWMODE=%d\r\n", mode); 	// 拼接AT指令
+		result = send_at(AT_CMD, activeID);
+	}
+	else if(getStatus() != Status_Sending) 		  		// 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
+	{
+		Log_Printf_Debug("返回结果过期,请重置状态\r\n");// 打印日志
+		result = failed(1);		// 失败
+	}
+	else if(getTimerMs() > time) 						// 正在发送状态。判断超时
+	{
+		Log_Printf_Debug("AT指令返回超时\r\n"); 			// 打印日志
+		result = overtime(); 	// 超时
+	}
+	else if(strstr((char * )AT_result(), "OK\r\n") != NULL) 	// 查询是否返回
+	{
+			// 发送日志
+			Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
+			Log_SendArray_Debug(AT_result(), AT_result_length());
+			result = success(); // 成功
+	}
+	else if(strstr((char * )AT_result(), "ERROR\r\n") != NULL) 	// 查询是否返回
+	{
+		// 发送日志
+		Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
+		Log_SendArray_Debug(AT_result(), AT_result_length());
+		result = failed(2); // 失败
+	}
+	return result;
+}					
 
-
-///***************************************** 测试用*****************************************/
-//enum Result esp32_at(void)
-//{
-//	enum Result result = Result_None;
-//	int activeID = 88, time=500; 		// 活动ID, 超时时间
-//	
-//	// 校验ID
-//	if(!verifyActiveID(activeID)){ return Result_Failed; }
-//	// 判断状态
-//	if(getStatus() == Status_None) 		// 空闲状态
-//	{
-//		sprintf(AT_CMD, "AT\r\n"); 		// 拼接AT指令
-//		result = send_at(AT_CMD, activeID);
-//	}
-//	else if(getStatus() != Status_Sending) 		  		// 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
-//	{
-//		Log_Printf_Debug("返回结果过期,请重置状态\r\n");// 打印日志
-//		result = failed();		// 失败
-//	}
-//	else if(getTimerMs() > time) 						// 正在发送状态。判断超时
-//	{
-//		Log_Printf_Debug("AT指令返回超时\r\n"); 			// 打印日志
-//		result = overtime(); 	// 超时
-//	}
-//	else if(strstr((char * )AT_result(), "OK\r\n") != NULL) 	// 查询是否返回
-//	{
-//			// 发送日志
-//			Log_Printf_Debug("测试命令AT返回: %d\r\n", AT_result_length());
-//			Log_SendArray_Debug(AT_result(), AT_result_length());
-//			result = success(); // 成功
-//		
-//	}
-//	else if(strstr((char * )AT_result(), "ERROR\r\n") != NULL) 	// 查询是否返回
-//	{
-//		// 发送日志
-//		Log_Printf_Debug("测试命令AT返回: %d\r\n", AT_result_length());
-//		Log_SendArray_Debug(AT_result(), AT_result_length());
-//		result = failed(); // 失败
-//	}
-//	return result;
-//}
-
-//enum Result esp32_at_sync(void)
-//{
-//	enum Result result = Result_None;
-//	while(1)
-//	{
-//		result = esp32_at();
-//		if(result != Result_None)
-//		{
-//			// 重置
-//			esp32.reset();
-//			break;
-//		}
-//	}
-//	return result;
-//}
+//33.设置WiFi工作模式
+enum Result esp32_set_mode_sync(uint8_t mode)
+{
+	enum Result result = Result_None;
+	while(1)
+	{
+		result = esp32_set_mode(mode);
+		if(result != Result_None)
+		{
+			// 重置
+			esp32.reset();
+			break;
+		}
+	}
+	return result;
+}	
 
 /***************************************** 基于ESP32_C3模组的相关结构体声明 *****************************************/
 
@@ -1247,7 +1257,8 @@ struct ESP32_Struct esp32=
 	.handle_data_sync = esp32_handle_data_sync,
 	.recv_ready = esp32_recv_ready,
 	.recv_ready_with_time = esp32_recv_ready_with_time,
-	
+	.set_mode = esp32_set_mode,			
+	.set_mode_sync = esp32_set_mode_sync,
 };
 			
 

+ 3 - 1
Drivers/Modules/esp32/esp32.h

@@ -72,7 +72,9 @@ struct ESP32_Struct
 	
 	enum Result (* recv_ready)(void);							//30.判断模块是否正常启动
 	enum Result (* recv_ready_with_time)(uint32_t time_out);	//31.判断模块是否正常启动+等待时间
-	
+
+	enum Result (* set_mode)(uint8_t mode);						//32.设置WiFi模式
+	enum Result (* set_mode_sync)(uint8_t mode);				//33.设置WiFi模式-同步
 };