用 Arduino 玩转 ESP32 系列历史文章目录:
- ESP32 概述与 Arduino 软件准备
- ESP32 GPIO接口编程入门
- 蓝牙翻页笔(蓝牙键盘与PPT 控制器)
- B 站粉丝计数器
- Siri 语音识别控制 LED 灯
- Siri 语音识别获取传感器数据
- 彩屏显示入门(一):驱动库设置与彩屏效果展示
- 彩屏显示入门(二):颜色设置与文本显示
在学习 Arduino 开发的过程中,无线通讯是我们学习道路上一道必过的坎,无线通讯摆脱了线材的束缚,使用更加灵活且通讯距离根据不同无线模块可达几十米甚至是数公里。常见的无线通讯方式有蓝牙、WiFi、LoRa、NB-IoT 等,本教程将重点介绍乐鑫科技开发的另一种无线通讯协议:ESP-NOW,通过本教程的学习,你将了解到如何将 ESP-NOW 技术应用到我们的 DIY 项目中。
硬件准备
- 任意 ESP32 开发板;
开发环境
我们使用 Arduino 软件来编写本项目的程序。至于如何在 Arduino 中配置 ESP32 的开发环境,不在本文的介绍范围,请自行查阅相关资料。
什么是 ESP-NOW?
ESP-NOW 是由乐鑫开发的另一款无线通信协议,可以使多个设备在没有或不使用 Wi-Fi 的情况下进行通信。这种协议类似常见于无线鼠标中的低功耗 2.4GHz 无线连接——设备在进行通信之前要进行配对。配对之后,设备之间的连接是持续的、点对点的,并且不需要握手协议。它是一种短数据传输、无连接的快速通信技术,可以让低功耗控制器直接控制所有智能设备而无需连接路由器,适用于智能灯、遥控控制、传感器数据回传等场景。
使用了 ESP-NOW 通信之后,如果某一个设备突然断电之后,只要它一旦重启,就是自动连接到对应的节点中重新进行通信。
ESP-NOW 支持如下特性:
- 单播包加密或单播包不加密通信;
- 加密配对设备和非加密配对设备混合使用;
- 可携带最长为 250 字节的有效 payload 数据;
- 支持设置发送回调函数以通知应用层帧发送失败或成功。
同样,ESP-NOW 也存在一些限制:
- 暂时不支持广播包;
- 加密配对设备有限制,Station 模式下最多支持10 个加密配对设备;SoftAP 或 SoftAP + Station 混合模式下最多支持 6 个加密配对设备。非加密配对设备支持若干,与加密设备总数和不超过 20 个;
- 有效 payload 限制为 250 字节。
ESP-NOW 通信方式
ESP-NOW 支持多种通信方式:
一对一单向通信
一对一单向通信是最简单的通信方式,也就是一个设备负责发送数据,另一个设备负责接收数据,如下图所示:
一对多单向通信
一对多单向通信是指一个设备负责发送数据,多个设备负责接收数据。其中数据发送端就类似与遥控器,数据接收端可以负责分别控制不同的设备,如下图所示:
多对一单向通信
多对一单向通信是指一个设备专门负责接收数据,其余设备则向它发送数据。这种场景主要应用于多个设备采集不同的传感器数据,然后向中心或者总控制器汇总数据,如下图所示:
双向通信
相对于单向通信,双向通信是指通信的双方既可以发送数据、又可以接收数据。一对一双向通信如下图所示:
在双向通信中,也可以加入更多的设备,进行两两之间的数据交互,如下图所示:
当然以上的这些通信,不仅仅限于 ESP32 开发板之间的通信,所有支持 ESP-NOW 的设备之间都可以进行通信,比如 ESP32 与 ESP32 之间、ESP8266 与 ESP8266 之间、甚至 ESP32 与 ESP8266 之间,都可以进行 ESP-NOW 无线通信。
下面我们将通过实际程序来介绍如何使用 ESP-NOW 进行通信,此处以 ESP32 为例,其他开发板方法类似。
获取设备 MAC 地址
ESP-NOW 是点对点的通讯方式,在发送数据时需要指定接收设备,这好比你给对方发送 QQ 消息必须知道对方的 QQ 号一样。在这里我们一般通过设备的 MAC 地址作为区分不同接收设备的凭证。那什么是 MAC 地址呢?MAC 地址也叫物理地址、硬件地址,每个设备的 MAC 地址在出厂时都是不同的。
下面我们通过 Arduino 代码来获取 ESP32 开发板的 MAC 地址:
#include <WiFi.h>
void setup() {
Serial.begin(9600);
Serial.println();
#ifdef ESP8266
Serial.print("ESP8266 Board MAC Address: ");
Serial.println(WiFi.macAddress