You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ESP32自定义AT命令中执行其他AT命令?

如何在ESP32自定义AT命令中执行其他AT命令

ESP-IDF的AT框架没有提供你示例中的EXEC宏,要在自定义AT命令里执行其他AT命令,有两种可行方案:

方案1:调用AT输入处理函数模拟命令输入

使用AT框架内部的esp_at_input_process函数,它可以模拟用户输入AT命令并触发处理逻辑,代码示例如下:

#include "esp_at.h"

static uint8_t at_test_cmd_test(uint8_t *cmd_name)
{
    uint8_t buffer[64] = {0};
    snprintf((char *)buffer, 64, "test command: <AT%s=?> is executed\n", cmd_name);
    esp_at_port_write_data(buffer, strlen((char *)buffer));

    // 要执行的AT命令,注意转义双引号
    const char* target_cmd = "AT+HTTPCGET=\"http://www.my.com\"";
    // 逐字节输入命令到AT处理流程
    for (int i = 0; i < strlen(target_cmd); i++) {
        esp_at_input_process((uint8_t)target_cmd[i]);
    }
    // 输入换行符触发命令执行
    esp_at_input_process('\r');
    esp_at_input_process('\n');

    return ESP_AT_RESULT_CODE_OK;
}

方案2:直接调用目标AT命令的处理函数

如果知道目标AT命令对应的处理函数(可在官方AT代码中查找,比如AT+HTTPCGET的处理函数通常以at_httpc_get_cmd这类命名),直接调用该函数会更高效,无需解析命令字符串,示例如下:

// 假设AT+HTTPCGET对应的处理函数原型如下(需根据实际代码调整)
extern uint8_t at_httpc_get_cmd(uint8_t cmd_type, char *p_param);

static uint8_t at_test_cmd_test(uint8_t *cmd_name)
{
    uint8_t buffer[64] = {0};
    snprintf((char *)buffer, 64, "test command: <AT%s=?> is executed\n", cmd_name);
    esp_at_port_write_data(buffer, strlen((char *)buffer));

    // 直接调用目标命令的处理函数,cmd_type设为执行类型(比如ESP_AT_CMD_TYPE_EXEC)
    char* param = "\"http://www.my.com\"";
    at_httpc_get_cmd(ESP_AT_CMD_TYPE_EXEC, param);

    return ESP_AT_RESULT_CODE_OK;
}

注意事项

  • 确保调用时机处于AT命令处理线程的上下文内,避免线程安全问题
  • 如果目标命令存在异步处理逻辑,需等待处理完成后再返回当前自定义命令的结果
  • 使用esp_at_input_process时,要保证输入的命令格式正确,包括结尾的\r\n

内容的提问来源于stack exchange,提问作者user1053507

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 16:03:16