如何在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
相关产品推荐
相关产品推荐

