esp-AT esp_at.h API

本文主要探讨ESP32中如何自定义AT命令,以实现特定功能。通过理解esp_at.h库中的API,可以扩展ESP32的AT通信能力。
摘要由CSDN通过智能技术生成

目的:自定义AT命令的基础

在这里插入图片描述

结构体

esp_at_cmd_struct 该结构体用来定义AT命令
typedef struct {
    char *at_cmdName;                               /*!< at command name */
    uint8_t (*at_testCmd)(uint8_t *cmd_name);       /*!<测试命令函数指针 */
    uint8_t (*at_queryCmd)(uint8_t *cmd_name);      /*!<查询命令函数指针 */
    uint8_t (*at_setupCmd)(uint8_t para_num);       /*!< 设置命令函数指针 */
    uint8_t (*at_exeCmd)(uint8_t *cmd_name);        /*!< 执行命令函数指针 */
} esp_at_cmd_struct;
/**
 * @brief esp_at_device_ops_struct
 *  设备操作AT的函数结构
 */
typedef struct {
    int32_t (*read_data) (uint8_t *data, int32_t len);              /*!< 从设备读数据 */
    int32_t (*write_data)(uint8_t *data, int32_t len);              /*!< 写数据到设备 */

    int32_t (*get_data_length)(void);                               /*!< 获取接收数据的长度 */
    bool (*wait_write_complete)(int32_t timeout_msec);              /*!< 等待写数据结束 */
} esp_at_device_ops_struct;

/*
 *@brief esp_at_custom_net_ops_struct
 *网络接收函数结构 for AT
 *
 */
typedef struct {
    int32_t (*recv_data)(uint8_t*data,int32_t len);
    void (*connect_cb)(void);
    void (*disconnect_cb)(void);
} esp_at_custom_net_ops_struct;

/**
 * @brief esp_at_status
 *  some custom function interacting with AT
 *
 */
typedef enum {
    ESP_AT_STATUS_NORMAL = 0x0,                /*!< 一般模式.mcu 可以发送AT command */
    ESP_AT_STATUS_TRANSMIT,                    /*!<透传模式 */

} esp_at_status_type;

/**
 * @brief esp_at_ops_struct
 *  AT的用户函数接口
 *
 */
typedef struct {
    void (*status_callback) (esp_at_status_type status);              /*!< callback when AT status changes */
    void (*pre_deepsleep_callback) (void);                            /*!< callback before enter deep sleep */
    void (*pre_restart_callback) (void);
} esp_at_custom_ops_struct;

/**
 * @AT特定的回调类型
 *
 */
typedef void (*esp_at_port_specific_callback_t) (void);
// error number
/**
 * @brief module number,Now just AT module
 *
 */
typedef enum {
    ESP_AT_MODULE_NUM = 0x01
} esp_at_module;

/**
 * @brief 子类别编号
 *
 */
typedef enum {
    ESP_AT_SUB_OK                       = 0x00,              /*!< OK */
    ESP_AT_SUB_COMMON_ERROR             = 0x01,
    ESP_AT_SUB_NO_TERMINATOR            = 0x02,              /*!<  不以 "\r\n"结束 */
    ESP_AT_SUB_NO_AT                    = 0x03,              /*!<  没有发现 AT or at or At or aT */
    ESP_AT_SUB_PARA_LENGTH_MISMATCH     = 0x04,              /*!<  参数长度不匹配 */
    ESP_AT_SUB_PARA_TYPE_MISMATCH       = 0x05,              /*!<  参数长度不匹配 */
    ESP_AT_SUB_PARA_NUM_MISMATCH        = 0x06,              /*!<  参数长度不匹配 */
    ESP_AT_SUB_PARA_INVALID             = 0x07,
    ESP_AT_SUB_PARA_PARSE_FAIL          = 0x08,              /*!<  解析参数失败 */
    ESP_AT_SUB_UNSUPPORT_CMD            = 0x09,
    ESP_AT_SUB_CMD_EXEC_FAIL            = 0x0A,
    ESP_AT_SUB_CMD_PROCESSING           = 0x0B,              /*!<  上一个命令正在处理 */
    ESP_AT_SUB_CMD_OP_ERROR             = 0x0C,
} esp_at_error_code;

