Wi-Fi 模式
ESP32 Wi-Fi AP 通用场景
下图为 AP 模式下的宏观场景,其中包含不同阶段的具体描述:
AP 模式下 Wi-Fi 事件场景示例
Wi-Fi Sniffer 模式
Wi-Fi Sniffer 模式可以通过 esp_wifi_set_promiscuous() 使能。如果使能 Sniffer 模式, 可以 向应用程序转储以下数据包。
802.11 管理帧
802.11 数据帧,包括 MPDU、AMPDU、AMSDU 等
802.11 MIMO 帧,Sniffer 模式仅转储 MIMO 帧的长度。
802.11 控制帧
802.11 CRC 错误帧
不可以 向应用程序转储以下数据包。
802.11 其它错误帧
对于 Sniffer 模式 可以 转储的帧,应用程序可以另外使用 esp_wifi_set_promiscuous_filter() 和 esp_wifi_set_promiscuous_ctrl_filter() 决定筛选哪些特定类型的数据包。应用程序默认筛选所有 802.11 数据和管理帧。如果你想要筛选 802.11 控制帧,esp_wifi_set_promiscuous_filter() 中的 filter 参数需要包含 “WIFI_PROMIS_FILTER_MASK_CTRL” 类型, 如果你想进一步区分 802.11 控制帧,那么调用 esp_wifi_set_promiscuous_ctrl_filter()。
可以在 WIFI_MODE_NULL、WIFI_MODE_STA、WIFI_MODE_AP、WIFI_MODE_APSTA 等 Wi-Fi 模式下使能 Wi-Fi Sniffer 模式。也就是说,当 station 连接到 AP,或者 AP 有 Wi-Fi 连接时,就可以使能。请注意,Sniffer 模式对 station/AP Wi-Fi 连接的吞吐量有 很大影响。通常,除非有特别原因,当 station/AP Wi-Fi 连接出现大量流量,不应使能。
该模式下还应注意回调函数 wifi_promiscuous_cb_t 的使用。该回调将直接在 Wi-Fi 驱动程序任务中进行,所以如果应用程序需处理大量过滤的数据包,建议在回调中向应用程序任务发布一个事件,把真正的工作推迟到应用程序任务中完成。
Wi-Fi AwareTM (NAN)
Wi-Fi AwareTM 或 NAN,即 Neighbor Awareness Networking (邻居感知网络,下文简称 NAN) 协议可以让 Wi-Fi 设备发现附近的其他设备。NAN 使用设备间直接通信,无需通过互联网或 AP 连接。
多个邻近的 NAN 设备组成一个 NAN 集群,集群中的设备可相互通信。同一集群中的 NAN 设备会同步时钟,并定期在信道 6 上互相监听。NAN 设备还可通过服务发现协议,在所处集群内提供(发布)或获取(订阅)服务。通过服务名称和匹配过滤器(可选),可以完成服务匹配。当订阅设备匹配到发布设备时,就可以发送信息(跟进)或与发布设备建立数据通路 (NDP)。NDP 建立后,订阅设备和发布设备都会获得一个 IPv6 地址用于通信。
注意,数据包发送是不加密的,无法保证 NDP 的安全性。NAN 为发现 (Discovery) 和数据通路单独的接口,该接口与 STA 和 AP 所用的接口不同。NAN 以独立模式运行,不支持与 STA 或 AP 接口共存。
要了解如何设置 NAN 发布设备和订阅设备,请参考 ESP-IDF 示例:examples/wifi/wifi_aware/nan_publisher/README.md 和 examples/wifi/wifi_aware/nan_subscriber/README.md。
非同步服务发现 (USD)
非同步服务发现 (USD) 是一种机制,可让设备在新的设备进入射频环境时发现其提供的可用服务,而无需设备之间进行同步。
USD 通过发布 (Publish) 及跟进消息 (Follow-up message) 中的 SDEA 的服务信息 (Service Info) 字段来传递服务相关信息。
要了解如何设置 NAN-USD 发布设备和订阅设备,请参考 ESP-IDF 示例:examples/wifi/wifi_aware/usd_publisher/README.md 和 examples/wifi/wifi_aware/usd_subscriber/README.md。
