返回串口调试

技术知识库 & 调试文档 65 篇硬核手册

Web Serial Pro Multi-Module Offline Documentation Hub

主题 同步中 本地离线 知识库总览
ID: WEB-SERIAL-01 Web Serial API 浏览器接口与配置 (Browser API)

在线串口调试入门:用 Web Serial API 在浏览器中读取串口数据

#在线串口调试助手#Web Serial API 调试#网页版串口工具

Web Serial API 让网页在用户授权下直接读写本机串口(USB-UART、部分板载 COM),从而做出免安装的在线串口调试助手。Chrome / Edge 等 Chromium 桌面浏览器支持;Firefox / Safari 目前基本不可用。

最小闭环 1. navigator.serial.requestPort() — 用户手势触发,弹出端口选择。 2. await port.open({ baudRate: 115200, dataBits: 8, stopBits: 1, parity: 'none' }) 3. port.readable.getReader() 循环 read() 收数据。 4. port.writable.getWriter()Uint8Array 发数据。 5. 关闭时 cancel 读循环 → releaseLock → port.close()

安全约束 - 必须在 Secure Context:HTTPS 或 localhost。 - 授权按源(origin)隔离,可 getPorts() 重连、forget() 撤销。 - 串口数据在浏览器进程内处理;成熟工具不会把业务字节上传服务器。

和传统串口助手对比 | 点 | Web Serial | 桌面 exe | |---|---|---| | 安装 | 免装 | 需下载 | | 权限 | 细、可撤销 | 系统级更高 | | 多平台 | 有浏览器即可 | 分系统打包 | | 离线现场 | 可配合 PWA | 天然本地 |

上手建议 直接打开 Web Serial Pro 一类工具连接 CH340/CP2102 设备,用 HEX/ASCII 收发验证。自己开发时先跑通 requestPort + 读写循环,再加分帧、日志与预设指令。 Web Serial 把「串口调试」从装软件变成打开网页——前提是 Chromium + 安全上下文 + 用户点击授权。

为什么选择网页串口(获客说明) - 免安装: 临时电脑、实验室公共机无需装 SSCOM。 - 可分享: 发送链接即可让同事用同一工具。 - 本地收发: 业务数据默认不因调试而上传到业务服务器。

开始使用 1. 电脑版 Chrome 或 Edge 打开本站首页。 2. 点击连接,选择 CH340/CP2102 等端口。 3. 设置波特率,ASCII 或 HEX 收发。 4. 遇到乱码见《串口调试乱码怎么解决》;没有端口见《CH340 驱动》。

限制(诚实说明,利于信任与转化) - 需要 Chromium 桌面浏览器与用户手势授权。 - 移动端 Safari/微信内置浏览器通常不可用。 - 系统仍需正确安装 USB 串口驱动。

// 1. 请求权限并连接
const port = await navigator.serial.requestPort();
await port.open({ baudRate: 115200 });

// 2. 异步接收流
const reader = port.readable.getReader();
try {
  while (true) {
    const { value, done } = await reader.read();
    if (done) break;
    console.log("收到字节:", value);
  }
} finally {
  reader.releaseLock();
}
代码范例 (javascript)
// 1. 请求权限并连接
const port = await navigator.serial.requestPort();
await port.open({ baudRate: 115200 });

// 2. 异步接收流
const reader = port.readable.getReader();
try {
  while (true) {
    const { value, done } = await reader.read();
    if (done) break;
    console.log("收到字节:", value);
  }
} finally {
  reader.releaseLock();
}