:link_to_translation:en:[English]
body {counter-reset: h2} h2 {counter-reset: h3} h2:before {counter-increment: h2; content: counter(h2) ". "} h3:before {counter-increment: h3; content: counter(h2) "." counter(h3) ". "} h2.nocount:before, h3.nocount:before, { content: ""; counter-increment: none }测试数据如下:
- 测试样板:ESP32-DevKitC V4。
- Wi-Fi 模式:station 模式。
- 物理层速率默认为 1 Mbps。
- open 环境下大约是 214 Kbps。
- 屏蔽箱内测试大约是 555 Kbps。
- 如要求更高速率,可以通过 esp_wifi_config_espnow_rate 进行配置。
- ESP-NOW 是由乐鑫定义的无连接通信协议。
- 在 ESP-NOW 中,应用程序数据被封装在各个供应商的动作帧中,在无连接的情况下,从一个 Wi-Fi 设备传输到另一个 Wi-Fi 设备。
- ESP-NOW 广泛应用于智能照明、远程控制、传感器等领域。
- 可以,但需要注意的是 ESP-NOW 的信道要和所连接的 AP 的信道相同。
使用 esp_wifi_config_espnow_rate() 函数进行配置即可,例如
esp_wifi_config_espnow_rate(WIFI_IF_STA, WIFI_PHY_RATE_MCS0_LGI)
。
使用广播包进行控制即可,目的地址包含在 payload 中,不受配对数量限制。仅需配置正确的广播地址即可。
这取决于具体的通信方式:
- 如使用单播包,支持同时最多配对并控制 20 个设备。
- 如使用 ESP-NOW 加密模式,支持同时最多配对并控制 6 个设备。
- 如使用广播包,仅需配置正确的广播地址即可。控制设备的数量理论上没有上限,但需考虑设备过多时的干扰问题。
ESP-NOW 的交互方式为直接从设备到设备进行通信,不需要通过路由器来转发数据。
- 最长长度目前不能修改。因为 ESP-NOW 使用动作帧中的供应商特定元素字段传输数据,802.11 协议规定一个供应商特定元素中的
长度
字段只有 1 个字节 (0xff = 255),因此限制了正文部分 ESP-NOW 数据长度,最长为 250 字节。- 或者您可以使用 API
esp_wifi_80211_tx()
发送数据,使用 sniffer 模式接收数据。这样同样可以实现只工作在 Wi-Fi 层并且不使用 TCP/IP 协议栈。
- 连接 Wi-Fi 以后不能再切换信道,只能在当前 Wi-Fi 信道收发数据。
- 如果设备进入 Modem-sleep 模式,将无法接受来自 ESP-NOW 的数据。
- 可使用如下方式来降低功耗:
- 若使用 ESP-IDF v5.0 以下版本的 SDK,可以在未连接 AP 的时候,通过 esp_now_set_wake_window() 和 esp_wifi_set_connectionless_wake_interval() 这两个函数设置唤醒的窗口和间隔,节省功耗。
- 若使用 ESP-IDF v5.0 版本或者最新的 master 版本,函数名称和含义有变化,可以在连接 AP 或者在未连接 AP 的时候,使用 esp_now_set_wake_window() 和 esp_wifi_connectionless_module_set_wake_interval() 这两个函数来设置醒来的窗口和间隔。
- 注意,需要在应用层设计时考虑发送端和接收端窗口同步的问题。芯片会在每个间隔醒来并工作设置好的窗口时间。此时,还需额外在 sdkconfig.defaults 里配置 CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE=y。
也可以使用 SoftAP + Station 的方式实现。主设备使用 Wi-Fi SoftAP 模式,同时与多个从设备(Wi-Fi Station)建立连接。
支持,请参考 ESP-NOW 文档。
- ESP-NOW 申请不需要任何特殊程序。
- 技术文档请阅读 ESP-NOW 用户指南,您可以使用 ESP-NOW SDK 示例进行测试。
- 默认的 ESP-NOW 比特率是 1 Mbps。
为什么使用 ESP32 测试 esp-idf/examples/wifi/espnow 例程,最多仅支持连接 7 个加密设备?
- 在 esp-now 应用中,ESP32 支持连接加密设备的数量不超过 17 个,默认值是 7 。请参见 “添加配对设备” 说明。
- 如果想要修改加密设备的数量,在 WiFi menuconfig 设置
CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM
。
- 可以使用 wifi_pkt_rx_ctrl_t 来获取对应的 RSSI。
- 可以通过修改 espnow_frame_head_t g_initiator_frame() 中的 .forward_ttl 和 .forward_rssi 参数来实现。对应参数说明参见 esp-now/src/espnow/include/espnow.h。