当前位置: 首页 > news >正文

ESP32- 项目应用1 智能手表之更新时间 #3

1 ESP32 WIFI 介绍

WiFi 主要有两种模式:STA 和 AP 模式。AP 模式即无线接入点,是我们常说的手机热点,被其他设备连接;STA 模式即 Station,是连接热点的设备。另外,ESP32S3 可支持 STA 和 AP两种模式共存,就像手机那样可以开热点,也可以连接其他热点。

WiFi 库支持配置及监控 ESP32S3 Wi-Fi 连网功能。支持配置:
①:Station 模式(即 STA 模式或 WiFi 客户端模式),此时 ESP32 S3 连接到接入点 (AP)。
②:AP 模式(即 Soft-AP 模式或接入点模式),此时基站连接到 ESP32S3 设备。
③:Station/AP 共存模式(ESP32S3 既是接入点,同时又作为基站连接到另外一个接入点)。
④:上述模式的各种安全模式(WPA、WPA2 及 WEP 等)。
⑤:扫描接入点(包括主动扫描及被动扫描)。
⑥:使用混杂模式监控 IEEE802.11 Wi-Fi 数据包

1.1 WiFi-AP 启动流程

在这里插入图片描述
上图展示了 ESP32 系列芯片以 AP 模式开启 WiFi 的启动流程。首先,系统需要对 lwIP 协议栈进行初始化。接着,创建一个任务,该任务将用于触发相应的事件。然后,配置 WiFi 参数和AP 模式参数。最后,启动 WiFi,从而完成以 AP 模式开启 WiFi 的操作。

1.2 WiFi-STA 启动流程

在这里插入图片描述
上图展示了 ESP32 系列芯片以 STA 模式开启 WiFi 的启动流程。首先,系统需要创建定时器和事件组,并对 lwIP 协议栈进行初始化。接着,创建一个任务,该任务将用于触发相应的事件。然后,配置 WiFi 参数和 STA 模式参数。最后,启动 WiFi,从而完成以 STA 模式开启 WiFi的操作。

2 esp32 wifi 配置

2.1.1 初始化 NVS 存储系统

ESP_ERROR_CHECK(nvs_flash_init());

ESP32 会使用 NVS(Non-Volatile Storage) 存储 Wi-Fi 配置信息。
如果你使用 esp_wifi_set_config() 设置了 WIFI_CONFIG,它可能会保存到 NVS 中。
必须在使用 Wi-Fi 前初始化 NVS。

2.1.2 初始化 TCP/IP 协议栈

ESP_ERROR_CHECK(esp_netif_init());

初始化 esp-netif 网络接口模块,它取代了旧版本中的 tcpip_adapter。
是实现 DHCP、IP 地址分配等的基础。

2.1.3 创建默认事件循环

ESP_ERROR_CHECK(esp_event_loop_create_default());

用于后续处理各种 Wi-Fi 和 IP 相关的异步事件,比如连接成功、断开、获取 IP 等。
事件机制是 ESP-IDF 的核心特性之一。

2.1.4 创建默认的 STA 接口(Station 模式)

esp_netif_create_default_wifi_sta();

创建一个默认的 esp-netif 实例,用于 Wi-Fi STA 模式。
你可以认为这是将 ESP32 设置为“客户端”,连接到热点。

2.1.5 初始化 Wi-Fi 驱动

wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
ESP_ERROR_CHECK(esp_wifi_init(&cfg));

加载 Wi-Fi 驱动,包括内核任务、缓冲区、内部状态等。

WIFI_INIT_CONFIG_DEFAULT() 提供默认配置。

2.1.6 注册 Wi-Fi/IP 事件回调函数

esp_event_handler_instance_register(WIFI_EVENT, ...)
esp_event_handler_instance_register(IP_EVENT, ...)

注册处理器,用于监听并处理事件,比如:

Wi-Fi 启动 (WIFI_EVENT_STA_START)

断线重连 (WIFI_EVENT_STA_DISCONNECTED)

成功获取 IP (IP_EVENT_STA_GOT_IP)

2.1.7 配置要连接的 Wi-Fi 网络参数

wifi_config_t wifi_config = {.sta = {.ssid = WIFI_SSID
http://www.dtcms.com/a/296518.html

相关文章:

  • Linux系统常用命令
  • 浅析飞算JavaAI “撤回需求” 功能:让需求管理更灵活
  • 【C++】类和对象(中)
  • 【三桥君】Windows系统如何临时关闭“Windows安全中心实时保护”?解析Win10和Win11关闭方法
  • C++中std::string和std::string_view使用详解和示例
  • Lua(字符串)
  • 生成式人工智能展望报告-欧盟-03-经济影响
  • pyautogui 置信度问题
  • 拖拽同时支持Y轴滚动
  • 开立医疗2026年校园招聘
  • openbmc 日志系统继续分析
  • 行为型模式-协作与交互机制
  • 华为仓颉编程语言的表达式及其特点
  • mac llama_index agent算术式子计算示例
  • 力扣刷题(第九十七天)
  • 强化学习入门三(SARSA)
  • 专题:2025微短剧行业生态构建与跨界融合研究报告|附100+份报告PDF汇总下载
  • LeetCode 1695.删除子数组的最大得分:滑动窗口(哈希表)
  • 07 RK3568 Debian11 网络优先级
  • “抓了个寂寞”:一次实时信息采集的意外和修复
  • 网络基础19--OSPF路由协议(上)
  • 基于QT(C++)实现(图形界面)通讯录系统
  • JavaJSP
  • 【SpringAI实战】FunctionCalling实现企业级自定义智能客服
  • Qt 调用ocx的详细步骤
  • 单片机学习课程
  • 数据推荐丨海天瑞声7月数据集上新啦!
  • 海外红人营销的下一站:APP出海如何布局虚拟网红与UGC生态?
  • idea监控本地堆栈
  • Redis分布式锁的学习(八)