首页 > 其他分享 >上位机使用JS SerialPort进行串口通信, 包含开发环境搭建和完整示例代码

上位机使用JS SerialPort进行串口通信, 包含开发环境搭建和完整示例代码

时间:2023-09-12 14:56:35浏览次数:54  
标签:console log err 示例 SerialPort 串口 port

在嵌入式开发中,我们经常需要使用上位机(PC)与一些电路模块进行通信, 用于获取一些传感器的数据,或者发送命令控制相应的电路模块。NodeJS目前支持使用SerialPort模块进行串口通信,本文主要介绍如何搭建测试开发环境和如何使用SerialPort进行串口通信。

 

开发前准备:

1. 下载安装NodeJS: Node.js (nodejs.org)

2. 下载安装虚拟串口工具: Virtual Serial Port Driver (可自行搜索下载, 用于模拟虚拟串口使用,如果你的机子上已经有物理的串口模块,则不需要此软件)

3. 下载安装串口调试工具: 友善串口调试助手 (可自行搜索下载)

 

使用虚拟串口工具Virtual Serial Port Driver 虚拟出串口用于开发调试(如果已经有物理串口模块,则不需要创建虚拟串口)

1. 打开软件,选择Pair, 用于创建一个串口对:

 

2. 点击Create正式创建出串口对:

 

3. 创建完成后如下图所示,系统已经虚拟出了两个串口COM1和COM2, 这两个串口为一个串口对,往COM1或者COM2发送数据,则另一个串口将会收到相应的数据:

 

 

开发流程:

1. 首先新建一个开发目录,例如serial-port目录,在开发目录中,安装SerialPort模块

npm install [email protected]

 

2. 安装完成后,新建一个index.js文件,在代码中引入SerialPort模块

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

 

3. 获得串口列表代码:

const ports = await SerialPort.list();
console.log(ports.map(port => port.path + ":" + port.friendlyName).join("\n"));

上面的代码可以打印出类似如下的串口信息

COM1:Electronic Team Virtual Serial Port (COM1->COM2)
COM2:Electronic Team Virtual Serial Port (COM2->COM1)

 

4. 打开COM1串口,并添加监听事件,用于接收串口发到上位机的数据

const port = new SerialPort({ path: "COM1", baudRate: 9600, autoOpen: false });

port.on('error', err => { console.log('发生错误: ' + err.message + "\n"); }); port.on('data', data => { console.log('收到数据: ' + data + "\n"); }); port.open(function (err) { if (err) { console.log('端口打开失败: ' + err.message + "\n");return; } console.log('打开端口成功' + "\n"); });

 

5. 向COM1串口发送数据

try {
  port.write("你好"+ "\n");
}
catch (err) {
  console.log('发送数据失败: ' + err.message+'\n');
}

 

6.完整的示例代码如下所示:

const { SerialPort } = require('serialport');
async function testSerialPort() {
const ports = await SerialPort.list();
console.log(ports.map(port => port.path + ":" + port.friendlyName).join("\n"));

    const port = new SerialPort({ path: "COM1", baudRate: 9600, autoOpen: false });

    port.on('error', err => {
      console.log('发生错误: ' + err.message + "\n");
    });

    port.on('data', data => {
      console.log('收到数据: ' + data + "\n");
    });

    port.open(function (err) {
      if (err) {
        console.log('端口打开失败: ' + err.message + "\n");
        return;
      }
      console.log('打开端口成功' + "\n");

    try {
      port.write("你好"+ "\n");
    }
    catch (err) {
      console.log('发送数据失败: ' + err.message+'\n');
    }
});
}
testSerialPort();

 

 

测试流程:

1. 打开串口调试工具,并连接COM2串口,如下图所示:

 

 2.打开成功后,如下图所示 

 

3.运行刚才开发的代码,可以在串口调试助手里看到发送的消息

 

4. 同理,在调试助手里发送数据,则可以在运行的代码中接收到相应的数据。

 

本博文发表于:https://www.cnblogs.com/reachteam/p/17509696.html