#define ESP_AT_ERROR_NO(subcategory,extension)  \
        ((ESP_AT_MODULE_NUM << 24) | ((subcategory) << 16) | (extension))

#define ESP_AT_CMD_ERROR_OK                                   ESP_AT_ERROR_NO(ESP_AT_SUB_OK,0x00)
#define ESP_AT_CMD_ERROR_NON_FINISH                           ESP_AT_ERROR_NO(ESP_AT_SUB_NO_TERMINATOR,0x00)
#define ESP_AT_CMD_ERROR_NOT_FOUND_AT                         ESP_AT_ERROR_NO(ESP_AT_SUB_NO_AT,0x00)
#define ESP_AT_CMD_ERROR_PARA_LENGTH(which_para)              ESP_AT_ERROR_NO(ESP_AT_SUB_PARA_LENGTH_MISMATCH,which_para)
#define ESP_AT_CMD_ERROR_PARA_TYPE(which_para)                ESP_AT_ERROR_NO(ESP_AT_SUB_PARA_TYPE_MISMATCH,which_para)
#define ESP_AT_CMD_ERROR_PARA_NUM(need,given)                 ESP_AT_ERROR_NO(ESP_AT_SUB_PARA_NUM_MISMATCH,(((need) << 8) | (given)))
#define ESP_AT_CMD_ERROR_PARA_INVALID(which_para)             ESP_AT_ERROR_
/home/fujiayu/esp/esp-idf/tools/check_python_dependencies.py:12: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html import pkg_resources Executing action: flash Running ninja in directory /home/fujiayu/esp/hello_world/build Executing "ninja flash"... [1/5] cd /home/fujiayu/esp/hello_world.../esp/hello_world/build/hello_world.bin hello_world.bin binary size 0x31ee0 bytes. Smallest app partition is 0x100000 bytes. 0xce120 bytes (80%) free. [1/1] cd /home/fujiayu/esp/hello_world..._world/build/bootloader/bootloader.bin Bootloader binary size 0x5290 bytes. 0x2d70 bytes (35%) free. [2/3] cd /home/fujiayu/esp/esp-idf/com...nents/esptool_py/run_serial_tool.cmake esptool esp32s3 -p /dev/ttyACM0 -b 460800 --before=default_reset --after=hard_reset write_flash --flash_mode dio --flash_freq 80m --flash_size 2MB 0x0 bootloader/bootloader.bin 0x10000 hello_world.bin 0x8000 partition_table/partition-table.bin esptool.py v4.6.2 Serial port /dev/ttyACM0 A fatal error occurred: Could not open /dev/ttyACM0, the port doesn't exist CMake Error at run_serial_tool.cmake:66 (message): /home/fujiayu/.espressif/python_env/idf5.2_py3.8_env/bin/python;;/home/fujiayu/esp/esp-idf/components/esptool_py/esptool/esptool.py;--chip;esp32s3 failed. FAILED: CMakeFiles/flash cd /home/fujiayu/esp/esp-idf/components/esptool_py && /usr/bin/cmake -D IDF_PATH=/home/fujiayu/esp/esp-idf -D "SERIAL_TOOL=/home/fujiayu/.espressif/python_env/idf5.2_py3.8_env/bin/python;;/home/fujiayu/esp/esp-idf/components/esptool_py/esptool/esptool.py;--chip;esp32s3" -D "SERIAL_TOOL_ARGS=--before=default_reset;--after=hard_reset;write_flash;@flash_args" -D WORKING_DIRECTORY=/home/fujiayu/esp/hello_world/build -P /home/fujiayu/esp/esp-idf/components/esptool_py/run_serial_tool.cmake ninja: build stopped: subcommand failed. ninja failed with exit code 1, output of the command is in the /home/fujiayu/esp/hello_world/build/log/idf_py_stderr_output_21690 and /home/fujiayu/esp/hello_world/build/log/idf_py_stdout_output_21690
07-07
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值