当前位置: 首页 > news >正文

使用Node.js进行串口通信

目录

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

一、 安装 serialport 库

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

npm install serialport

二.、实现方法

1.打开串口并配置参数

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

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 方法向串口发送数据。

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

3. 接收串口信息

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

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

4. 处理错误

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

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

5. 关闭串口

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

// 关闭串口
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 解析器来处理分包问题。

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() 方法获取当前系统中可用的串口列表。

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

三、 完整示例代码

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

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秒后关闭串口
});

http://www.dtcms.com/a/18361.html

相关文章:

  • 1.推荐算法基本概念
  • 基于Ceedling的嵌入式软件单元测试
  • Lineageos 22.1 aosp15 定制学习专栏介绍
  • MySQL无法连接到本地localhost的解决办法2024.11.8
  • DHCP协议概述
  • 【JS】实现一个hexo插件并发布
  • 相机姿态估计
  • SQL-leetcode—1527. 患某种疾病的患者
  • 1.【线性代数】——方程组的几何解释
  • springboot026在线文档管理系统
  • 深入剖析 Apache Shiro550 反序列化漏洞及复现
  • boss直聘登录 网易易盾 无感 滑块 分析
  • 本地DataGrip连接Linux服务器中MySQL失败处理方法
  • Nginx进阶篇 - nginx多进程架构详解
  • IGBT的两级关断
  • python导入模块的方式
  • 团结引擎 OpenHarmony 平台全面支持 UAAL,实现引擎能力嵌入原生应用
  • 把 DeepSeek1.5b 部署在显卡小于4G的电脑上
  • Rocky Linux 9.4 安装 VirtualBox 7.1
  • 《探秘小批量梯度下降:批量大小如何左右算法性能》
  • AI全栈开发_人工智能AI大模型 Prompt提示词工程详解(全方位介绍及运用)
  • 应急响应(linux 篇,以centos 7为例)
  • 秘密信息嵌入到RGB通道的方式:分段嵌or完整嵌入各通道
  • uniapp语音时的动态音波的实现
  • 木材表面缺陷检测数据集,支持YOLO+COCO JSON+PASICAL VOC XML+DARKNET格式标注信息,平均正确识别率95.0%
  • Linux 服务器部署deepseek
  • 多媒体术语扫盲备忘录
  • SAP-ABAP:SAP的Screen Layout Designer屏幕布局设计器详解及示例
  • c#中“事件-event”的经典示例与理解
  • nsc account 及user管理