一. 基本介绍

1.配置结构体

1.1 wifi_init_config_t

/**  
 * @brief WiFi 堆栈配置参数,传递给 esp_wifi_init 调用。  
 */  
typedef struct {  
    wifi_osi_funcs_t*      osi_funcs;              /**< WiFi OS 函数 */  
    wpa_crypto_funcs_t     wpa_crypto_funcs;       /**< 连接时 WiFi 站点加密函数 */  
    int                    static_rx_buf_num;      /**< WiFi 静态 RX 缓冲区数量 */  
    int                    dynamic_rx_buf_num;     /**< WiFi 动态 RX 缓冲区数量 */  
    int                    tx_buf_type;            /**< WiFi TX 缓冲区类型 */  
    int                    static_tx_buf_num;      /**< WiFi 静态 TX 缓冲区数量 */  
    int                    dynamic_tx_buf_num;     /**< WiFi 动态 TX 缓冲区数量 */  
    int                    rx_mgmt_buf_type;       /**< WiFi RX 管理缓冲区类型 */  
    int                    rx_mgmt_buf_num;        /**< WiFi RX 管理缓冲区数量 */  
    int                    cache_tx_buf_num;       /**< WiFi TX 缓存缓冲区数量 */  
    int                    csi_enable;             /**< WiFi 信道状态信息使能标志 */  
    int                    ampdu_rx_enable;        /**< WiFi AMPDU RX 功能使能标志 */  
    int                    ampdu_tx_enable;        /**< WiFi AMPDU TX 功能使能标志 */  
    int                    amsdu_tx_enable;        /**< WiFi AMSDU TX 功能使能标志 */  
    int                    nvs_enable;             /**< WiFi NVS 闪存使能标志 */  
    int                    nano_enable;            /**< printf/scan 系列的 Nano 选项使能标志 */  
    int                    rx_ba_win;              /**< WiFi 区块确认 RX 窗口大小 */  
    int                    wifi_task_core_id;      /**< WiFi 任务核心 ID */  
    int                    beacon_max_len;         /**< WiFi softAP 信标的最大长度 */  
    int                    mgmt_sbuf_num;          /**< WiFi 管理短缓冲区数量,最小值为 6,最大值为 32 */  
    uint64_t               feature_caps;           /**< 启用额外的 WiFi 特性和功能 */  
    bool                   sta_disconnected_pm;    /**< WiFi 处于断开状态时的站点电源管理 */  
    int                    espnow_max_encrypt_num; /**< espnow 支持的最大加密对数 */  
    int                    magic;                  /**< WiFi 初始化魔数,它应该是最后一个字段 */  
} wifi_init_config_t;
  • 这个结构体我们一般调用这个宏来进行默认配置WIFI_INIT_CONFIG_DEFAULT()

1.2 wifi_config_t

 */
typedef union {
    wifi_ap_config_t  ap;  /**< configuration of AP */
    wifi_sta_config_t sta; /**< configuration of STA */
    wifi_nan_config_t nan; /**< configuration of NAN */
} wifi_config_t;
  • wifi_ap_config_t ap 表示AP(接入点)的配置。
  • wifi_sta_config_t sta 表示STA(站点)的配置。
  • wifi_nan_config_t nan 示NAN(邻近区域网络)的配置。

2.常用API

需要包含头文件 #include "esp_wifi.h"

2.1 esp_netif_init

void esp_netif_init()

  • 参数
  • 作用
    • 初始化IWip协议栈
  • 返回值

2.2 esp_event_loop_create_default

esp_event_loop_create_default()

  • 参数
  • 作用
    • 创建事件系统循环,因为wifi连接的过程中会出现各种事件,这些事件都是通过回调函数来通知我们的
  • 返回值

2.3 esp_event_loop_create_default

** esp_netif_t* esp_netif_create_default_wifi_sta(void) **

  • 参数
  • 作用
    • 创建STA,只有创建了STA,我们才能使用STA模式
  • 返回值
    • esp_netif_t* 网卡对象

2.4 esp_event_loop_create_default

