ESP32 ESP-NOW 是专门为其 ESP8266 和 ESP32 微控制器开发的无线通信协议。它为 ESP32 设备提供低功耗、安全、低成本、直接的无线通信解决方案。借助 ESP-NOW,多个 ESP32 设备可以相互通信,无需 WiFi 或路由器,从而创建设备的网状网络。
在本教程中,我们将学习使用 ESP32 ESP-NOW 在 ESP32 设备之间进行无线通信。无论您想要发送传感器数据、控制 ESP 输出还是建立双向通信,本指南都将为您提供必要的步骤。
ESP-NOW 协议介绍
使用 ESP-NOW,我们可以在 ESP MCU 设备之间进行单向甚至双向通信,而无需使用 Wi-Fi 网络。它允许低开销的点对点无线数据传输,但数据包较小。最多可传输 250 字节的数据。因此,如果需要传输大量数据,那么使用此协议就没用了。
使用 ESP-NOW,连接协议得到简化,从而降低了功耗,因为数据传输所需的时间更少。此外,ESP-NOWESP-NOW使用与 Wi-Fi 相同的 2.4 GHz 频段,但不需要连接或干扰本地网络连接。它是一种快速、方便的通信协议,适用于传输较小量的数据。
ESP32 ESP-NOW 主要特性
- 一对一的数据传输(加密和未加密)。
- 支持加密和未加密的对等设备。对于加密设备,工作站模式下最多有 10 个对等点,SoftAP 或两种模式的混合模式下最多有 6 个对等点。但是,对于未加密的设备,最多允许有 19 个设备,且不限制其运行模式。
- 最多可以以小数据包的形式传输 250 字节的数据。
- 它生成一个回调函数,通知应用层数据是否传输成功。
要初始化 ESP-NOW 连接,我们必须首先配对 ESP32 板。无论任何一块板重新启动,该连接都将保持,并且传输将继续顺利进行。
在本教程中,我们将演示一个 Arduino 草图,通过该草图我们将数据从一个 ESP32 板无线传输到另一块板(单向通信)。在此之前,让我们首先看一下可以使用该通信协议的一些配置。
ESP32 ESP-NOW 单向通信
在单向通信中,一个对等设备充当发送方/主设备,另一台充当接收方/从设备。在这种情况下,我们可以对发送方-接收方进行多种配置。
- 一块 ESP32 板向另一块 ESP32 板发送数据
如下图所示,一块 ESP32 板充当发送器,另一块板接收数据,因此充当接收器。
用途:发送传感器数据,控制 ESP 输出,包括 LED、继电器、蜂鸣器等。
- 一块 ESP32 发送器板向其他各种 ESP32 接收器板发送数据
在这种情况下,一个 ESP32 板将充当发送器/主设备,并将数据发送到多个充当接收器/从设备的 ESP32 板。
用途:遥控
- 一块 ESP32 板从其他各种 ESP32 发送器板接收数据
最后,在这种情况下,一个 ESP32 板(接收器/从机)从多个 ESP32 板(发送器/主机)接收数据。
用途:接收来自各种传感器的传感器数据。
ESP-NOW 双向通信
ESP-NOW 协议还支持对等设备之间的双向通信。在这种情况下,ESP32板可以同时充当发送器(主)和接收器(从)。我们可以有两个 ESP32 板来传输数据,如下所示:
或者甚至有一个 ESP32 板网络传输数据:
ESP-NOW 有用的功能
以下是 ESP-NOW 函数的列表,这些函数在将 ESP-NOW 与 ESP32 结合使用时非常方便且经常使用。要查看更多信息,请查看官方 ESP-NOW 文档。
- esp_now_init() :该函数将初始化 ESP-NOW 协议。请记住在初始化 ESP-NOW 通信协议之前启动 Wi-Fi。
- esp_