js原生 WebSocket API 与 WebSocketsServer.h 的通信(nodemcu-32s 和 javascript 通信)

💡 原文中文,约3800字,阅读约需9分钟。
📝

内容提要

本文介绍了使用nodemcu和JavaScript进行通信的方法。通过建立一个http服务和一个webSocket服务,实现了在网页和开发板之间的实时通讯。文章提供了相关的代码和页面代码,并说明了使用的API和工具。

🔎

延伸解读

为何选择原生 WebSocket API

文章强调不使用 socket.io.js 插件,因为其体积过大,不适合放入 nodemcu 等资源受限的设备。原生 WebSocket API 由浏览器直接提供,无需额外库,能减少内存占用和传输开销。对于简单的实时控制场景,如本例中的滑动条数据传输,原生 API 已足够,且更易于嵌入到开发板的 HTTP 响应中。

双服务架构:HTTP 与 WebSocket 分工

nodemcu 同时运行 HTTP 服务(端口 80)和 WebSocket 服务(端口 81)。HTTP 服务负责提供网页内容,WebSocket 服务负责实时双向通信。这种分工让网页加载和实时控制互不干扰,也便于分别处理。注意 WebSocket 连接地址需与开发板 IP 和端口一致,本例中为 ws://192.168.4.1:81。

事件驱动与数据格式

开发板端通过 webSocketEvent 回调处理连接、断开、文本和二进制消息。文本消息被解析为 JSON 对象,便于提取字段。网页端使用 socket.send 发送 JSON 字符串,如 {dj_deg: val}。双方约定 JSON 格式,能灵活扩展控制指令。注意回调中需处理不同消息类型,避免数据误读。

实际应用与注意事项

本例通过拖动滑动条实时发送角度值,开发板接收并解析。这种模式适用于手机遥控等场景。需注意:开发板需设置为 AP 模式,手机连接其 WiFi 后访问网页;WebSocket 连接可能因网络不稳定断开,需在 onclose 中处理重连;代码中未涉及错误恢复,实际使用时应增加健壮性。

❓

Q&A

如何使用nodemcu和JavaScript进行实时通讯?

通过建立http服务和webSocket服务,nodemcu可以与网页进行实时通讯。

在nodemcu中如何设置http和webSocket服务?

可以通过Arduino IDE编写代码,使用ESP8266WebServer和WebSocketsServer类来设置服务。

使用WebSocket API时需要注意什么?

需要手写JS提供的API,不使用socket.io.js插件,以避免占用过多资源。

如何在网页中发送数据到nodemcu?

可以通过WebSocket连接,使用socket.send方法发送JSON格式的数据。

nodemcu如何处理WebSocket事件?

通过定义回调函数,nodemcu可以处理连接、断开和接收消息等WebSocket事件。

拖动网页滚动条有什么作用?

拖动滚动条可以实时向nodemcu发送音讯,进行数据交互。

🏷️

标签

➡️

继续阅读