ESP32_IDF的WIFI配网函数详解
** WiFi事件声明 */WIFI_EVENT_WIFI_READY = 0, /**< WiFi准备就绪 */WIFI_EVENT_SCAN_DONE, /**< 扫描接入点完成 */WIFI_EVENT_STA_START, /**< 站点启动 */WIFI_EVENT_STA_STOP, /**< 站点停止 */WIFI_EVENT_STA_CONNECTED, /**< 站点已连接到接入
·
一. 基本介绍
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;
更多推荐



所有评论(0)