js 实现串口
在 JavaScript 中实现串口通信
由于浏览器环境出于安全限制无法直接访问串口,需要使用 Web Serial API。该 API 允许网页通过用户授权与串行设备(如 Arduino、传感器等)通信。
检查浏览器兼容性
确保浏览器支持 Web Serial API,目前 Chrome、Edge 和 Opera 已支持:

if ('serial' in navigator) {
console.log('Web Serial API 支持');
} else {
console.log('Web Serial API 不支持');
}
请求串口权限并打开端口
需要用户主动触发(如点击按钮)才能请求设备访问权限:
async function requestSerialPort() {
try {
const port = await navigator.serial.requestPort();
await port.open({ baudRate: 9600 }); // 设置波特率
return port;
} catch (err) {
console.error('串口打开失败:', err);
}
}
读写串口数据
使用 TextEncoder 和 TextDecoder 处理数据流:

// 写入数据
async function writeToPort(port, data) {
const writer = port.writable.getWriter();
await writer.write(new TextEncoder().encode(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('收到数据:', new TextDecoder().decode(value));
}
reader.releaseLock();
}
关闭串口连接
async function closePort(port) {
await port.close();
console.log('串口已关闭');
}
完整示例
结合按钮触发完整流程:
<button id="connect">连接串口</button>
<button id="send">发送数据</button>
<button id="close">关闭连接</button>
<script>
let serialPort = null;
document.getElementById('connect').addEventListener('click', async () => {
serialPort = await requestSerialPort();
readFromPort(serialPort); // 开始监听数据
});
document.getElementById('send').addEventListener('click', () => {
if (serialPort) writeToPort(serialPort, 'Hello Arduino\n');
});
document.getElementById('close').addEventListener('click', () => {
if (serialPort) closePort(serialPort);
});
</script>
注意事项
- 需要 HTTPS 环境或 localhost 才能使用 Web Serial API
- 波特率需与设备设置一致
- 部分操作系统可能需要安装驱动程序
- 读取数据时应处理流控制,避免阻塞
Node.js 环境实现
若在 Node.js 环境中,可使用 serialport 库:
const { SerialPort } = require('serialport');
const port = new SerialPort({
path: '/dev/ttyUSB0', // 设备路径
baudRate: 9600
});
port.write('Hello World', (err) => {
if (err) console.error('写入错误:', err);
});
port.on('data', (data) => {
console.log('收到数据:', data.toString());
});
以上方法覆盖了浏览器和 Node.js 环境下的串口通信实现方案。






