当前位置:首页 > JavaScript

js实现串口

2026-02-01 05:40:43JavaScript

使用Web Serial API实现串口通信

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

检查浏览器支持

if ('serial' in navigator) {
  console.log('Web Serial API supported');
} else {
  console.log('Web Serial API not supported');
}

请求串口权限并打开端口

const port = await navigator.serial.requestPort();
await port.open({ baudRate: 9600 });

配置串口参数

const writer = port.writable.getWriter();
const encoder = new TextEncoder();
await writer.write(encoder.encode('Hello World'));
writer.releaseLock();

读取串口数据

const reader = port.readable.getReader();
while (true) {
  const { value, done } = await reader.read();
  if (done) break;
  console.log(new TextDecoder().decode(value));
}

关闭串口连接

await port.close();

使用Node.js实现串口通信

在Node.js环境中可以使用serialport库实现串口通信:

安装依赖

npm install serialport

基本使用示例

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

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

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

port.write('AT\\r\\n', (err) => {
  if (err) return console.log('Error:', err.message);
});

使用解析器

const { SerialPort } = require('serialport');
const { ReadlineParser } = require('@serialport/parser-readline');

const port = new SerialPort({ path: '/dev/ttyUSB0', baudRate: 9600 });
const parser = port.pipe(new ReadlineParser({ delimiter: '\\r\\n' }));

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

浏览器兼容性解决方案

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

使用WebUSB API 需要设备支持USB通信协议,适用于特定硬件设备。

使用代理服务 通过WebSocket连接到后端服务,由后端处理串口通信:

const socket = new WebSocket('ws://localhost:8080/serial-proxy');

socket.onmessage = (event) => {
  console.log('Received:', event.data);
};

socket.send('AT\\r\\n');

错误处理最佳实践

处理连接错误

try {
  await port.open({ baudRate: 9600 });
} catch (error) {
  console.error('Failed to open port:', error);
}

处理读写错误

port.on('error', (err) => {
  console.error('Serial port error:', err);
});

超时处理

const timeout = setTimeout(() => {
  port.close();
  console.error('Connection timeout');
}, 5000);

port.on('open', () => {
  clearTimeout(timeout);
});

性能优化技巧

使用缓冲区批量处理数据,减少频繁的IO操作。对于高频数据传输,考虑二进制协议而非文本协议。实现流量控制机制,防止缓冲区溢出。定期检查连接状态,实现自动重连机制。

js实现串口

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

相关文章

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swipe…

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-contain…