使用Node.js进行串口通信

目录

  • [一、 安装 serialport 库](#一、 安装 serialport 库)
  • 二.、实现方法
    • 1.打开串口并配置参数
    • [2. 向串口传递信息](#2. 向串口传递信息)
    • [3. 接收串口信息](#3. 接收串口信息)
    • [4. 处理错误](#4. 处理错误)
    • [5. 关闭串口](#5. 关闭串口)
    • [6. 使用解析器](#6. 使用解析器)
    • [7. 获取串口列表](#7. 获取串口列表)
  • [三、 完整示例代码](#三、 完整示例代码)

一、 安装 serialport 库

首先,需要安装 serialport 库。可以通过 npm 安装:

bash 复制代码
npm install serialport

二.、实现方法

1.打开串口并配置参数

创建一个串口对象并配置串口参数,例如波特率、数据位、停止位和校验位等。

javascript 复制代码
const SerialPort = require('serialport');

// 创建串口对象
const port = new SerialPort('/dev/tty-usbserial1', {
  baudRate: 9600, // 波特率
  dataBits: 8,    // 数据位
  parity: 'none', // 校验位
  stopBits: 1,    // 停止位
  autoOpen: false // 不自动打开串口
});

// 打开串口
port.open((err) => {
  if (err) {
    console.error('Error opening port:', err.message);
    return;
  }
  console.log('Port opened successfully');
});

2. 向串口传递信息

使用 write 方法向串口发送数据。

javascript 复制代码
// 向串口发送数据
port.write('Hello Serial Port', (err) => {
  if (err) {
    console.error('Error on write:', err.message);
    return;
  }
  console.log('Message written');
});

3. 接收串口信息

通过监听 data 事件来接收串口发送的数据。

javascript 复制代码
// 监听数据事件
port.on('data', (data) => {
  console.log('Received data:', data.toString());
});

4. 处理错误

监听 error 事件来处理串口通信中可能出现的错误。

javascript 复制代码
// 监听错误事件
port.on('error', (err) => {
  console.error('Error:', err.message);
});

5. 关闭串口

在完成通信后,可以关闭串口以释放资源。

javascript 复制代码
// 关闭串口
setTimeout(() => {
  port.close((err) => {
    if (err) {
      console.error('Error closing port:', err.message);
      return;
    }
    console.log('Port closed successfully');
  });
}, 10000); // 10秒后关闭串口

6. 使用解析器

为了更好地处理接收到的数据,可以使用解析器。例如,使用 @serialport/parser-inter-byte-timeout 解析器来处理分包问题。

javascript 复制代码
const { InterByteTimeoutParser } = require('@serialport/parser-inter-byte-timeout');

const parser = port.pipe(new InterByteTimeoutParser({ interval: 300 }));

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

7. 获取串口列表

可以使用 SerialPort.list() 方法获取当前系统中可用的串口列表。

javascript 复制代码
SerialPort.list().then((ports) => {
  ports.forEach((port) => {
    console.log('Available port:', port.path);
  });
});

三、 完整示例代码

以下是一个完整的示例代码,展示了如何在 Node.js 中打开串口、发送数据和接收数据:

javascript 复制代码
const SerialPort = require('serialport');
const { InterByteTimeoutParser } = require('@serialport/parser-inter-byte-timeout');

// 创建串口对象
const port = new SerialPort('/dev/tty-usbserial1', {
  baudRate: 9600,
  dataBits: 8,
  parity: 'none',
  stopBits: 1,
  autoOpen: false
});

// 打开串口
port.open((err) => {
  if (err) {
    console.error('Error opening port:', err.message);
    return;
  }
  console.log('Port opened successfully');

  // 创建解析器
  const parser = port.pipe(new InterByteTimeoutParser({ interval: 300 }));

  // 监听数据事件
  parser.on('data', (data) => {
    console.log('Received data:', data.toString());
  });

  // 监听错误事件
  port.on('error', (err) => {
    console.error('Error:', err.message);
  });

  // 向串口发送数据
  port.write('Hello Serial Port', (err) => {
    if (err) {
      console.error('Error on write:', err.message);
      return;
    }
    console.log('Message written');
  });

  // 关闭串口
  setTimeout(() => {
    port.close((err) => {
      if (err) {
        console.error('Error closing port:', err.message);
        return;
      }
      console.log('Port closed successfully');
    });
  }, 10000); // 10秒后关闭串口
});
相关推荐
会飞的鱼先生5 小时前
Node.js-path模块
node.js
企鹅侠客7 小时前
实践篇:14-构建 Node.js 应用程序镜像
docker·node.js·dockerfile
爱分享的程序员9 小时前
前端面试专栏-算法篇:18. 查找算法(二分查找、哈希查找)
前端·javascript·node.js
YongGit11 小时前
探索 AI + MCP 渲染前端 UI
前端·后端·node.js
ncj39343790614 小时前
vscode中对node项目进行断点调试
vscode·node.js
abigale0316 小时前
webpack+vite前端构建工具 -11实战中的配置技巧
前端·webpack·node.js
墨菲安全1 天前
NPM组件 betsson 等窃取主机敏感信息
前端·npm·node.js·软件供应链安全·主机信息窃取·npm组件投毒
csdn_aspnet1 天前
Node.js 使用 WebSockets 和 Socket.IO 实现实时聊天应用程序
node.js
whhhhhhhhhw2 天前
Node.js核心API(fs篇)
node.js
聪聪的学习笔记2 天前
【1】确认安装 Node.js 和 npm版本号
前端·npm·node.js