当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]忘掉NRF、蓝牙、433MHz模块——甚至Wi-Fi!有一种更好的无线方式。我是来自educ8s的尼克。今天,我要向你们展示的是ESP32内置的一种改变游戏规则的协议,它可以让你的设备即时、可靠地通话,而且没有传统无线设置的麻烦。

ESP-NOW使无线ESP32通信变得简单。广播传感器数据或立即创建设备到设备的网络,用最少的代码。

忘掉NRF、蓝牙、433MHz模块——甚至Wi-Fi!有一种更好的无线方式。我是来自educ8s的尼克。今天,我要向你们展示的是ESP32内置的一种改变游戏规则的协议,它可以让你的设备即时、可靠地通话,而且没有传统无线设置的麻烦。

我们将用它来建立一个无线气象站,在esp32之间传输实时传感器数据,并将其显示在大屏幕上,我们将在不到10分钟的时间内完成。你准备好升级你的无线游戏了吗?我们开始吧!

部件清单

•ESP32

•ESP32S3

•BME280传感器

•2.8" ILI9341显示屏

•USB电缆

•试验板(可选)

•跳线

步骤1:ESP-NOW:快速概述

你知道这个小小的ESP32板…在不使用Wifi的情况下,我们已经拥有了将数据无线发送到另一台设备所需的一切?这是正确的!没有任何额外的模块,天线或其他任何东西!这一切都是与生俱来的!这要感谢一种叫做ESP-NOW的东西。

ESP-NOW是ESP32的制造商expressif开发的一种轻量级无连接无线协议。Wi-Fi或蓝牙需要握手、认证和复杂的设置过程,而ESP-NOW不同,它允许设备之间即时直接通信。可以把它想象成esp32的对讲机系统——一台设备发送数据,另一台设备接收数据,而不需要互联网连接、路由器,甚至不需要事先配对。这使得它快速,高效,并且非常容易用于物联网项目,传感器网络和实时数据共享。

ESP-NOW最大的优点之一是它的低功耗。因为它不依赖于持续的网络连接或后台通信开销,所以非常适合远程传感器、气象站和智能家居设备等电池供电的应用。它还支持一对一、一对多甚至多对多通信,这意味着您可以建立一个由ESP设备组成的网络,方便地交换数据。尽管它很简单,但ESP-NOW可以加密数据以确保安全,使其成为传统无线选项的强大而轻便的替代品。

好的,太棒了!现在你知道了ESP-NOW是什么,让我们实际一点。在本指南中,我们将展示最简单的方法来开始使用ESP-NOW。我们将设置一个ESP32来发送消息…但不是针对任何特定的设备!

而不是针对一个特定的地址,我们将使用一种叫做广播的东西。这意味着我们发送的ESP32将向任何正在收听ESP-NOW频道的人发出它的信息。

最酷的是……附近的任何ESP32设备都可以接收到此消息!不需要预编程地址,不需要复杂的配对列表。只需将数据发送到无线以太网,任何准备好侦听的ESP32都可以接收到数据。

这对于简单的数据广播来说是完美的,就像我们的气象站,我们想要发送传感器读数给任何显示单元。

请记住,ESP-NOW实际上是一个非常先进的协议,具有许多功能,但今天我们只是迈出了我们的第一步,我将准备更多先进的视频,以探索其未来的全部潜力。

步骤2:设置你的第一个ESP-NOW项目

为了使ESP-NOW的使用变得非常简单,我创建了一个特殊的ESPNowEasy类!这个类以两个简单文件的形式提供——一个espno鼬.h文件和一个espno鼬.cpp文件。您只需要将这两个文件包含在您的Arduino项目中,然后您将拥有这个类的所有魔力!

在Arduino代码中使用这个类之前,我们需要导入它的头文件。就像使用任何Arduino库一样,您可以在草图的最顶部使用#include语句完成此操作。

这使得ESPNowEasy类的所有特性都可以在你的代码中使用。

现在,在我们创建“ESP-NOW助手”对象之前,我们首先需要告诉ESPNowEasy类它将发送什么样的数据。记得吗,在我们的基本例子中,我们说过我们会发送一个数字和一条消息?为了定义这些数据,我们创建了一个自定义数据结构。可以把它想象成设计一个特殊的“盒子”来保存我们的特定数据。

它看起来像这样:};在这个结构体中,我们定义了“盒子”将保存的数据块。对于我们的例子,我们想要发送:

•一个整数,我们叫它counter。

•还有一个消息——一个文本字符串,“Hello World!”,存储在一个名为text的字符数组中。

