使用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秒后关闭串口
});
相关推荐
赵要上天1 小时前
前端插件使用xlsx-populate,花样配置excel内容,根据坐添加标替换excel内容,修改颜色,合并单元格...。
javascript·node.js
咪库咪库咪2 小时前
构建工具
node.js
一袋米扛几楼982 小时前
【概念】Node.js,Express.js MongoDB Mongoose Express-Validator Async Handler
javascript·node.js·express
不懂装懂的不懂3 小时前
【 node.js 】windows 电脑:node版本更换
node.js
Moment4 小时前
重新前端工程化:想了解前端工程化,PNPM 你可不能落下 😎😎😎
前端·javascript·node.js
A Everyman8 小时前
【npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree】
前端·npm·node.js·error
阿陈陈陈8 小时前
【Node.js入门笔记6---fs流(Streams)与管道(Pipe)】
笔记·node.js
cmoaciopm18 小时前
在MacOS 10.15上安装Node.js
macos·node.js
不想说话的麋鹿1 天前
「项目实战」从0搭建NestJS后端服务(一):初始化项目+手把手整合Swagger接口文档
node.js·全栈
阿陈陈陈1 天前
【Node.js入门笔记8---fs的一些高级功能】
笔记·node.js