前端使用SerialPort串口通信

ops/2024/12/24 2:28:16/

一、下载npm install serialport

二、在vue页面中引入使用

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

这是serialport官方文档写的很完整,有什么问题可以看文档。

三、初始化SerialPort

在mounted或者onLoad中初始化,默认创建的SerialPort对象就会打开端口。path串口名称,baudRate波特率

        // 初始化串口initSerialPort(value = 'COM20') {// 关闭已打开的串口this.closeSerialPort();// 创建新的 SerialPort 实例this.port = new SerialPort({ path: value, baudRate: 115200 }, (err) => {if (err) {console.error('Error opening serial port:', err);this.SerialLink = `${this.$t('Connected', this.language)},${err}`;if (err == 'Error: Opening COM20: File not found') {this.initSerialPort('COM9');}// 可以在这里添加错误处理逻辑} else {console.log('Serial port opened successfully.');this.SerialLink = this.$t('connected', this.language);this.onData();}});// 监听串口错误this.port.on('error', (err) => {console.error('Serial port error:', err);});},

添加autoOpen为false改为关闭,手动打开open方法

this.port = new SerialPort({ path: value, baudRate: 115200 }, { autoOpen: false })
this.port.open()

三、on方法监听串口传输的信息

this.port.on('data', (data) => {console.log(data)
})

四、write方法向串口发送信息

this.port.write(Buffer.from('reset
'));

五、close方法关闭串口连接

        closeSerialPort() {if (this.port && this.port.isOpen) {this.port.close(() => {console.log('Serial port closed.关闭串口');});}},

六、还有一些官方自带的解析器(对我来说没啥用)

自行查看官方文档https://serialport.io/docs/api-parsers-overview

在接受指定的字节数后返回
const { ByteLengthParser } = require('@serialport/parser-byte-length');
const parser = this.port.pipe(new ByteLengthParser({ length: 8 }))

注意当前端处理高频数据流时会丢失数据100/s的数据(电脑性能越低越明显)

七、串口数据解析

1.二进制数据转十六进制的字符串

parseData(arrBytes) {var str = '';for (var i = 0; i < arrBytes.length; i++) {var tmp;var num = arrBytes[i];if (num < 0) {//此处填坑,当byte因为符合位导致数值为负时候,需要对数据进行处理tmp = (255 + num + 1).toString(16);} else {tmp = num.toString(16);}if (tmp.length == 1) {tmp = '0' + tmp;}str += tmp;}return str;
}

2.二进制数据,解码成一个文本字符串

parseUint8Array(data) {const decoder = new TextDecoder('utf-8');const text = decoder.decode(data);return text
}

http://www.ppmy.cn/ops/144450.html

相关文章

HCIA-Access V2.5_4_1_1路由协议基础_IP路由表

大型网络的拓扑结构一般会比较复杂&#xff0c;不同的部门&#xff0c;或者总部和分支可能处在不同的网络中&#xff0c;此时就需要使用路由器来连接不同的网络&#xff0c;实现网络之间的数据转发。 本章将介绍路由协议的基础知识、路由表的分类、静态路由基础与配置、VLAN间…

如何将多张图片合并为一个pdf?多张图片合并成一个PDF文件的方法

如何将多张图片合并为一个pdf&#xff1f;当我们需要将多张图片合并为一个PDF文件时&#xff0c;通常是因为我们希望将这些图片整理成一个统一的文档&#xff0c;方便查看、分享或打印。无论是工作中需要提交的报告、学生们需要整理的作业&#xff0c;还是个人收藏的照片、旅行…

Unity打包微信小游戏

一、Unity打包微信小游戏可以用两种方法 一个是通过Unity的团结引擎&#xff0c;团结引擎的话跟着官网走就可以了团结引擎 - 手册: 快速上手 (unity.cn)还有一个是直接通过Unity去打包出来微信小游戏&#xff0c;参考该文章Unity项目转微信小游戏 微信小程序保姆教程&#xff…

第20天:JS信息收集-Web应用JS架构URL提取数据匹配Fuzz接口WebPack分析自动化

#知识点 1、信息收集-Web应用-JS提取分析-人工&插件*项目 2、信息收集-Web应用-JS提取分析-URL&配置&逻辑 标签 名称 地址 FUZZ测试 ffuf GitHub - ffuf/ffuf: Fast web fuzzer written in Go 匹配插件&#xff08;bp) Hae GitHub - gh0stkey/HaE: HaE - H…

MQTT实现集群分布式消费

今天被问到启用多个应用消费时&#xff0c;每个消费者都会受到订阅消息的事。很久前用过&#xff0c;这里梳理记录一下&#xff1a; MQTT协议本身是支持共享订阅功能。 这里这个共享订阅比较特殊&#xff0c;他有点类似kafka的消费组的概念。但是设计和实现上区别比较大。 设…

数据可视化echarts学习笔记

目录&#xff0c;介绍 知识储备 一端操作&#xff0c;多端联动的效果&#xff08;开启了多个网页&#xff0c;操作一端&#xff0c;多个网页的效果会跟着改变&#xff09; cmd命令控制面板返回上一级或上上级 在当前目录打开文件&#xff1a; cd 文件名 在Windows命令提示符&am…

群落生态学研究进展】Hmsc包开展单物种和多物种分析的技术细节及Hmsc包的实际应用

联合物种分布模型&#xff08;Joint Species Distribution Modelling&#xff0c;JSDM&#xff09;在生态学领域&#xff0c;特别是群落生态学中发展最为迅速&#xff0c;它在分析和解读群落生态数据的革命性和独特视角使其受到广大国内外学者的关注。在学界不同研究团队研发出…

QT多媒体开发(二):播放音频

简介 QMediaPlayer 可以用于播放经过压缩的音频文件&#xff0c;如 MP3 文件和 WMA 文件。QSoundEffect 可以 用于播放低延迟音效文件&#xff0c;例如无压缩的 WAV 文件。这两个类都可以用于播放本地文件和网络文件。 QMediaPlayer 与播放音频相关的接口函数如下&#xff1a…