赞
踩
Wi-Fi 库支持配置及监控 ESP32 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配置
实例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。
将ESP32WiFi设置为AP模式。
#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); static void app_main(void){ System_Init(); ESP_LOGI(TAG,"System initilation"); WiFi_Init(); ESP_LOGI(TAG,"WiFi initilation"); 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_NEW_VERSION_FOUND || ret == ESP_ERR_NVS_NO_FREE_PAGES){ ESP_ERROR_CHECK(ret); ret = nvs_flash_init(); } ESP_ERROR_CHECK(ret); } static void WiFi_Init(void){ wifi_init_config_t conf = WIFI_INIT_CONFIG_DEFAULT(); esp_wifi_init(&conf); ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_AP)); wifi_config_t con = { .ap={ .ssid="ESP-32", .password="123456789" } }; ESP_ERROR_CHECK(esp_wifi_set_config(&con)); ESP_ERROR_CHECK(esp_wifi_start()); }
运行结果:
可以看到ESP32的WiFi名称。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。