WIFI 应用层代码

1.0 定义枚举类型

cpp 复制代码
typedef enum
{
	WIFI_COMM_WAIT,			// AT 等待命令
	WIFI_COMM_OK,			// AT 命令完成
	WIFI_COMM_FALL,			// AT 命令失败
}WifiCommState_t;

注:该枚举类型的作用是,定义三个成员变量,分别表示AT指令等待发送,AT指令接受成功,AT指令接受失败。


2.0 创建结构体函数

cpp 复制代码
/*
	创建结构体类型的函数
*/
static WifiCommState_t AtCmdHandle(char *cmd, char *rsp, uint32_t timeoutMs)
{
	static WifiCommState_t s_commState = WIFI_COMM_OK;
	static uint64_t s_sendCmdTime;
	char *recvStrBuf;
	
	if (s_commState != WIFI_COMM_WAIT)
	{
		if (cmd != NULL)
		{
			SendWifiModuleStr(cmd);
		}
		s_commState = WIFI_COMM_WAIT;
		s_sendCmdTime = GetSysRunTime();
	}
	else
	{
		if ((GetSysRunTime() - s_sendCmdTime) < timeoutMs)
		{
			recvStrBuf = RecvWifiModuleStr();
			if (strstr(recvStrBuf, rsp) != NULL)
			{
				s_commState = WIFI_COMM_OK;
			}
		}
		else
		{
			s_commState = WIFI_COMM_FALL;
		}
	}
	return s_commState;
}

注:这个函数是一个结构体函数,表示AT指令的句柄,有三个参数前两个参数都表示char 类型的指针变量,第一个参数表示发送的AT指令,第二个参数表示返回的值,第三个参数表示超时时间定义了两个静态局部变量第一个局部变量初始值赋值为AT指令发送完成,第二个变量用于记录发射红AT指令的时间,第三个变量获取了一个char * 类型的指针变量,用于存储返回的字符数据,使用 if 语句对指令的状态进行判断如果当前的指令状态不处于等待的状态就再次使用 if 判断当前的指令是否为空如果为空则发送WIFI模组的字符命令(AT指令),否则状态赋值为等待状态,同时获取当前系统时间...


3.0 创建结构体

cpp 复制代码
typedef struct
{
	// 需要发送的AT指令
	char *cmd;
	// 期望的应答数据
	char *rsp;
	// 得到应答的超时时间
	uint32_t timeoutMs;
}AtCmdInfo_t;

注:结构体的作用如注释所示


4.0 模组初始化命令集

cpp 复制代码
/*
	模组初始化命令集
*/
static AtCmdInfo_t g_checkModuleCmdTable[] = 
{
	{
		.cmd = "AT+RST\r\n",	// 软件复位
		.rsp = "ready",
		.timeoutMs = 3000,
	},
	{
		.cmd = NULL,			// 等待
		.rsp = "XXXXX",
		.timeoutMs = 1000,
	},
	{
        .cmd = "ATE0\r\n",        // 关闭回显
        .rsp = "OK",
		.timeoutMs = 500,
    },
	{
        .cmd = "AT+CWMODE=1\r\n",      // AT+CWMODE 命令用于设置 Wi-Fi 模块的工作模式。
        .rsp = "OK",
		.timeoutMs = 500,	
	},
	{
        .cmd = "AT+CWRECONNCFG=1,0\r\n",  // 设置 Wi-Fi 重连,重连间隔1S,无次数限制
        .rsp = "OK",
		.timeoutMs = 100,	
	},
};

软件复位

乐鑫网址:基础 AT 命令集 - ESP32-C2 - --- ESP-AT 用户指南 latest 文档

开启和关闭回显对应的AT指令集


5.0 创建枚举类型

cpp 复制代码
typedef enum
{
	AT_RST,
	AT_RST_DELAY,
	AT_E0,
	AT_CWMODE_1,
	AT_CWRECONNCFG,
}AtCheckModuleCmdType;

...


相关推荐
Jason_zhao_MR1 小时前
RK3576 MIPI Camera ISP调试:主观调优与工程实战(下)
stm32·嵌入式硬件·安全·系统架构·嵌入式
三品吉他手会点灯2 小时前
C语言学习笔记 - 40.数据类型 - scanf函数的编程规范与非法输入处理
c语言·开发语言·笔记·学习
ACP广源盛139246256734 小时前
iOS 27 开放 AI 生态@ACP#小型化扩展黄金风口,IX8008全面超越 ASM2806,铸就嵌入式 AI 扩展核心
人工智能·嵌入式硬件·macos·ios·计算机外设·objective-c·cocoa
smartpi_ai4 小时前
玩具产品从按键控制升级为语音控制:语音模块与MCU串口通信实战
单片机·嵌入式硬件
♛识尔如昼♛5 小时前
C 进阶(9) - 信号
c语言·信号
BreezeJuvenile6 小时前
【STM32】时钟摘取法
stm32·单片机·嵌入式硬件
崇山峻岭之间6 小时前
单片机GPIO配置
单片机·嵌入式硬件
不会武功的火柴6 小时前
SystemVerilog语法(7)-接口(interface)
嵌入式硬件·fpga开发·仿真·ic验证·rtl
深圳英康仕7 小时前
五网口六USB:一台龙芯2K3000工控机的接口配置解读
嵌入式硬件·信创·工控机·工业计算机·龙芯2k3000
lllllllccccc8 小时前
FReeRtos中断管理、临界段保护和任务调度器挂起和恢复学习
单片机·嵌入式硬件