当前位置:首页 > JavaScript

js 实现串口

2026-02-01 18:27:45JavaScript

使用 Web Serial API 实现串口通信

Web Serial API 是现代浏览器提供的 JavaScript API,允许网页与串行设备(如 Arduino、传感器等)直接通信。以下是实现步骤:

启用 API 支持 Chrome 89+、Edge 89+ 和 Opera 76+ 原生支持该 API。需在安全上下文(HTTPS 或 localhost)中使用。

请求端口权限

button.addEventListener('click', async () => {
  const port = await navigator.serial.requestPort();
});

打开并配置端口

await port.open({ baudRate: 9600 }); // 常用波特率:9600, 115200

读写数据

const writer = port.writable.getWriter();
await writer.write(new Uint8Array([1, 2, 3])); // 发送数据
writer.releaseLock();

const reader = port.readable.getReader();
while (true) {
  const { value, done } = await reader.read();
  if (done) break;
  console.log('Received:', value); // 接收Uint8Array数据
}

关闭端口

await port.close();

Node.js 环境实现方案

对于 Node.js 后端应用,可使用 serialport 库:

安装依赖

npm install serialport

基本使用示例

const { SerialPort } = require('serialport');

const port = new SerialPort({
  path: 'COM3', // Windows
  baudRate: 9600
});

port.on('data', (data) => {
  console.log('Received:', data.toString());
});

port.write('AT\\r\\n', (err) => {
  if (err) console.error('Write error:', err);
});

注意事项

  • 需处理连接错误事件:

    port.on('error', (err) => {
      console.error('Port error:', err);
    });
  • 二进制数据建议使用 DataViewTypedArray 处理

  • 不同操作系统端口名称格式:

    • Windows: COM3
    • Linux: /dev/ttyUSB0
    • macOS: /dev/cu.usbmodem1411

浏览器兼容性处理

对于不支持 Web Serial API 的浏览器,可考虑以下方案:

  • 使用 Chrome 扩展程序 API
  • 通过 WebSocket 桥接本地代理服务
  • 使用 Electron 等桌面应用框架

常用串口参数配置

const options = {
  baudRate: 115200,     // 波特率
  dataBits: 8,          // 数据位
  stopBits: 1,          // 停止位
  parity: 'none',       // 校验位
  flowControl: 'none'   // 流控
};

数据转换示例

字符串转Uint8Array

const encoder = new TextEncoder();
const data = encoder.encode('Hello');

Uint8Array转字符串

js 实现串口

const decoder = new TextDecoder();
const text = decoder.decode(data);

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

相关文章

js实现轮播

js实现轮播

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

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…