当前位置:首页 > 物联网 > IoT设计分享
[导读]近年来,基于Arduino和ESP32的web服务器项目在各种应用中变得非常流行和有用。但是这种web服务器的一个主要缺点是它的静态特性。意思是通过HTTP更新网页,你需要在更新任何数据之前更新整个网页。这个问题有很多解决方法,比如几秒钟后自动刷新网页,等等。

近年来,基于Arduino和ESP32的web服务器项目在各种应用中变得非常流行和有用。但是这种web服务器的一个主要缺点是它的静态特性。意思是通过HTTP更新网页,你需要在更新任何数据之前更新整个网页。这个问题有很多解决方法,比如几秒钟后自动刷新网页,等等。

但是最有效的方法是使用WebSocket连接来实时获取更新的数据。这种方法不仅效率高,而且为资源密集型应用程序节省了大量的时钟周期。

在我们之前的一篇文章中,我们构建了这样一个基于ESP32的WebSocket服务器,它可以托管网页并发送更新,而无需完全刷新页面。这样做让我们想知道是否有任何方法可以将ESP32配置为可以通过Wi-Fi连接到服务器的客户端。

为了回答这个问题,我们将构建一个基于ESP32的WebSocket客户端,它将能够连接到ESP32 WebSocket服务器。

这样,我们将使用最快、最有效的方式在ESP设备之间建立通信。所以,不要再拖延了,让我们开始吧。

在我们之前的项目中,我们已经构建了许多基于ESP32的项目和物联网相关应用程序的项目,如果您对该主题感兴趣,您可以查看它们。

ESP32 WebSocket客户端是如何工作的?

这个项目的目标是将ESP32配置为WebSocket客户端,这样做将使我们能够在两个ESP32设备之间建立更快和稳定的通信。

首先,客户端通过WebSocket握手建立一个WebSocket连接。握手从一个HTTP请求开始,该请求允许所有必需的服务处理HTTP连接和WebSocket连接。

一旦连接建立,esp32就可以以全双工模式发送和接收数据。使用WebSocket协议,客户端(Web浏览器和ESP32板)可以不需要请求就可以向服务器发送和接收信息,如果配置正确,服务器可以请求客户端发送或接收数据。正如我们前面所说的,如果客户端是web浏览器,这个过程仍然成立。

构建ESP32 WebSocket客户端所需组件

构建基于ESP32的WebSocket客户端所需的组件如下所示。我们用非常通用的元件设计了这个电路,这使得复制过程非常容易。

•ESP32开发板- 2

•128 X 64 OLED显示屏- 1

•面包板- 2

•DHT22传感器- 1

•LED红- 1

•330R电阻- 1

•跳线

•USB电缆

ESP32 WebSocket服务器端,客户端-原理图

基于ESP32的WebSocket客户端测试电路的完整原理图如下所示。

正如你在上面的图表中看到的,我们有两个电路;一个用于ESP32 WebSocket服务器,我们在前一篇文章中讨论过,另一个用于基于ESP32的WebSocket客户端。在这个项目中,我们将讨论客户端。

客户端的演示电路并不多,一个简单的128x64 OLED显示器连接到一个ESP32模块。

打开电源后,客户端可以通过WebSocket连接连接到服务器,并从服务器实时获取数据。

ESP32 Websocket客户端Arduino代码

用于将esp32配置为WebSocket客户端的完整代码可以在本页底部找到。添加所需的头文件和源文件后,您应该能够直接编译Arduino代码,而不会出现任何错误。如果你没有ESP32 Websocket库,你可以从下面给出的链接下载它们。

•下载Adafruit SSD1396 OLED显示库

•下载Arduino Websockets库由Links2004

•下载Arduino JSON库由bblanchon

我们通过包含所有必需的库来开始编写代码。由于我们正在使用WebSocket客户端和OLED,我们需要包括websocketclient .h库以及Adafruit_SSD1306.h和ArduinoJson.h库以及WiFi.h和WebServer.h库。

接下来,我们定义OLED显示器的屏幕宽度和屏幕高度。

之后,我们定义Wi-Fi的SSID和Password,接下来我们定义WebSocketsClient实例并分配一个静态JSON文档,我们将在其中保存传入的JSON字符串。

最后,我们为LED显示器创建一个SSD1306实例,并将屏幕高度和屏幕宽度作为参数传递。

接下来,我们有我们的设置函数,其中我们调用WiFi。begin(SSID, password)开始Wi-Fi实例的方法,并将之前定义的SSID和密码作为参数传递。

接下来,我们用115200波特初始化串行以进行调试。一旦Wi-Fi初始化,我们初始化显示并检查它是否连接。

接下来,我们开始一个WebSocket连接,并为WebSocket初始化一个事件句柄。当WebSocket事件发生时,invent处理程序调用webSocketEvent()函数。

接下来,我们有了loop()函数。在循环函数中,我们通过调用WebSocket.loop()函数来保持WebSocket的活动状态。

接下来,我们有WebSocket事件函数。这个函数在WebSocket事件发生时自动调用。在这个函数中,我们首先检查是否有传入的有效负载,并验证它是否是字符串。

我们期望从服务器得到一个JSON字符串。如果它是一个字符串,那么我们使用deserializeJSON函数对它进行反序列化,并传递有效负载和我们之前声明的静态JSON文档。

一旦JSON字符串被反序列化,我们就声明了三个变量来保存服务器发送的三个参数,即LED_STATUS和来自DHT22传感器的温度和湿度数据。

一旦我们这样做,我们设置显示器,并将所有信息打印到OLED显示器上。

测试ESP32无线客户端

基于ESP32的WebSocket客户端的测试电路如上所示。正如你所看到的,在左边,我们有一个基于ESP32的服务器,它有一个DHT22传感器和一个LED连接,在右边,我们有我们的安卓手机,它作为一个WebSocket客户端,在右边,我们有另一个ESP32板,它作为另一个WebSocket客户端。

现在,由于我们通过WebSocket连接,如果DHT传感器数据或LED状态发生变化,这些变化将反映在手机上,我们也可以在OLED显示器上观察到变化。

果然,当我们点击“打开和关闭”按钮时,OLED显示屏上的数据也会发生变化,我们也会从DHT22传感器获得恒定的数据流,这意味着我们的WebSocket连接工作顺利。

这标志着ESP32 WebSocket教程结束。

本文编译自iotdesignpro

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

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