设计一个esp32 AT 指令接收程序
时间: 2024-03-20 12:43:57 浏览: 75
ESP8266-AT指令集V2.1.0
4星 · 用户满意度95%
以下是一个简单的ESP32 AT指令接收程序示例,它可以接收并解析AT指令,并根据指令执行相应的操作:
```c
#include "esp_log.h"
#include "esp_wifi.h"
#include "esp_event_loop.h"
#include "nvs_flash.h"
#include "esp_at.h"
#include "esp_at_wifi.h"
static const char* TAG = "esp32_at";
// 处理AT指令
static uint8_t at_cmd_process(uint8_t* cmd_name, uint8_t* cmd_param, esp_at_cmd_type cmd_type, uint8_t* ret_buf, int* ret_len)
{
ESP_LOGI(TAG, "Received AT command: %s %s", cmd_name, cmd_param);
// 根据指令执行相应的操作
if (strcmp((char*)cmd_name, "AT+TEST") == 0) {
// 如果收到的是AT+TEST指令,则返回OK
*ret_len = sprintf((char*)ret_buf, "OK\r\n");
} else {
// 如果收到的是其他指令,则返回ERROR
*ret_len = sprintf((char*)ret_buf, "ERROR\r\n");
}
return ESP_AT_RESULT_OK;
}
static void at_task(void *pvParameters)
{
esp_log_level_set(TAG, ESP_LOG_INFO);
// 初始化AT指令库
esp_at_device_ops_struct esp_at_device_ops = {
.read_data = esp_at_port_read_data,
.write_data = esp_at_port_write_data,
.get_data_length = esp_at_port_get_data_length,
.wait_write_complete = esp_at_port_wait_write_complete,
.get_uart_interrupt_flag = esp_at_port_get_uart_interrupt_flag,
.clear_uart_interrupt_flag = esp_at_port_clear_uart_interrupt_flag,
};
esp_at_device_ops_regist(&esp_at_device_ops);
// 注册AT指令处理函数
esp_at_custom_cmd_array[0] = (esp_at_cmd_struct_t) {
.command_name = "AT+TEST",
.func = at_cmd_process,
.arg_count = 0,
};
esp_at_custom_cmd_array_regist(&esp_at_custom_cmd_array[0], 1);
// 初始化WiFi AT指令库
esp_at_wifi_station_setup(NULL);
// 开始AT指令任务
esp_at_start();
vTaskDelete(NULL);
}
void app_main()
{
// 初始化NVS
esp_err_t ret = nvs_flash_init();
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
ESP_ERROR_CHECK(nvs_flash_erase());
ret = nvs_flash_init();
}
ESP_ERROR_CHECK(ret);
// 创建AT指令任务
xTaskCreate(at_task, "at_task", 4096, NULL, 1, NULL);
}
```
在这个例子中,我们注册了一个自定义的AT指令处理函数`at_cmd_process`,它可以接收和解析AT指令,并根据指令执行相应的操作。如果收到的是AT+TEST指令,则返回OK;否则返回ERROR。你可以根据自己的需求修改和扩展这个处理函数。
阅读全文