ESP32 您所在的位置:网站首页 esp32编译器 ESP32

ESP32

2023-07-19 18:58| 来源: 网络整理| 查看: 265

WiFi

Wi-Fi 库支持配置及监控 ESP32 Wi-Fi 连网功能。

WiFi工作模式 基站模式(即 STA 模式或 Wi-Fi 客户端模式),此时 ESP32 连接到接入点 (AP)。AP 模式(即 Soft-AP 模式或接入点模式),此时基站连接到 ESP32。AP-STA 共存模式(ESP32 既是接入点,同时又作为基站连接到另外一个接入点)。上述模式的各种安全模式(WPA、WPA2 及 WEP 等)。扫描接入点(包括主动扫描及被动扫描)。使用混杂模式监控 IEEE802.11 Wi-Fi 数据包。 常用功能

头文件

components/esp_wifi/include/esp_wifi.h WiFi初始化 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 代码 设置wifi工作模式

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 中的错误代码 连接wifi

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模式为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 #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()); }

运行结果: lbxcnrrn.png 在输出日志WiFi:connected中,看到已经成功连接上WiFi。

实例2

将ESP32WiFi设置为AP模式。

#include #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()); }

运行结果: lefie9db.png 可以看到ESP32的WiFi名称。 lefifavp.png



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有