electron-vue 使用serialport库调用串口

electron-vue 使用serialport库调用串口
第一步新建electron-vue项目

vue init simulatedgreg/electron-vue my-project

第二步 依赖并运行项目

安装依赖 npm install || cnpm install
运行项目 npm run dev
打包 npm run build

到这一步electron-vue项目已经创建成功了,接下来我们开始使用serialport库。

第三步 安装 serialport 库

npm install serialport -save

第四步 通过 electron-rebuild 包重新编译原生模块

安装 electron-rebuild
npm install --save-dev electron-rebuild
然后命令行 运行 .\node_modules.bin\electron-rebuild.cmd 把 electron-rebuild 编译进去

第五步 使用
import serialport from 'serialport'
//或
var serialport = require("serialport").serialport;
//...
serialport.list().then(
    ports => {
        console.log(ports)
    }
)

到这里就结束了,但是实际操作中有很多坑要采,下面楼主就把踩得坑分享给大家

.\node_modules\.bin\electron-rebuild.cmd 重新编译完成之后, 运行 npm run dev  就会报错,
说明编译失败了。

解决办法:

运行命令 node-gyp rebuild --target=2.0.4 --arch=x64 --dist-url=https://atom.io/download/electron

--target = 2.0.4 是我使用的 electron 版本号,改成自己的就可以了

还有一种情况就是运行 node-gyp rebuild --target=2.0.4 --arch=x64 --dist-url=https://atom.io/download/electron 命令的时候也报错。

解决办法: 
手动编译
cd ./node_modules/@serialport/bindings
node-gyp rebuild --target=2.0.4 --arch=x64 --dist-url=https://npm.taobao.org/mirrors/atom-shell

因为墙的原因,所以使用淘宝镜像安装依赖即可。

这个 node-gyp 也需要提前安装一下

1.安装Python2.7 配置环境变量(官网下载)看网上说明必须是2.7版本,3不支持
2.安装 npm install --global --production windows-build-tools
3.安装node-gyp npm install -g node-gyp

### 如何在 Vue.js 中使用 `serialport` 实现串口通信 为了实现在 Vue.js 项目中通过 `serialport` 进行串口通信,可以采用 ElectronVue 的组合方式来构建应用。这是因为浏览器环境本身并不支持直接访问硬件资源如串口设备;而Electron则提供了这种能力。 #### 安装依赖包 首先,在项目的根目录下安装必要的 npm 包: ```bash npm install @serialport/parser-readline @serialport/stream serialport electron --save ``` 这一步骤确保了开发环境中具备处理串口数据所需的基础[^1]。 #### 主进程配置 (main.js 或 main.ts) 对于基于 Electron 构建的应用程序来说,所有的原生 Node.js API 调用都应当放在主进程中执行。因此,需要修改主进程文件(main.js),以便能够初始化并管理串口连接逻辑。 ```javascript const { app, BrowserWindow } = require('electron') const SerialPort = require('serialport') let mainWindow; function createWindow () { mainWindow = new BrowserWindow({ width: 800, height: 600, webPreferences: { preload: path.join(__dirname, 'preload.js'), nodeIntegrationInWorker: true, contextIsolation: false, enableRemoteModule: true } }) mainWindow.loadURL(`file://${__dirname}/index.html`) } app.on('ready', async() => { await createWindow(); const port = new SerialPort('/dev/ttyUSB0', {/* options */}); }) ``` 这里展示了如何创建一个新的窗口实例以及打开本地 HTML 文件作为渲染页面的同时建立了一个指向特定端口 `/dev/ttyUSB0` 的串口对象。 #### 渲染进程设置 (renderer process) 由于安全原因,默认情况下不允许前端 JavaScript 直接调用 Node.js 模块函数。所以如果想要让前端代码也能操作这些功能,则可以通过预加载脚本(preload.js)暴露部分接口给渲染器使用: ```javascript // preload.js const { ipcRenderer } = require('electron'); window.api = { sendSerialData(data){ ipcRenderer.send('send-serial-data', data); }, }; ``` 接着可以在组件内部利用上述定义好的 api 来发送消息到主进程去控制实际的物理层交互行为。 #### 组件内实现读写方法 最后回到 Vue 组件里编写具体的业务逻辑,比如监听按钮点击事件触发向指定串口号发送命令字符串的操作: ```html <template> <div id="app"> <!-- ... --> </div> </template> <script lang="ts"> import { defineComponent } from "vue"; export default defineComponent({ name:"MyComponent", methods:{ sendDataToSerial(){ window.api.sendSerialData("hello world"); } } }) </script> ``` 以上就是整个流程的大致介绍,当然具体细节还需要根据个人需求做适当调整[^2]。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值