首页 > 其他分享 >quasar项目中用js调用串口

quasar项目中用js调用串口

时间:2024-06-21 17:13:12浏览次数:13  
标签:vue quasar serialport electron eslint 串口 js

参考链接:

电脑上已有的端口 :(选择“在新标签页中打开图片”查看原图

看到网页能直接调串口,我本来想直接用网页调用的方式在electron中使用,但electron中没有弹窗,所以后来换成了 Node SerialPort  。

不过在这里还是先看一下网页如何和串口通信: Web Serial API,web端通过串口与硬件通信

  1. 检查浏览器是否支持Web Serial API:  "serial" in navigator ,true表示支持,再进行下一步
  2. 控制台输入  const port = await navigator.serial.requestPort(); 浏览器会弹窗电脑上有的串行端口

经过试验,项目打包成electron时这个弹窗出不来。 所以我只能换了方向,使用 Node SerialPort  。

Node SerialPort 使用中也有很多坑,我最后确定的配置是:quasar1+vue2项目、[email protected]  ,其它版本都不能正常打包成electron并获取串口信息。

以下是步骤:

首先创建quasar1+vue2的项目: npm init quasar (用quasar2+vue3会报错 TypeError: Class extends value undefined is not a constructor or null at node_modules/@serialport/parser-byte-length/dist/index.js )

 然后选择低版本的 quasar1+vue2

剩下的按默认选择即可:

成功后在vscode中打开项目,现在package.json如下:

  "dependencies": {
    "@quasar/extras": "^1.0.0",
    "core-js": "^3.6.5",
    "quasar": "^1.0.0"
  },
  "devDependencies": {
    "@babel/eslint-parser": "^7.13.14",
    "eslint": "^8.10.0",
    "eslint-plugin-vue": "^9.0.0",
    "eslint-webpack-plugin": "^2.0.0",
    "eslint-config-prettier": "^8.1.0",
    "prettier": "^2.5.1",
    "@quasar/app": "^2.0.0"
  },

安装 [email protected](其它版本也会报错,很多错误) :  npm i [email protected] 

  "dependencies": {
    "@quasar/extras": "^1.0.0",
    "core-js": "^3.6.5",
    "quasar": "^1.0.0",
    "serialport": "^10.5.0"
  },
  "devDependencies": {
    "@babel/eslint-parser": "^7.13.14",
    "@quasar/app": "^2.0.0",
    "eslint": "^8.10.0",
    "eslint-config-prettier": "^8.1.0",
    "eslint-plugin-vue": "^9.0.0",
    "eslint-webpack-plugin": "^2.0.0",
    "prettier": "^2.5.1"
  },

 然后安装electron模式  quasar mode add electron 

 "dependencies": {
    "@quasar/extras": "^1.0.0",
    "core-js": "^3.6.5",
    "quasar": "^1.0.0",
    "serialport": "^10.5.0"
  },
  "devDependencies": {
    "@babel/eslint-parser": "^7.13.14",
    "@quasar/app": "^2.0.0",
    "devtron": "^1.4.0",
    "electron": "^9.4.4",
    "electron-debug": "^3.2.0",
    "electron-devtools-installer": "^3.2.0",
    "eslint": "^8.10.0",
    "eslint-config-prettier": "^8.1.0",
    "eslint-plugin-vue": "^9.0.0",
    "eslint-webpack-plugin": "^2.0.0",
    "prettier": "^2.5.1"
  },

 这个时候配置已经完成了,把 electron-serialport 中 renderer.js 里的代码拷贝粘贴到 Index.vue 中(其它页面也可以,只是为了保证这段代码运行),改成对应的vue格式

<template>
  <div>
    <h4>测试串口</h4>
    <p v-for="item in myports" :key="item.path">
      {{ item }}
    </p>
  </div>
</template>

<script>
import { SerialPort } from 'serialport'
export default {
  data() {
    return {
      myports: [],
    }
  },
  mounted() {
    setInterval(() => {
      this.listSerialPorts();
    }, 2000);
  },
  methods: {
    async listSerialPorts() {
      let self = this;
      await SerialPort.list().then((ports, err) => {
        if (err) {
          console.log('ERROR', err.message);
          return
        }
        if (ports.length === 0) {
          console.log('NO PORTS');
        }
        console.log('ports', ports);
        self.myports = ports;
      })
    }
  }
}
</script>

 运行项目到electron:  quasar dev -m electron 

运行结果:


 以下是常见问题:

bug1:

 ERROR  Failed to compile with 12 errors                                                                                                                                                                                  16:40:54
 error  in ./node_modules/@serialport/parser-byte-length/dist/index.js      

Module parse failed: Unexpected token (11:10)
File was processed with these loaders:
 * ./node_modules/@quasar/app/lib/webpack/loader.transform-quasar-imports.js
You may need an additional loader to handle the result of these loaders.    
|  */
| class ByteLengthParser extends stream_1.Transform {
>     length;
|     position;
|     buffer;

 @ ./node_modules/serialport/dist/index.js 17:13-54
 @ ./node_modules/@quasar/app/lib/webpack/loader.transform-quasar-imports.js!./node_modules/babel-loader/lib??ref--2-0!./node_modules/@quasar/app/lib/webpack/loader.auto-import-client.js?kebab!./node_modules/vue-loader/lib??vue-loader-options!./src/pages/Index.vue?vue&type=script&lang=js
 @ ./src/pages/Index.vue?vue&type=script&lang=js
 @ ./src/pages/Index.vue
 @ ./src/router/routes.js
 @ ./src/router/index.js
 @ ./.quasar/app.js
 @ ./.quasar/client-entry.js
 @ multi (webpack)-dev-server/client?http://0.0.0.0:8080 (webpack)/hot/dev-server.js ./.quasar/client-entry.js

原因:serialport版本不对,直接 npm i seralport装的是最新版,如 package.json 中  "serialport": "^12.0.0" (2024/6/21)  

解决方法:更换版本  npm i [email protected]  ,  package.json 中   "serialport": "^10.5.0" 

 如果你的中文是乱码,说明serialport版本装成 10.3.0了,换成 10.5.0即可。

 bug2:

TypeError: Class extends value undefined is not a constructor or null at node_modules/@serialport/parser-byte-length/dist/index.js

 原因:用了Quasar2+Vue3

解决办法:重建项目,选择Quasar1+Vue2

标签:vue,quasar,serialport,electron,eslint,串口,js
From: https://www.cnblogs.com/sunshine233/p/18260772

相关文章

  • MySQL 查数据转Json
    将数据库表里的字段查询出来并且连接成json格式的实现方法SELECTCONCAT('[',GROUP_CONCAT(JSON_OBJECT('key-name',col1,'keyname2',col2,……,'key-namen',coln)),']')asjson_resultFROMtablenamewherecol1=83结果会将查询的数据一行行用{}返回,行之间&qu......
  • js处理数据(过滤)
    复选框的值这里为true或false选中为true,未选中为false看看数据:type中的前面那些字母是固定的不会变括号里面的不固定,那就把固定的作为前缀去过滤,后面怎么变都无所谓,当checkbox三个值中的某个或某些值为false时,要把数据里面type中的前缀为对应值的数据过滤掉,当变为true时......
  • Node.js文字识别接口、文字录入、在线免费文字识别接口
    很多时候,“懒”并不是贬义词,只是人们在处理一些事情的时候,只想流程再简化一点,等待的时间再少一点,完成的速度再快一点。譬如二十几年前,无论严寒酷暑,人们想买东西只能走出家门,而且你所去的商店或者市场的产品可能并不尽如人意。反观现在,人们足不出户,可以通过电商平台货比N家,各种......
  • Node.js车牌识别、文档识别、OCR API-自动化录入信息
    为什么人工智能如此受关注?因为人工智能技术在图片处理以及在感知与认知等领域的不断突破,带来更高的效率。没错,智能机器人、人工智能技术衍生的产品已经开始替代人的工作。文字录入工作较为显著,OCR技术成为手动录入的杀手锏,图片识别、扫描识别多样化的解决方案层出不穷。......
  • Java串口框架jSerialComm替换rxtxcomm
    问题最开始使用的是rxtxcomm框架,部署时还要手动放驱动文件,而且后面没有进行维护,导致一些一些新系统不再支持,需要手动打包。<dependency><groupId>org.bidib.jbidib.org.qbang.rxtx</groupId><artifactId>rxtxcomm</artifactId><version>2.2</version><sc......
  • 幼儿园报名(抢注)js脚本
    测试页面:https://www.wjx.cn/vm/YsVYnK1.aspxdocument.querySelector("#q1").value="姓名";//性别;//constsex1={男:"#q2_1",女:"#q2_2"};//document.querySelector(sex1.男).click();document.querySelector("#q2_1").cl......
  • 计算机毕业设计项目推荐,33709基于协同过滤的旅游推荐系统的设计与实现(开题答辩+程序定
    摘 要本论文主要论述了如何使用python语言、Django框架开发一个旅游推荐系统,本系统将严格按照软件开发流程,进行各个阶段的工作,面向对象编程思想进行项目开发。在引言中,作者将论述该系统的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系统进行各个阶段分析......
  • 【JS逆向】寻找某乐网登录密码加密过程
    事先声明本文章仅为我个人记录学习进度,文章内容严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!目标目标:获取网站登录时提交的密码加密的过程地址:oauth.d.cn/auth/goLogin.html过程分析首先打开F12,然后在页面上输入账户密码,点击......
  • 若依框架页面新增时,富文本加入图片保存时出现:JSON parse error: Unexpected character
    在使用若依框架的富文本框新增时,如果插入一个图片的时候会出现一个JSONparseerror:Unexpectedcharacter('/'(code47)):maybea(non-standard)comment?(notrecognizedasonesinceFeature'ALLOW_COMMENTS'notenabledforparser);nestedexceptioniscom.fas......
  • 032java jsp ssm大学生第二课堂成绩单系统学生思想道德技术修养文体活动管理(源码+数据
     项目技术:SSM+Maven等等组成,B/S模式+Maven管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat7.x,8.x,9.x版本均可4.硬件环境:windows7/8/101G......