一旦我们定义了这个消息结构——告诉ESPNowEasy期待什么样的数据——那么我们就可以创建ESPNowEasy对象,我们的“ESP-NOW助手”。当我们创建这个对象时,我们需要告诉它要使用哪个消息结构。

我们用这行来做:

看到了吗?只需一行,我们现在就有了espNow对象,专门设计用于处理消息数据类型,准备好使无线通信变得超级简单!

步骤3:发送代码:发送计数器和文本

现在,让我们发送一条消息。首先,我们需要初始化ESP-NOW协议。在我们的ESPNowEasy类中,这非常简单-只需使用这一行:

接下来,让我们准备第一个数据包。我们将计数器设置为0,并将短信设置为“Hello World!”。一旦我们的dataToSend结构中填充了这些信息,无线发送它就很容易了:

这就是它的全部!信不信由你,使用ESPNowEasy库,发送数据真的很简单——只需要几行代码。为了使我们的示例更具动态性,让我们将数据发送和计数器增量移到loop()函数中。这样,我们可以在发送每个消息后增加计数器,确保每次传输不同的值。最后,在每次发送之间增加一秒钟的短暂延迟,将使观察数据传输变得更容易。

以下是完整的发射机代码:

步骤4:接收代码:显示接收到的数据

现在,让我们创建接收器草图。接收方代码和发送方代码一样简单!事实上,它有很多相似之处。

首先,就像发送方一样,接收方需要理解它将要接收的消息的结构。这意味着我们需要在接收器代码中定义完全相同的Message结构!

接下来,就像在发送器中一样,我们创建ESPNowEasy对象,专门用于处理我们的消息数据类型,如下所示:

现在,在setup()函数中,第一个关键步骤是使用espNow.begin();初始化ESP-NOW协议本身。然后,我们通过调用onReceive()方法并告诉它使用我们的onmessagerreceived函数作为处理程序来配置接收器以侦听传入的消息。

可以把这个函数看作是ESP32接收器内的一个专门的小工作人员。它唯一的工作就是耐心地等待无线ESP-NOW消息到达。当有消息进来时,这个功能会自动启动!

这种类型的函数通常被称为“回调函数”。它不是我们在主循环()中直接调用的函数。相反,我们用这行代码注册它:espNow.onReceive(onmessagerreceived);在注册之后,ESPNowEasy库接管并在新消息到达时自动为我们调用onmessagerreceived函数。在onmessagerreceived函数中,魔术变量是receivedMessage。

注意,receivedMessage的类型是Message&。这意味着它是对Message结构的引用。当ESPNowEasy调用onmessagerreceived时,它会自动用来自无线接收消息的数据填充这个receivedMessage结构!

因此,在onmessagerreceived中,我们可以使用receivedMessage直接访问来自传入消息的数据。计数器和receivedMessage.text。然后,我们可以对接收到的数据做任何我们想做的事情——在我们的示例中,我们只是将其打印到串行监视器。但在实际项目中,您可能会使用这些数据来更新显示、控制电机、触发动作或任何您可以想象的事情!

以下是完整的接收器代码:

步骤5:测试基本ESP-NOW通信

我们快到了!现在是时候对我们的代码进行测试了。

首先,确保您已将发射器代码上传到一个ESP32板,并将接收器代码上传到另一个ESP32板。

在Arduino IDE中打开接收器ESP32的串行监视器。将波特率设置为115200,与代码中的Serial.begin()调用相匹配。

一旦两个ESP32板都上电,您应该开始看到消息出现在接收器的串行监视器中。输出应该看起来像这样:

您将注意到计数器的值随着接收到的每条消息的增加而增加,这表明正在成功地传输和接收数据。

为了真正向您展示ESP-NOW的多功能,我甚至将使用不同的ESP32型号作为接收器-这次是ESP32- s3板!看看这个,效果很好!在串行监视器上,我们可以看到无线发送的消息!这表明ESP-NOW广播与各种ESP32板兼容。

如果没有看到任何输出,请仔细检查以下内容:

•接线:确保两块ESP32板都已正确接通电源。

•波特率:确保串口监视器的波特率为115200。

•代码上传:检查每个ESP32上传的代码是否正确。

•距离:确保ESP32板之间的距离在合理范围内。

一旦您在串行监视器中看到消息,您就已经成功地使用ESP-NOW和ESPNowEasy类在两个ESP32板之间建立了基本的无线通信!

步骤6:搭建无线气象站:发射机

现在我们有了基本的ESP-NOW通信的坚实基础,让我们继续我们的无线气象站项目。我们将从修改发射器代码开始,从BME280传感器发送真实世界的传感器数据。

