问题背景:
在学习ESP32 AP热点部分时,发现其实很多网上说的获取客户端ip的方法都基本上没有用,原因是我使用的IDF版本是V5.3.1,很多获取客户端ip的接口都已经被弃用了:
在不降级IDF版本情况下,寻找解决办法:
在 ESP32 AP 模式 下,Wi-Fi 和 IP 事件的运作流程通过 ESP32 的 Wi-Fi 驱动 和 事件系统 管理。每当发生连接、分配 IP 地址或断开连接时,ESP32 都会通过事件机制通知用户,允许用户在事件处理函数中进行相应的操作,如打印日志、更新状态或进行其他应用逻辑。通过这些事件,用户可以非常方便地管理连接到 ESP32 AP 的客户端,并处理网络相关事件。为解决上面这个问题,我们同样要使用ESP32的事件处理系统来解决这个问题。
事件流程简述
-
客户端连接:当一个客户端(设备)连接到 ESP32 的 AP 时,Wi-Fi 驱动会触发
WIFI_EVENT_AP_STACONNECTED
事件,事件中会包含连接客户端的 MAC 地址。 -
IP 地址分配:一旦客户端连接成功并请求 IP 地址,ESP32 的 DHCP 服务器 会分配一个 IP 地址给客户端。在分配成功后,会触发
IP_EVENT_AP_STAIPASSIGNED
事件,事件中包含分配的 IP 地址。 -
客户端断开:当客户端断开时,会触发
WIFI_EVENT_AP_STADISCONNECTED
事件,事件中包含断开连接的客户端的 MAC 地址及断开原因。
在 AP 模式 下,Wi-Fi 相关事件主要包括:
WIFI_EVENT_AP_STACONNECTED:
当有客户端成功连接到 ESP32 AP 时触发。
事件数据包括连接设备的 MAC 地址 和 连接时间。
WIFI_EVENT_AP_STADISCONNECTED:
事件数据包括断开设备的 MAC 地址 和 断开原因。
当客户端断开连接时触发。
当客户端连接到 ESP32 的 AP 后,通常通过 DHCP 协议来获取 IP 地址。ESP32 AP 模式下的 DHCP 事件也会触发相应的事件,帮助我们获取客户端的 IP 地址。
在 AP 模式 下,IP 相关事件主要包括:
IP_EVENT_STA_GOT_IP:
当 STA(客户端) 获取到 IP 地址时触发。
事件数据包含 IP 地址、子网掩码 和 网关。
IP_EVENT_AP_STAIPASSIGNED:
当 AP 模式下,ESP32 向客户端分配了 IP 地址时触发。
事件数据包含客户端的 IP 地址 和 MAC 地址。
这些事件通常是通过 esp_event_handler_instance_register()
注册的回调函数进行处理。
示例:Wi-Fi 事件处理(参考于乐鑫的官方WIFI AP 示例代码基础上改进的)<