** esp_err_t esp_wifi_init(const wifi_init_config_t *config) **

  • 参数
    • const wifi_init_config_t *config:wifi_init_config_t结构体
  • 作用
    • 初始化wifi配置,并返回配置状态
  • 返回值
    • esp_err_t:错误类型

2.5 esp_event_handler_register

esp_err_t esp_event_handler_register(esp_event_base_t event_base, int32_t event_id,
    esp_event_handler_t event_handler, void* event_handler_arg)
  • 参数
    • esp_event_base_t event_base:事件类型有有WIFI_EVENT(宏),ip事件IP_EVENT
    • int32_t event_id:事件id,也就是监听那些事件,我们可以输入宏ESP_EVENT_ANY_ID也就是所有事件都监听。
    • esp_event_handler_t event_handler:回调函数的地址
    • void* event_handler_arg:要传入给回调函数的参数,没有就填·NULL
  • 作用
    • 创建回调函数
  • 返回值
    • esp_err_t:错误类型

2.6 esp_wifi_set_mode

esp_err_t esp_wifi_set_mode(wifi_mode_t mode);
  • 参数
    • wifi_mode_t mode:要设置的模式,有WIFI_MODE_STA
  • 作用
    • 设置wifi模式
  • 返回值
    • esp_err_t:错误类型

2.7 esp_wifi_set_config

esp_err_t esp_wifi_set_config(wifi_interface_t interface, wifi_config_t *conf);
  • 参数
    • wifi_interface_t interface:STA的网卡
    • wifi_config_t *conf:wifi_config_t的配置结构体
  • 作用
    • 配置wifi参数
  • 返回值
    • esp_err_t:错误类型

2.7 esp_wifi_start

esp_err_t esp_wifi_start(void);
  • 参数
  • 作用
    • 启动wifi
  • 返回值
    • esp_err_t:错误类型

2.7 esp_wifi_connect

esp_err_t esp_wifi_connect(void);
  • 参数
  • 作用
    • 连接wifi
  • 返回值
    • esp_err_t:错误类型

3.宏定义与枚举

3.1 WIFI事件