发布者:H5开发技术

转载请注明出处,谢谢!

标签:console,log,err,示例,SerialPort,串口,port
From: https://www.cnblogs.com/reachteam/p/17696071.html

相关文章

  • 通过FPGA实现基于RS232串口的指令发送并控制显示器中目标位置
    1.算法理论概述       通过FPGA实现基于RS232串口的指令发送并控制显示器中目标位置是一种常见的应用场景,用于实现对显示器中目标位置的控制。该系统利用FPGA芯片作为主控制器,通过RS232串口与计算机或其他设备进行通信,接收指令并解析,然后控制显示器中目标位置的移动。该......
  • kunyu 工具的常见案例和示例命令
    kunyu工具的常见案例和示例命令:基本主机搜索:执行基本的主机搜索,以获取有关特定域或IP地址的信息。 SearchHostexample.com基本Web搜索:执行基本的Web搜索,以查找与特定查询条件相关的网站。 SearchWeb"vulnerabilitiesinWordPress"SSL证书搜索:搜索与指......
  • 读取串口数据
    ///<summary>///压力传感器///</summary>publicclassForceSensor{privatestaticSerialPort_serialPort=newSerialPort();///<summary>///初始化参数///</summary>publicstaticvoidInitForceSensor(){......
  • 优秀的 Modbus 主站(主机、客户端)仿真器、串口调试工具
    [TOC]优秀的Modbus主站(主机、客户端)仿真器、串口调试工具modbusmaster,modbus,串口,工控,物联网,PLC,嵌入式官网下载地址:http://www.redisant.cn/mme主要功能支持多种Modbus协议,包括:ModbusRTUModbusASCIIModbusTCP/IPModbusUDP/IPModbusRTUOverTCP/IPModbusRTUOverUD......
  • 优秀的 Modbus 主站(主机、客户端)仿真器、串口调试工具
    目录优秀的Modbus主站(主机、客户端)仿真器、串口调试工具主要功能软件截图优秀的Modbus主站(主机、客户端)仿真器、串口调试工具modbusmaster,modbus,串口,工控,物联网,PLC,嵌入式官网下载地址:http://www.redisant.cn/mme主要功能支持多种Modbus协议,包括:ModbusRTUModb......
  • cmake基础示例:如何编译【跨平台】的动态库和应用程序
    示例代码首先看一下测试代码的全貌:mylib:只有一个源文件,编译输出一个动态库;myapp:也只有一个源文件,链接mylib动态库,编译输出一个可执行程序; mylib在mylib目录中,一共有3个文件:mylib.h,mylib.c以及CMakeLists.txt,内容分别如下://mylib/mylib.hw文件#ifndef_M......
  • 重构第一个示例
    《重构改善既有代码的设计》马丁富勒 第一章戏剧演出团原始代码invoices.json[{"customer":"BigCo","performances":[{"playId":"hamlet","audience":55},{"......
  • CH59X/CH58X/CH57X sleep模式下串口唤醒收发数据
    整体程序逻辑:下方的具体程序及使用是基于CH592进行的SLEEP模式睡眠唤醒是由协议栈管理的,还在睡眠时,无法接收到数据。已经通过使能HAL_SLEEP开启睡眠。如果需要在睡眠时实时接收串口传来的数据是不可行的,需要先将设备唤醒之后再进行串口数据的接收;将唤醒的条件设置为下降沿唤醒......
  • java 支持 超大上G,多附件上传示例解析
    ​ 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现。先说下要求:PC端全平台支持,要求支持Windows,Mac,Linux支持所有浏览器。支持文件批量上传支持文件夹上传,且要求在服务端保留层级结构。文件夹数量要求支持到10W......
  • 华为云ES导出数据脚本示例
      #!bash#接口用法#shexport-es-data.sh索引名称css密码cssIPindex=$1password=$2ip=$3value=$(curl-XPOST-uadmin:$2-k"https://${ip}:9200/${index}/_doc/_search?scroll=1m"-H'Content-Type:application/json'-d'{"siz......