跳转到内容

ESPNow 通信组件

ESPNow 组件允许 ESPHome 以简单且无限制的方式与 ESP32 设备通信。它使通过 Espressif 的 ESP-NOW 协议与其他 ESP32 设备交互成为可能,参见文档。它可以与数据包传输组件一起使用来广播传感器数据,参见ESP-NOW 数据包传输平台

NOTE

不建议广播数据,这也会到达不受您控制的、使用 esp-now 协议的其他设备。最好的解决方案是尽可能减少广播,仅用于识别目的。

# 示例配置条目
espnow:
  • channel (可选, int): esp-now 通信用于发送/接收数据包的 Wi-Fi 信道。 当使用 Wifi 时不能设置,因为它将使用与 wifi 网络相同的信道。

  • auto_add_peer (可选, boolean): 这将允许 esp-now 组件自动将任何新的传入设备添加为对等设备。 参见下面的对等设备。默认为 false

  • enable_on_boot (可选, boolean): 启动时启用 esp-now 组件。默认为 true

  • peers (可选, list): 对等设备是使用 esp-now 的设备的名称。该列表将包含此设备可能与之通信的所有设备的 MAC 地址。参见下面的对等设备

自动化:

自动化将可以使用 3 个变量。它们的内存将在自动化完成后清理,如果自动化中有任何 delay 操作或其他”异步”执行的操作,这些变量将不可用。

espnow:
on_...:
- lambda: |-
char des_mac[MAC_ADDRESS_PRETTY_BUFFER_SIZE];
char src_mac[MAC_ADDRESS_PRETTY_BUFFER_SIZE];
char hex[256];
ESP_LOGD("espnow", "发送到 %s 来自 %s: %s RSSI: %ddBm",
format_mac_addr_upper(info.des_addr, des_mac),
format_mac_addr_upper(info.src_addr, src_mac),
format_hex_pretty_to(hex, data, size),
info.rx_ctrl->rssi);

当从已注册的对等设备接收到数据时,将触发此自动化。

  • address (可选, MAC Address): 将此触发器筛选为源地址匹配的数据包。如果未设置,将匹配任何设备。

当从未在对等设备列表中的对等设备接收到数据时,将触发此自动化。此触发器给您一个机会决定是否可以添加未知的对等设备。

当接收到广播数据包时,将触发此自动化。

  • address (可选, MAC Address): 将此触发器筛选为源地址匹配的数据包。如果未设置,将匹配任何设备。

这是一个用于通过 espnow 协议发送数据包的操作

on_...:
- espnow.send:
address: 11:22:33:44:55:66
data: "The big angry wolf awakens"
- espnow.send:
address: 11:22:33:44:55:66
data: !lambda "return {0x00, 0x00, 0x34, 0x5d};"
- espnow.send:
address: !lambda "return {0x11, 0x22, 0x33, 0x44, 0x55, 0x66};"
data: [0x00, 0x00, 0x34, 0x5d]
- espnow.send:
address: !lambda "return {0x11, 0x22, 0x33, 0x44, 0x55, 0x66};"
data: !lambda "return {0x00, 0x00, 0x34, 0x5d};"
  • address (必需, 可模板化, MAC Address): 要发送到的接收设备的 MAC 地址。

  • data (必需, 可模板化, string or list of bytes): 要发送的数据。

  • wait_for_sent (可选, boolean): 自动化将等待数据发送完成,并等待 on_senton_error 操作完成后才继续下一个操作。 默认为 true

  • continue_on_error (可选, boolean): 如果设置为 false,当数据无法发送时,将不会触发下一个操作。 默认为 true

自动化:

  • on_sent (可选, Automation): 数据成功发送时执行的自动化。
  • on_error (可选, Automation): 数据无法发送时执行的自动化。

这是一个用于通过 espnow 协议向任何正在监听的设备发送数据包的操作

on_...:
- espnow.broadcast:
data: "The big angry wolf awakens"
- espnow.broadcast:
data: !lambda "return {0x00, 0x00, 0x34, 0x5d};"
- espnow.broadcast:
data: [0x00, 0x00, 0x34, 0x5d]
  • data (必需, 可模板化, string or list of bytes): 要发送的数据。

这是一个用于将新对等设备添加到内部允许的对等设备列表的操作

on_...:
- espnow.peer.add:
address: 11:22:33:44:55:66
- espnow.peer.add:
address: !lambda "return {0x11, 0x22, 0x33, 0x44, 0x55, 0x66};"
  • address (必需, MAC Address): 需要添加到允许的对等设备列表中的对等设备地址。

这是一个用于从内部允许的对等设备列表中移除已知对等设备的操作

on_...:
- espnow.peer.delete:
address: 11:22:33:44:55:66
- espnow.peer.delete:
address: !lambda "return {0x11, 0x22, 0x33, 0x44, 0x55, 0x66};"
  • address (*必需, MAC Address): 需要从允许的对等设备列表中移除的对等设备地址。

这是一个用于更改 espnow 发送和接收信道的操作

on_...:
- espnow.set_channel:
channel: 1
- espnow.set_channel: 1
  • channel (必需, int): 这可以是 015 之间的值。最大信道编号取决于您使用设备的国家或地区(例如,美国和大多数欧洲国家允许使用信道 1-11,许多其他国家为 1-13,日本为 1-14)。有关详细信息,请参阅各国 Wi-Fi 信道规定或查阅 Espressif ESP-NOW 文档0 表示 espnow 将自行设置信道编号(大多数情况下会是 1)。

对等设备是此设备允许发送的目标设备。广播和未加密的单播数据可以从任何设备接收,无需显式添加为对等设备。

如果 auto_add_peer 设置为 false 且您没有添加任何对等设备,则只能发送广播,尝试向对等设备发送数据时将出现错误。

auto_add_peer 设置为 true 将允许组件自动将任何传入设备添加为对等设备,并自动添加任何发送数据的目标对等设备。