/** WiFi事件声明 */  
typedef enum {  
    WIFI_EVENT_WIFI_READY = 0,           /**< WiFi准备就绪 */  
    WIFI_EVENT_SCAN_DONE,                /**< 扫描接入点完成 */  
    WIFI_EVENT_STA_START,                /**< 站点启动 */  
    WIFI_EVENT_STA_STOP,                 /**< 站点停止 */  
    WIFI_EVENT_STA_CONNECTED,            /**< 站点已连接到接入点 */  
    WIFI_EVENT_STA_DISCONNECTED,         /**< 站点已从接入点断开 */  
    WIFI_EVENT_STA_AUTHMODE_CHANGE,      /**< 设备连接的接入点的认证模式发生变化 */  

    WIFI_EVENT_STA_WPS_ER_SUCCESS,       /**< 站点WPS在登记模式下成功 */  
    WIFI_EVENT_STA_WPS_ER_FAILED,        /**< 站点WPS在登记模式下失败 */  
    WIFI_EVENT_STA_WPS_ER_TIMEOUT,       /**< 站点WPS在登记模式下超时 */  
    WIFI_EVENT_STA_WPS_ER_PIN,           /**< 站点WPS在登记模式下的PIN码 */  
    WIFI_EVENT_STA_WPS_ER_PBC_OVERLAP,   /**< 站点WPS在登记模式下的重叠 */  

    WIFI_EVENT_AP_START,                 /**< Soft-AP启动 */  
    WIFI_EVENT_AP_STOP,                  /**< Soft-AP停止 */  
    WIFI_EVENT_AP_STACONNECTED,          /**< 一台站点已连接到Soft-AP */  
    WIFI_EVENT_AP_STADISCONNECTED,       /**< 一台站点已从Soft-AP断开 */  
    WIFI_EVENT_AP_PROBEREQRECVED,        /**< 在Soft-AP接口中接收到探测请求包 */  

    WIFI_EVENT_FTM_REPORT,               /**< 接收到FTM程序的报告 */  

    /* 仅在此之后添加下一个事件 */  
    WIFI_EVENT_STA_BSS_RSSI_LOW,         /**< 接入点的RSSI低于配置阈值 */  
    WIFI_EVENT_ACTION_TX_STATUS,         /**< Action Tx操作的状态指示 */  
    WIFI_EVENT_ROC_DONE,                 /**< 保持频道操作完成 */  

    WIFI_EVENT_STA_BEACON_TIMEOUT,       /**< 站点信标超时 */  

    WIFI_EVENT_CONNECTIONLESS_MODULE_WAKE_INTERVAL_START,   /**< 无连接模块唤醒间隔开始 */  

    WIFI_EVENT_AP_WPS_RG_SUCCESS,       /**< Soft-AP WPS在注册模式下成功 */  
    WIFI_EVENT_AP_WPS_RG_FAILED,        /**< Soft-AP WPS在注册模式下失败 */  
    WIFI_EVENT_AP_WPS_RG_TIMEOUT,       /**< Soft-AP WPS在注册模式下超时 */  
    WIFI_EVENT_AP_WPS_RG_PIN,           /**< Soft-AP WPS在注册模式下的PIN码 */  
    WIFI_EVENT_AP_WPS_RG_PBC_OVERLAP,   /**< Soft-AP WPS在注册模式下的重叠 */  

    WIFI_EVENT_ITWT_SETUP,              /**< iTWT设置 */  
    WIFI_EVENT_ITWT_TEARDOWN,           /**< iTWT拆除 */  
    WIFI_EVENT_ITWT_PROBE,              /**< iTWT探测 */  
    WIFI_EVENT_ITWT_SUSPEND,            /**< iTWT挂起 */  

    WIFI_EVENT_NAN_STARTED,              /**< NAN发现已启动 */  
    WIFI_EVENT_NAN_STOPPED,              /**< NAN发现已停止 */  
    WIFI_EVENT_NAN_SVC_MATCH,            /**< 找到NAN服务发现匹配 */  
    WIFI_EVENT_NAN_REPLIED,              /**< 对NAN对等体的服务发现匹配进行了回复 */  
    WIFI_EVENT_NAN_RECEIVE,              /**< 接收到后续消息 */  
    WIFI_EVENT_NDP_INDICATION,           /**< 接收到来自NAN对等体的NDP请求 */  
    WIFI_EVENT_NDP_CONFIRM,              /**< NDP确认指示 */  
    WIFI_EVENT_NDP_TERMINATED,           /**< NAN数据通路终止指示 */  

    WIFI_EVENT_MAX,                      /**< 无效的WiFi事件ID */  
} wifi_event_t;


3.2 IP事件声明

/** IP事件声明 */  
typedef enum {  
    IP_EVENT_STA_GOT_IP,               /*!< 站点从连接的接入点获取IP */  
    IP_EVENT_STA_LOST_IP,              /*!< 站点丢失IP,且IP重置为0 */  
    IP_EVENT_AP_STAIPASSIGNED,         /*!< Soft-AP分配IP给已连接的站点 */  
    IP_EVENT_GOT_IP6,                  /*!< 站点、AP或以太网接口获得首选的IPv6地址 */  
    IP_EVENT_ETH_GOT_IP,               /*!< 以太网从连接的接入点获取IP */  
    IP_EVENT_ETH_LOST_IP,              /*!< 以太网丢失IP,且IP重置为0 */  
    IP_EVENT_PPP_GOT_IP,               /*!< PPP接口获取IP */  
    IP_EVENT_PPP_LOST_IP,              /*!< PPP接口丢失IP */  
} ip_event_t;

3.3 smartconfig

/** Smartconfig事件声明 */  
typedef enum {  
   SC_EVENT_SCAN_DONE,                /*!< 站点的Smartconfig已完成对接入点的扫描 */  
   SC_EVENT_FOUND_CHANNEL,            /*!< 站点的Smartconfig已找到目标接入点的频道 */  
   SC_EVENT_GOT_SSID_PSWD,            /*!< 站点的Smartconfig已获取SSID和密码 */  
   SC_EVENT_SEND_ACK_DONE,            /*!< 站点的Smartconfig已向手机发送ACK */  
} smartconfig_event_t;
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