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;
...