本工程SDK基于乐鑫的无操作系统ESP8266_NONOS_SDK-3.0.5开发包,下载地址:https://github.com/espressif/ESP8266_NONOS_SDK/releases。对下载的zip压缩包解压即可。
关于ESP8266的AT指令有以下基本形式。
(1)、Test形式,测试指令
格式:AT+TEST=?
(1)、Qurey形式,查询指令
格式:AT+TEST?
(2)、Setup形式,设置指令
格式:AT+TEST=1,"fhz",3
(3)、Exec形式,执行指令
格式:AT+TEST
指令类型 | 指令格式 | 作用 |
测试指令 | AT+[x]=? | 用于查询设置指令的参数以及取值范围 |
查询指令 | AT+[x] | 用于返回参数的当前值 |
设置指令 | AT+[x]=<…> | 用于用户修改自定义参数 |
执行指令 | AT+[x] | 用于执行受内部程序控制的变参数不可变的功能 |
注意:
1)不是每条 AT 指令都具备上述 4 类命令。
2)后文指令中[ ]内数据为缺省值,不必填写或可能不显示。
3)波特率 115200。
4)参数为字符串的,需要加上双引号。例如:AT+CWSAP=“ESP_756190”,“20130826”,1,4
在at_custom.h文件中已经把AT的功能类型封装成结构体如下代码:
typedef struct
{
char *at_cmdName;
int8_t at_cmdLen;
void (*at_testCmd)(uint8_t id);
void (*at_queryCmd)(uint8_t id);
void (*at_setupCmd)(uint8_t id, char *pPara);
void (*at_exeCmd)(uint8_t id);
}at_funcationType;
其中:
at_cmdName:为定义AT指令的名字
at_cmdLen:为定义AT指令的长度
at_testCmd:执行test形式命令的函数指针。
at_queryCmd:执行qurey形式命令的函数指针。
at_setupCmd:执行setup形式命令的函数指针。
at_exeCmd:执行exe形式命令的函数指针。
下图是user_main.c中定义的结构体数组,
at_funcationType at_custom_cmd[] = {
{"+TEST", 5, at_testCmdTest, at_queryCmdTest, at_setupCmdTest, at_exeCmdTest},
#ifdef AT_UPGRADE_SUPPORT
{"+CIUPDATE", 9, NULL, NULL, NULL, at_exeCmdCiupdate}
#endif
};
对应的相关函数:
void ICACHE_FLASH_ATTR
at_setupCmdTest(uint8_t id, char *pPara)
{
int result = 0, err = 0, flag = 0;
uint8 buffer[32] = {0};
pPara++; // skip '='
//get the first parameter
// digit
flag = at_get_next_int_dec(&pPara, &result, &err);
// flag must be ture because there are more parameter
if (flag == FALSE) {
at_response_error();
return;
}
if (*pPara++ != ',') { // skip ','
at_response_error();
return;
}
os_sprintf(buffer, "the first parameter:%d\r\n", result);
at_port_print(buffer);
//get the second parameter
// string
at_data_str_copy(buffer, &pPara, 10);
at_port_print_irom_str("the second parameter:");
at_port_print(buffer);
at_port_print_irom_str("\r\n");
if (*pPara == ',') {
pPara++; // skip ','
result = 0;
//there is the third parameter
// digit
flag = at_get_next_int_dec(&pPara, &result, &err);
// we donot care of flag
os_sprintf(buffer, "the third parameter:%d\r\n", result);
at_port_print(buffer);
}
if (*pPara != '\r') {
at_response_error();
return;
}
at_response_ok();
}
void ICACHE_FLASH_ATTR
at_testCmdTest(uint8_t id)
{
at_port_print_irom_str("at_testCmdTest\r\n");
at_response_ok();
}
void ICACHE_FLASH_ATTR
at_queryCmdTest(uint8_t id)
{
at_port_print_irom_str("at_queryCmdTest\r\n");
at_response_ok();
}
void ICACHE_FLASH_ATTR
at_exeCmdTest(uint8_t id)
{
at_port_print_irom_str("at_exeCmdTest\r\n");
at_response_ok();
}
在串口调试助手输入以下指令如图所示。
格式:AT+TEST=?
格式:AT+TEST?
格式:AT+TEST=1,"fhz",3
格式:AT+TEST