Wi-Fi 库支持配置及监控 ESP32 Wi-Fi 连网功能。
WiFi工作模式1. 基站模式(即 STA 模式或 Wi-Fi 客户端模式),此时 ESP32 连接到接入点 (AP)。
2. AP 模式(即 Soft-AP 模式或接入点模式),此时基站连接到 ESP32。
3. AP-STA 共存模式(ESP32 既是接入点,同时又作为基站连接到另外一个接入点)。
4. 上述模式的各种安全模式(WPA、WPA2 及 WEP 等)。
5. 扫描接入点(包括主动扫描及被动扫描)。
6. 使用混杂模式监控 IEEE802.11 Wi-Fi 数据包。
常用功能头文件
components/esp_wifi/include/esp_wifi.h
esp_err_t esp_wifi_init(const wifi_init_config_t *config)
初始化WiFi为WiFi驱动程序分配资源,如WiFi控制结构,RX/TX缓冲区,WiFi NVS结构等。此 WiFi 也会启动 WiFi 任务。
**注意**必须先调用此 API,然后才能调用所有其他 WiFi API
参数:config:配置 – 指向 WiFi 初始化配置结构的指针;可以指向临时变量
返回值:
ESP_OK:成功
ESP_ERR_NO_MEM:内存不足
其他
const wifi_init_config_t *config
wifi初始化配置结构体。
#define WIFI_INIT_CONFIG_DEFAULT() { \
.event_handler = &esp_event_send_internal, \
.osi_funcs = &g_wifi_osi_funcs, \
.wpa_crypto_funcs = g_wifi_default_wpa_crypto_funcs, \
.static_rx_buf_num = CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM,\
.dynamic_rx_buf_num = CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM,\
.tx_buf_type = CONFIG_ESP32_WIFI_TX_BUFFER_TYPE,\
.static_tx_buf_num = WIFI_STATIC_TX_BUFFER_NUM,\
.dynamic_tx_buf_num = WIFI_DYNAMIC_TX_BUFFER_NUM,\
.cache_tx_buf_num = WIFI_CACHE_TX_BUFFER_NUM,\
.csi_enable = WIFI_CSI_ENABLED,\
.ampdu_rx_enable = WIFI_AMPDU_RX_ENABLED,\
.ampdu_tx_enable = WIFI_AMPDU_TX_ENABLED,\
.amsdu_tx_enable = WIFI_AMSDU_TX_ENABLED,\
.nvs_enable = WIFI_NVS_ENABLED,\
.nano_enable = WIFI_NANO_FORMAT_ENABLED,\
.rx_ba_win = WIFI_DEFAULT_RX_BA_WIN,\
.wifi_task_core_id = WIFI_TASK_CORE_ID,\
.beacon_max_len = WIFI_SOFTAP_BEACON_MAX_LEN, \
.mgmt_sbuf_num = WIFI_MGMT_SBUF_NUM, \
.feature_caps = g_wifi_feature_caps, \
.sta_disconnected_pm = WIFI_STA_DISCONNECTED_PM_ENABLED, \
.magic = WIFI_INIT_CONFIG_MAGIC\
}
默认配置,如果要设置自己的初始值,请覆盖WIFI_INIT_CONFIG_DEFAULT设置的默认值。
配置示例:
static void WiFi_init(void){
wifi_init_config_t inf = WIFI_INIT_CONFIG_DEFAULT();
esp_wifi_init(&inf);
}
设置 ESP32 STA 或 AP 的配置
esp_err_t esp_wifi_set_config(wifi_interface_t interface, wifi_config_t *conf)
参数:
interface:
STA模式下:WIFI_IF_STA
AP模式下:WIFI_IF_AP
conf:
wifi_config_t结构体,如果是STA模式,则配置要连接WiFi的ssid、
Password和连接方式;如果是AP模式,则配置释放的WiFi的SSID和Password等参数
返回值:
ESP_OK:成功
ESP_ERR_WIFI_NOT_INIT:WiFi 未通过esp_wifi_init初始化
ESP_ERR_INVALID_ARG:参数无效
ESP_ERR_WIFI_IF:接口无效
ESP_ERR_WIFI_MODE:无效模式
ESP_ERR_WIFI_PASSWORD:密码无效
ESP_ERR_WIFI_NVS:WiFi 内部 NVS 错误
其他:参考 esp_err.h 中的 ERRO 代码
esp32的WiFi常用工作模式有三种分别是AP,STA和AP STA共存模式。在初始化WiFi之后需要设置WiFi的工作模式,使用函数: **esp_err_t esp_wifi_set_mode(wifi_mode_t mode)**
esp_err_t esp_wifi_set_mode(wifi_mode_t mode)
参数:mode
WIFI_MODE_NULL = 0, /**< null mode */
WIFI_MODE_STA, /**< WiFi station mode */
WIFI_MODE_AP, /**< WiFi soft-AP mode */
WIFI_MODE_APSTA, /**< WiFi station soft-AP mode */
WIFI_MODE_MAX
返回值:
ESP_OK:成功
ESP_ERR_WIFI_NOT_INIT:WiFi 未通过esp_wifi_init初始化
ESP_ERR_INVALID_ARG:参数无效
其他:请参阅 esp_err.h 中的错误代码
ESP32设置为STA模式时使用函数**esp_err_t esp_wifi_connect(void)** 连接WiFi
esp_err_t esp_wifi_connect(void)
参数:无
返回值:
ESP_OK:成功
ESP_ERR_WIFI_NOT_INIT:WiFi 未通过esp_wifi_init初始化
ESP_ERR_WIFI_NOT_STARTED:esp_wifi_start无法启动 WiFi
ESP_ERR_WIFI_CONN:WiFi 内部错误、工作站或软 AP 控制块错误
ESP_ERR_WIFI_SSID:工作站连接的AP的SSID无效
根据当前配置启动WiFi,如何WiFi模式为**WIFI_MODE_STA** 则启动站控制块并启动站;如果WiFi模式为**WIFI_MODE_AP** 则创建软AP控制块并启动软AP 如果模式WIFI_MODE_APSTA,则创建软AP和站控制块并启动软AP和站
esp_err_t esp_wifi_start(void)
参数:无
返回值:
ESP_OK:成功
ESP_ERR_WIFI_NOT_INIT:WiFi 未通过esp_wifi_init初始化
ESP_ERR_INVALID_ARG:参数无效
ESP_ERR_NO_MEM:内存不足
ESP_ERR_WIFI_CONN:WiFi 内部错误、工作站或软 AP 控制块错误
ESP_FAIL:其他 WiFi 内部错误
更多API参考官网: [乐鑫文档——WiFi配置](https://docs.espressif.com/projects/esp-idf/zh_CN/v4.4.3/esp32/api-reference/network/esp_wifi.html)
实例1:配置esp32为STA模式,连接到WiFi
#include <stdio.h>
#include "esp_system.h"
#include "FreeRTOS/FreeRTOS.h"
#include "freertos/task.h"
#include "nvs_flash.h"
#include "esp_log.h"
#include "esp_wifi.h"
const static char *TAG = "WIFI";
static void System_Init(void);
static void WiFi_init(void);
void app_main(void){
ESP_LOGI(TAG,"System initilation");
System_Init();
ESP_LOGI(TAG,"WiFi initilation");
WiFi_init();
while (1){
vTaskDelay(500 / portTICK_PERIOD_MS);
ESP_LOGI(TAG, "...");
}
}
static void System_Init(void){
esp_err_t ret = nvs_flash_init();
if(ret==ESP_ERR_NVS_NOT_FOUND || ret == ESP_ERR_NVS_NEW_VERSION_FOUND){
ESP_ERROR_CHECK(ret);
ret = nvs_flash_init();
}
ESP_ERROR_CHECK(ret);
}
static void WiFi_init(void){
wifi_init_config_t inf = WIFI_INIT_CONFIG_DEFAULT();
esp_wifi_init(&inf);
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
wifi_config_t conf = {
.sta={
.ssid="FAST_FFBD",
.password="123456789",
.threshold.authmode=WIFI_AUTH_WPA2_PSK
}
};
ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA,&conf));
ESP_ERROR_CHECK(esp_wifi_start());
ESP_ERROR_CHECK(esp_wifi_connect());
}
运行结果:
在输出日志WiFi:connected中,看到已经成功连接上WiFi。
,