js实现串口
使用Web Serial API实现串口通信
Web Serial API是现代浏览器提供的JavaScript接口,允许网页与串行设备(如Arduino、传感器等)直接通信。以下是在浏览器中实现串口通信的方法:
检查浏览器兼容性 确保浏览器支持Web Serial API,Chrome/Edge 89+、Opera 76+等现代浏览器已支持。可通过以下代码检测:
if (!"serial" in navigator) {
console.error("Web Serial API not supported");
}
请求串口访问权限 需要用户主动触发(如点击按钮)才能请求设备访问权限:
const port = await navigator.serial.requestPort();
打开并配置串口 设置波特率等参数(常用9600/115200):
await port.open({ baudRate: 9600 });
const writer = port.writable.getWriter();
const reader = port.readable.getReader();
数据发送 使用TextEncoder转换字符串为Uint8Array:
const encoder = new TextEncoder();
const data = encoder.encode("Hello Serial\\n");
await writer.write(data);
数据接收 通过循环读取数据流:
while (true) {
const { value, done } = await reader.read();
if (done) break;
console.log(new TextDecoder().decode(value));
}
错误处理与关闭 添加必要的错误处理和资源释放:
try {
// 通信代码
} catch (err) {
console.error("Serial error:", err);
} finally {
reader.releaseLock();
writer.releaseLock();
await port.close();
}
Node.js环境下的串口通信
对于Node.js后端应用,可使用serialport库:
安装依赖
npm install serialport
基本使用示例
const { SerialPort } = require('serialport');
const port = new SerialPort({
path: 'COM3',
baudRate: 9600
});
port.write('Hello Node\\n', (err) => {
if (err) return console.log('Write error:', err);
});
port.on('data', (data) => {
console.log('Received:', data.toString());
});
高级特性
-
自动检测可用串口:
const { SerialPort } = require('serialport'); SerialPort.list().then(ports => { ports.forEach(port => console.log(port.path)); }); -
使用解析器处理数据流:

const { ReadlineParser } = require('@serialport/parser-readline'); const parser = port.pipe(new ReadlineParser({ delimiter: '\\r\\n' })); parser.on('data', console.log);
注意事项
- 浏览器环境需要HTTPS协议(localhost除外)
- 用户必须主动交互才能触发设备选择
- 不同操作系统端口名称不同(Windows: COM3, Linux: /dev/ttyUSB0)
- 波特率等参数需与设备端严格匹配
- 大量数据传输时建议使用缓冲区管理
以上方法覆盖了从浏览器到Node.js环境的串口通信实现,开发者可根据具体运行环境选择对应方案。






