当前位置:首页 > JavaScript

js 实现串口

2026-04-06 11:25:24JavaScript

在 JavaScript 中实现串口通信

由于浏览器环境出于安全限制无法直接访问串口,需要使用 Web Serial API。该 API 允许网页通过用户授权与串行设备(如 Arduino、传感器等)通信。

检查浏览器兼容性

确保浏览器支持 Web Serial API,目前 Chrome、Edge 和 Opera 已支持:

js 实现串口

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);
  }
}

读写串口数据

使用 TextEncoderTextDecoder 处理数据流:

js 实现串口

// 写入数据
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 环境下的串口通信实现方案。

标签: 串口js
分享给朋友:

相关文章

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:CSS…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含inpu…