js实现串口
在JavaScript中实现串口通信
由于浏览器环境的安全限制,JavaScript无法直接访问本地串口设备。需要使用Web Serial API或其他桥接技术实现串口通信。
使用Web Serial API
Web Serial API是现代浏览器提供的实验性功能,允许网页与串行设备通信:
// 请求串口访问权限
async function requestPort() {
const port = await navigator.serial.requestPort();
await port.open({ baudRate: 9600 });
return port;
}
// 写入数据到串口
async function writeToPort(port, data) {
const writer = port.writable.getWriter();
await writer.write(data);
writer.releaseLock();
}
// 从串口读取数据
async function readFromPort(port) {
const reader = port.readable.getReader();
while (true) {
const { value, done } = await reader.read();
if (done) break;
console.log('Received:', value);
}
reader.releaseLock();
}
使用Node.js实现串口通信
在Node.js环境中可以使用serialport库:
const SerialPort = require('serialport');
const Readline = require('@serialport/parser-readline');
const port = new SerialPort('/dev/ttyUSB0', { baudRate: 9600 });
const parser = port.pipe(new Readline({ delimiter: '\n' }));
port.on('open', () => {
console.log('Serial port opened');
});
parser.on('data', data => {
console.log('Received:', data);
});
function writeData(data) {
port.write(data, err => {
if (err) return console.log('Error:', err.message);
});
}
使用WebSocket桥接方案
当无法使用Web Serial API时,可通过后端服务桥接:
- 后端使用Node.js/Python等处理实际串口通信
- 前端通过WebSocket与后端通信
// 前端WebSocket连接
const socket = new WebSocket('ws://localhost:8080');
socket.onmessage = event => {
console.log('Received from serial:', event.data);
};
function sendToSerial(data) {
socket.send(data);
}
注意事项
- Web Serial API需要HTTPS环境或localhost
- Chrome/Edge 89+版本支持Web Serial API
- 需要用户主动授权串口访问权限
- 不同操作系统串口设备路径不同(Windows: COM3, Linux: /dev/ttyUSB0)
浏览器兼容性解决方案
对于不支持Web Serial API的浏览器:

- 开发浏览器扩展程序访问串口
- 使用Java Applet或ActiveX控件(已淘汰)
- 使用Electron等桌面应用框架包装Web应用






