当前位置:首页 > 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
分享给朋友:

相关文章

jquery.js

jquery.js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,用于简化 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它的设计宗旨是“Write Less, Do Mor…

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js实现轮播图

js实现轮播图

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js实现目录

js实现目录

实现目录的基本思路 在JavaScript中实现目录功能通常涉及以下几个核心步骤:解析文档中的标题元素(如h1-h6),动态生成目录结构,并添加交互逻辑(如点击跳转)。以下是具体实现方法: 解析标题…

js 实现图片 放大

js 实现图片 放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性可以实现图片的平滑放大效果。结合 JavaScript 监听鼠标事件控制放大状态: con…