JavaScript浏览器端串口通信依赖Web Serial API,需用户手势触发、HTTPS/localhost环境及Chromium系浏览器(Chrome 89+等)支持;流程为检查API→requestPort选设备→open配置波特率→用ReadableStream/WritableStream读写Uint8Array→TextDecoder/Encoder编解码→处理粘包与异常→显式close。
javascript 浏览器端串口通信靠的是 web serial api,不是原生 js 能直接操作硬件,而是浏览器提供的安全接口。它只在用户主动触发、https 或 localhost 环境、chromium 系列浏览器(chrome 89+、edge 110+、opera 75+)中可用。
确认支持与触发权限
必须由用户点击按钮等手势启动,不能自动运行。先检查 API 是否可用:
- 用
"serial" in navigator判断浏览器是否支持 - 调用
navigator.serial.requestPort()弹出设备选择框,用户手动选 Arduino、CH340 或 CP2102 等 USB 串口设备 - 不支持 COM3、/dev/ttyUSB0 这类系统路径直连,也不支持 Windows/Linux 的传统串口号匹配
打开串口并配置参数
选中设备后,需显式打开并设置通信参数,常见配置项包括:
-
baudRate:必须与设备一致(如 9600、115200),错则收不到数据 - 可选配置:
dataBits(默认 8)、stopBits(默认 1)、parity(默认 "none") - 调用
await port.open({ baudRate: 115200 })建立连接
读写数据要走流式处理
串口数据是字节流,不能直接传字符串或监听事件,得用 ReadableStream 和 WritableStream:
- 读取:用
port.readable.getReader()获取 reader,循环await reader.read()得到Uint8Array,再用TextDecoder转成文本 - 发送:用
port.writable.getWriter()获取 writer,发送前必须用TextEncoder编码,例如encoder.encode("AT\r\n") - 注意粘包问题——串口无天然消息边界,需按协议解析(如以
\n分隔、固定帧长或加起始符)
异常处理与连接维护
串口不稳定,断开、权限丢失、设备拔插都可能中断通信:
立即学习“Java免费学习笔记(深入)”;
- 所有异步操作(open、read、write)都要包在
try/catch中 - 监听
port.onconnect和port.ondisconnect事件,便于响应状态变化 - 通信结束务必调用
await port.close(),否则下次requestPort可能失败 - Web Serial API 不提供自动重连,需自行实现重试逻辑(比如按钮点击重连)


