正如您所料,主要的调整是修改我们的数据结构以匹配传感器读数。让我们看一下气象站的WeatherData结构。你会发现,我们已经重新设计了“数据盒”,专门用来保存温度、湿度和压力值。

下面是新的WeatherData结构:

我们现在不再使用直接的Adafruit BME280库调用,而是使用一个单独的Sensor .h文件和一个Sensor类来封装传感器交互。这使得主代码更简洁、更有条理。

以下是更新后的发射机代码:

变更说明:

•#include "sensor.h":包含自定义传感器处理代码。

•Sensor Sensor (true);:创建一个Sensor对象,初始化它以使用公制系统。

•sensor.begin():通过sensor类初始化BME280传感器。

•sensor. gettemperature()、sensor. gethumidity()、sensor. getpressure():使用sensor类的方法检索传感器数据。

•错误处理:增加了espNow.begin()和sensor.begin()的检查,以确保正确的初始化。

•2000ms延迟:延迟已更改为2000ms。

接线说明:

有关BME280传感器连接到ESP32的详细说明,请参阅附件接线图。确保传感器的VCC、GND、SDA和SCL引脚正确连接。

现在,把这个代码上传到你的ESP32发射机。您将开始看到传感器数据以无线方式发送!

步骤7:搭建无线气象站:接收器

现在,让我们把注意力转向气象站的接收端。我们将修改接收器代码,以便在il9341显示器上显示传入的天气数据。

首先,我们需要包括必要的库并定义WeatherData结构,就像在发送器代码中一样。我们还将包含一个定制的display .h文件来处理显示交互。

接收器代码中的关键变化是:

•包括display. h文件:这允许我们与ILI9341显示器进行交互。

•创建显示对象:该对象将管理显示。

定义onWeatherDataReceived回调函数:该函数对于处理传入的天气数据至关重要。函数如下:

当ESP32从发射器接收到天气数据时,该功能自动触发。它首先将接收到的数据打印到串行监视器进行调试和验证。然后,它调用display.update()函数,传递接收到的数据,以更新ILI9341的显示。

•在setup()函数中初始化显示:我们调用display.begin()来设置显示。

•实际上,我们正在添加代码来接收天气数据,然后将其发送到ILI9341显示器以进行可视化。

上传守则:

•使用USB电缆将ESP32接收器连接到计算机。

•打开Arduino IDE,选择正确的板和端口。

•确保Display.h和Display.cpp文件正确放置在Arduino项目文件夹中,或作为IDE中的选项卡包含。

•验证代码,然后点击“上传”按钮。

接线说明:

请参考附件接线图,了解连接ILI9341显示器到ESP32的详细说明。确保显示器的VCC、GND、SDA、SCL和其他必要引脚正确连接。

现在,一旦代码上传到您的ESP32接收器,并且发射器正在运行,您将看到从发射器接收到的天气数据显示在ILI9341屏幕上。串行监视器也将显示数据。

步骤8:ESP-NOW的范围和可靠性

现在我们的无线气象站已经建立并运行,让我们谈谈ESP-NOW的范围和可靠性。

在我的测试中,ESP-NOW的性能出奇地强劲。我已经能够带着这些esp32在我的房子里走来走去,天气数据一直保持完美的流-没有丢失一个数据包!老实说,对于这种本地的家庭无线通信,我发现ESP-NOW比我用过的任何蓝牙、433MHz或NRF模块设置都要可靠得多。它就是有效,而且一直有效。

更令人兴奋的是,ESP-NOW能够实现更大的范围——高达400米。

这种可靠性使ESP-NOW成为传感器网络、智能家居应用以及任何数据传输一致性至关重要的项目的理想选择。虽然障碍物、干扰和天线放置等因素会影响探测范围,但ESP-NOW为ESP32项目提供了强大而可靠的无线解决方案。

步骤9 .结论

这就是答案!我们已经成功地使用ESP-NOW建立了一个无线气象站,证明了该协议对于ESP32通信是多么容易和可靠。

我们已经学会了如何:

•建立基本的ESP-NOW通信来发送和接收数据。

•为我们的天气数据创建一个自定义数据结构。

•使用ESPNowEasy库来简化这个过程。

•集成BME280传感器,捕捉实时环境数据。

•在ILI9341屏幕上显示该数据。

ESP-NOW提供了一种强大而高效的方式来创建无线项目,而无需传统Wi-Fi或蓝牙设置的复杂性。其低功耗和可靠的通信使其成为广泛应用的完美选择。

本文编译自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