上位机使用JS SerialPort进行串口通信, 包含开发环境搭建和完整示例代码
在嵌入式开发中,我们经常需要使用上位机(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 serialport@10.3.0
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开发技术
转载请注明出处,谢谢!
上位机使用JS SerialPort进行串口通信, 包含开发环境搭建和完整示例代码的更多相关文章
- 【强烈推荐,超详细,实操零失误】node.js安装 + npm安装教程 + Vue开发环境搭建
node.js安装 + npm安装教程 + Vue开发环境搭建 [强烈推荐,超详细,实操零失误] 原博客园地址:https://www.cnblogs.com/goldlong/p/8027997.h ...
- c#上位机与三菱PLC(FX3U)串口通讯
项目中会经常用到上位机与PLC之间的串口通信,本文介绍一下C#如何编写上位机代码 与三菱FX3U进行通讯 1. 第一种方法是自己写代码实现,主要代码如下: //对PLC的Y7进行置1 byte[] Y ...
- node.js之开发环境搭建
一.安装linux系统 (已安装linux可跳此步骤) 虚拟机推荐选择:VirtualBox 或者 Vmware (专业版永久激活码:5A02H-AU243-TZJ49-GTC7K-3C61N) 我这 ...
- Linux虚拟机中 Node.js 开发环境搭建
Node.js 开发环境搭建: 1.下载CentOS镜像文件和VMWare虚拟机程序; 2.安装VMWare——>添加虚拟机——>选择CentOS镜像文件即可默认安装带有桌面的Linux虚 ...
- windows下vue.js开发环境搭建教程
这篇文章主要为大家详细介绍了windows下vue.js开发环境搭建教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 最近,vue.js越来越火.在这样的大浪潮下,我也开始进入vue的学习行列中 ...
- 《Node.js入门》CentOS 6.5下Node.js Web开发环境搭建笔记
近期想尝试一下英特尔的基于WebRTC协同通信开发套件,所以须要在本地搭建Node.js Web的开发測试环境. 这里讲的是CentOS 下的搭建方法.使用Windows的小伙伴请參考: <No ...
- 嵌入式Linux学习笔记(六) 上位机QT界面实现和串口通讯实现
目录 (1).参考资料 (2).QT界面布局实现 (3).数据和操作逻辑 在上一章我们实现了下位机的协议制定,并通过串口通讯工具完成了对设备内外设(LED)的状态修改,下面就要进行上位机软件的实现了( ...
- 【精讲版】上位机C#/.NET与西门子PLC通信
618来啦 亲们,腾讯课堂101机构打榜了,快来助力<新阁教育>,<免费赠送课程>! 1.手机QQ(微信请也来一遍)扫下方二维码↓,找到<新阁教育> 2.点击“支持 ...
- Python 串口通信 GUI 开发
在项目中遇到树莓派串口通信问题.由于本人一直从事.net 开发,希望将树莓派系统换成Win10 IOT版.但是在测试过程中出现无法找到串口的问题.最终也没有解决.最终按照领导要求,linux (了解不 ...
- 在windows环境下基于sublime text3的node.js开发环境搭建
首先安装sublime text3,百度一堆,自己找吧.理论上sublime text2应该也可以.我只能说一句:这个软件实在是太强悍了. 跨平台,丰富的插件体系,加上插件基本上就是一个强悍的ide了 ...
随机推荐
- adb基本命令
adb基本命令 adb查看当前设备 adb devices adb覆盖安装app adb install -r 包地址 adb查看当前运行app的包名 adb shell "dumpsys ...
- How to boot the Raspberry Pi system from a USB Mass Storage Device All In One
How to boot the Raspberry Pi system from a USB Mass Storage Device All In One 如何从 USB 启动树莓派引导系统 / 如何 ...
- Java关键字break、continue 、return的区别,嵌套循环,数组的概念以及数组案例
一.关键字 break.continue .return的区别 1.break : 用于在switch..case中放置语句块穿透, 用于跳出循环 // 从1-100 遇到7的倍数 break f ...
- 驱动开发:内核实现SSDT挂钩与摘钩
在前面的文章<驱动开发:内核解析PE结构导出表>中我们封装了两个函数KernelMapFile()函数可用来读取内核文件,GetAddressFromFunction()函数可用来在导出表 ...
- 2 大数据实战系列-spark shell wordcount
1 启动spark shell cd /home/data/app/hadoop/spark-2.1.1-bin-hadoop2.7/bin ./spark-shell --master spark: ...
- Java杂记————object.getClass()和object.class以及Java中的toString()方法的的区别
不说废话,直接上干货: (注意大小写:object为对象,Object为类) 1,object.getClass()它是Object类的实例方法,返回一个对象运行时的类的Class对象,换句话说,它返 ...
- 即构SDK12月迭代:新增多项质量回调,互动白板、云录制SDK同步更新
即构SDK12月迭代来啦,本月LiveRoom/AudioRoom SDK新增了端到端延迟质量回调.房间会话ID信息,便于在音视频通话.直播场景中进行时延.通话质量的评测.同时还优化了硬件设备权限变更 ...
- 使用docker构建可动态启动的FreeSWITCH实例
操作系统 :CentOS 7.6_x64 FreeSWITCH版本 :1.10.9 Docker版本:23.0.6 使用docker打包FreeSWITCH可以极大简化部署环节,但针对高可用场景的 ...
- python 将中文数字转换成阿拉伯数字
日常遇到的中文数字主要有两种情况: 1."二零零一"这种类型,只包含[0-9]对应的十个中文字,需要转换成数字:2001.这种情况的转换十分简单. 2. "三百二十一&q ...
- DataArts Studio实践丨通过Rest Client 接口读取RESTful接口数据的能力
本文分享自华为云社区<DataArts Studio 通过Rest Client 接口读取RESTful接口数据的能力,通过Hive-SQL存储>,作者: 张浩奇 . Rest Clien ...