使用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秒后关闭串口
});
相关推荐
_Kayo_1 小时前
Node.JS 学习笔记7
笔记·学习·node.js
程序员爱钓鱼3 小时前
Node.js 编程实战:博客系统 —— 用户注册登录与文章管理
前端·后端·node.js
JaredYe4 小时前
用 Node.js 从旧版 PPT 中提取文本:轻量开源工具 ppt-to-text
node.js·powerpoint·ppt
TDengine (老段)4 小时前
TDengine Node.js 语言连接器入门指南
大数据·开发语言·物联网·node.js·vim·时序数据库·tdengine
余道各努力,千里自同风4 小时前
node.js 操作 MongoDB
数据库·mongodb·node.js
爱敲代码的婷婷婷.4 小时前
patch-package 修改 node_modules流程以及注意点
前端·react native·前端框架·node.js
一念一花一世界5 小时前
Arbess项目实战 - 基于GitLab搭建Node.js项目自动化流水线
ci/cd·node.js·自动化·gitlab·arbess
全栈前端老曹5 小时前
【包管理】npm最常见的10大问题故障和解决方案
前端·javascript·rust·npm·node.js·json·最佳实践
咔咔一顿操作5 小时前
nvm安装Node后node -v正常,npm -v提示“无法加载文件”问题解决
前端·npm·node.js
zsd_315 小时前
npm指定本地缓存、安装包、仓库路径
前端·缓存·npm·node.js·私服·安装包·本地