ESP-NOW:竟然还有如此好用的无线通信方式 | ESP32轻松学(Arduino版)

用 Arduino 玩转 ESP32 系列历史文章目录:

封面图片

在学习 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 支持多种通信方式:

一对一单向通信

一对一单向通信是最简单的通信方式,也就是一个设备负责发送数据,另一个设备负责接收数据,如下图所示:

ESP_NOW_one_way_communication_two_boards

一对多单向通信

一对多单向通信是指一个设备负责发送数据,多个设备负责接收数据。其中数据发送端就类似与遥控器,数据接收端可以负责分别控制不同的设备,如下图所示:

ESP_NOW_one_master_multiple_slaves

多对一单向通信

多对一单向通信是指一个设备专门负责接收数据,其余设备则向它发送数据。这种场景主要应用于多个设备采集不同的传感器数据,然后向中心或者总控制器汇总数据,如下图所示:

ESP_NOW_one_slave_multiple_masters

双向通信

相对于单向通信,双向通信是指通信的双方既可以发送数据、又可以接收数据。一对一双向通信如下图所示:

ESP_NOW_two_way_communication_two_boards

在双向通信中,也可以加入更多的设备,进行两两之间的数据交互,如下图所示:

ESP_NOW_multiple_boards_two_way_communication

当然以上的这些通信,不仅仅限于 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
### 回答1: esp-tls: create_ssl_handle failed是ESP32芯片在进行TLS连接时出现的一种错误,可能由于几种原因导致:网络配置错误、证书验证失败或者TLS本不匹配等。 网络配置错误可能会导致芯片无法访问远端服务器,因此需要确保设备和服务器的网络配置正确,并且ESP32能够连接到服务器。如果无法连接,请检查网络配置并确认服务器是否正常运行。 证书验证失败可能会导致芯片拒绝连接到服务器,并出现create_ssl_handle失败的错误。有时候我们需要对服务器的证书进行验证,但是芯片没能通过验证。去掉证书验证或者找到正确的证书进行验证可能解决问题。 TLS本不匹配可能会导致芯片无法成功建立TLS连接。在进行TLS连接时需要确保芯片和服务器的TLS本相同。如果服务器只使用TLS1.2,而芯片只支持TLS1.0,那么连接就会失败。调整芯片或服务器的TLS本,或者使用相同的本可能解决问题。 因此,我们需要仔细查看代码和日志,找出具体问题所在,并采取相应的措施。 ### 回答2: esp-tls: create_ssl_handle failed是一个错误信息,用于描述在ESP-TLS库中创建SSL句柄失败的情况。 ESP-TLS是一个为ESP32芯片设计的安全传输层协议库,用于实现SSL/TLS协议。该库提供了安全的网络通信功能,用于保护数据的机密性和完整性。 在使用ESP-TLS库时,create_ssl_handle是一个用于创建SSL句柄的函数。SSL句柄是用于管理和处理SSL/TLS连接的数据结构。 当出现"esp-tls: create_ssl_handle failed"错误时,意味着在创建SSL句柄时发生了错误。可能的原因包括: 1. 内存不足:创建SSL句柄需要分配内存空间,如果系统内存不足,则会导致创建失败。 2. 参数错误:在调用create_ssl_handle函数时,传递的参数可能存在问题,导致创建失败。这可能包括无效的证书、密钥或配置问题。 3. 与底层硬件或驱动的兼容性问题:ESP32芯片的硬件或驱动可能存在与ESP-TLS库不兼容的问题,导致创建SSL句柄失败。 如果遇到"esp-tls: create_ssl_handle failed"错误,可以尝试以下解决方法: 1. 检查系统内存:确保系统有足够的内存可用。可以尝试关闭其他应用程序或释放不必要的内存占用,以解决内存不足的问题。 2. 检查参数配置:仔细检查传递给create_ssl_handle函数的参数配置,确保证书、密钥和其他参数的正确性。 3. 更新ESP-TLS库本:尝试更新使用的ESP-TLS库本,以获得最新的修复程序和改进。 4. 联系技术支持:如果上述方法无法解决问题,可以联系ESP-TLS库的技术支持,获取更详细的帮助和指导。 总之,“esp-tls: create_ssl_handle failed”错误是ESP-TLS库中创建SSL句柄失败的错误消息,可能的原因包括内存不足、参数错误或与底层硬件或驱动的兼容性问题。可以通过检查系统内存、参数配置、更新库本或联系技术支持来解决该问题。 ### 回答3: esp-tls: create_ssl_handle failed 是一个错误信息,意思是 esp-tls 库无法创建 SSL 句柄。此错误通常出现在使用 ESP32 开发板进行 TLS 加密通信时。 出现此错误的可能原因有以下几种: 1. 内存不足:ESP32 开发板的内存资源有限,如果系统内存不足以支持创建 SSL 句柄,就会出现此错误。可以通过减少系统内存的占用或者增加内存来解决这个问题。 2. 无法连接到服务器:在建立 TLS 连接之前,确保 ESP32 开发板与目标服务器之间的网络连接是可用的。检查网络配置和硬件连接,以确保没有网络故障。 3. 证书问题:TLS 通信需要服务器提供有效的 SSL 证书。如果服务器证书无效、过期或者与 ESP32 开发板不匹配,都会导致 SSL 句柄创建失败。检查服务器证书是否正确,并确保与 ESP32 配置相匹配。 4. 代码逻辑错误:检查代码是否存在语法错误、逻辑错误或者问题函数调用。确保正确地调用了 esp-tls 库的相关函数,并按照正确的顺序初始化和使用 SSL 句柄。 解决此问题的方法包括: 1. 检查内存使用情况并优化代码,如使用更少的内存或者开启内存优化选项。 2. 确认网络连接正常,可以尝试重新连接网络或者更换网络环境。 3. 检查服务器证书是否正确并与 ESP32 的配置相匹配,可以尝试使用其他可靠的证书。 4. 仔细检查代码逻辑,确保使用 esp-tls 库的函数正确调用和使用。 如果尝试了以上方法仍然无法解决问题,可以查阅 esp-tls 的官方文档、参考示例代码或者向开发社区提问寻求进一步的帮助。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值