当前位置:首页 > 物联网 > 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

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

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 信息技术
关闭