js原生 WebSocket API 与 WebSocketsServer.h 的通信(nodemcu-32s 和 javascript 通信)
内容提要
本文介绍了使用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发送音讯,进行数据交互。