admin管理员组文章数量:1619293
本文章 来自原创专栏《ESP32教学专栏 (基于ESP-IDF)》,讲解如何使用 ESP-IDF 构建 ESP32 程序,发布文章并会持续为已发布文章添加新内容! 每篇文章都经过了精打细磨!
↓↓↓通过下方对话框进入专栏目录页↓↓↓
CSDN 请求进入目录 _ O x
是否进入ESP32教学导航(基于ESP-IDF)?
确定
文章目录
-
- 一、ESP32 WIFI介绍
- 二、WiFi 的启动(STA 及 AP 模式)
-
- 1. WiFi STA 模式(连接到其他设备的热点)
-
- (1) 步骤及API简介
- (2) 分步讲解
- (3) 完整代码示例
- 2. WiFi AP 模式(ESP32作为热点供其他设备链接)
- 三、STA模式下扫描外部WiFi
-
- 1. 步骤
- 2. 代码示例
一、ESP32 WIFI介绍
Wi-Fi 库支持配置及监控 ESP32 Wi-Fi 连网功能。
支持配置:
-
基站模式(即 STA 模式或 Wi-Fi 客户端模式),此时 ESP32 连接到接入点 (AP)。
-
AP 模式(即 Soft-AP 模式或接入点模式),此时基站连接到 ESP32。
-
AP-STA 共存模式(ESP32 既是接入点,同时又作为基站连接到另外一个接入点)。
-
上述模式的各种安全模式(WPA、WPA2 及 WEP 等)。
-
扫描接入点(包括主动扫描及被动扫描)。
-
使用混杂模式监控 IEEE802.11 Wi-Fi 数据包。
二、WiFi 的启动(STA 及 AP 模式)
1. WiFi STA 模式(连接到其他设备的热点)
(1) 步骤及API简介
① 初始化nvs_flash
② 初始化esp_netif
③ 创建事件循环event_loop
—— event_loop
是esp32库的一种事件处理模式,中文曰“事件循环”
④ 初始化、配置WiFi并启动
⑤ 事件处理(使用第③步创建的事件循环)
(2) 分步讲解
① 初始化nvs_flash
#include <nvs_flash.h>
/**
* @brief 用于初始化nvs
*/
void init_nvs() {
/*尝试初始化一次nvs_flash*/
esp_err_t err = nvs_flash_init();
if(err == ESP_ERR_NVS_NO_FREE_PAGES || err == ESP_ERR_NVS_NEW_VERSION_FOUND){
/*第一次初始化失败, 检查错误, 处理错误, 重新初始化*/
nvs_flash_erase();
err = nvs_flash_init();
}
ESP_ERROR_CHECK(err);
}
② 初始化event_loop
#include "esp_event.h"
esp_event_loop_create_default();
esp_event_handler_instance_register(WIFI_EVENT, ESP_EVENT_ANY_ID,
想要用于处理事件的函数, NULL, &wifi_handler);
esp_event_handler_instance_register(IP_EVENT, IP_EVENT_STA_GOT_IP,
想要用于处理时间的函数, NULL, &ip_handler));
代码解析:
- ①
esp_event_loop_create_default();
函数用于创建一个默认的事件循环(同一个esp32程序中可以有多个event_loop
,这里使用默认的事件循环) - ②
esp_event_handler_instance_register()
函数解析见下:
函数名 | esp_event_handler_instance_register() |
---|---|
函数原型 | esp_err_t esp_event_handler_instance_register(esp_event_base_t event_base, int32_t event_id, esp_event_handler_t event_handler, void *event_handler_arg, esp_event_handler_instance_t *instance) |
含义 | 将事件处理程序的实例注册到默认循环。 |
返回值 | esp_err_t |
参数 | event_base类型为:esp_event_base_t ;表示 事件基,代表事件的大类(如WiFi事件,IP事件等)event_id类型为: int32_t ;表示事件ID,即事件基下的一个具体事件(如WiFi连接丢失,IP成功获取)event_handler类型为: esp_event_handler_t ;表示一个handler函数(模板请见第⑤步)*event_handler_arg类型为: void ;表示需要传递给handler函数的参数*instance类型为: esp_event_handler_instance_t 指针;**[输出]**表示此函数注册的事件实例对象,用于生命周期管理(如删除unrigister 这个事件handler) |
③ 初始化esp_netif
#include "esp_netif.h"
esp_netif_t *pEsp_wifi_netif;
esp_netif_init();
/*创建wifi sta模式的默认netif, 返回一个指针*/
pEsp_wifi_netif = esp_netif_create_default_wifi_sta();
/* (非必须) 这行代码是修改ESP32的主机名, 即WiFi设备名, 连接其他WiFi时显示的名称 */
esp_netif_set_hostname(esp_wifi_netif, "Augtons");// 不建议使用汉字
上述代码第 6 行函数esp_netif_create_default_wifi_sta()
是必要的,只不过函数返回值可以在不需要的时候忽略(本文我们借助这个创建得到的esp_netif
对象来修改了主机名为Augtons
,因此保留了这个返回值)
④ 初始化、配置WiFi并启动
注意:下文的代码实例只展示了最简单的wifi连接代码,实际上第4行配置的结构体下的sta还有很多成员,这里不再细讲
#include "driver/wifi.h"
/* 第一步, WiFi初始化 */
/*
这个宏 WIFI_INIT_CONFIG_DEFAULT() 可以初始化一
个wifi_init_config(wifi初始化配置)结构体为默认值
*/
wifi_init_config_t wifi_init_config = WIFI_INIT_CONFIG_DEFAULT(
版权声明:本文标题:ESP32 之 ESP-IDF 教学(十一)WiFi篇—— WiFi两种模式 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1728798918a1174306.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论