ESP8266开发属于自己的AT指令

本文介绍了如何使用乐鑫ESP8266的无操作系统SDK进行AT指令操作,包括Test、Query、Setup和Exec形式,详细解读了at_custom.h和user_main.c中的相关函数实现。
摘要由CSDN通过智能技术生成

本工程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

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值