Kehaw

Electron使用串口通信


Electron使用串口通信比调用DLL更加方便,在串口通信中,需要首先安装依赖:

npm install --save serialport

然后我们在src/background.ts中加入调用串口的代码即可。

一个简单的例子如下:

const SerialPort = require('serialport')
const port = new SerialPort('/dev/tty-usbserial1', {
  baudRate: 57600
})

其中,串口的路径是必须的(即第一个形参),而所有的选项则都不是必须的(第二个形参)。

构造SerialPort对象会立即打开一个端口。 尽管可以随时读写(操作将排队直到打开端口),但是大多数端口功能都需要打开端口。 有三种方法可以检测端口何时打开。

  • 打开端口时始终会发出open事件。
  • 如果尚未禁用autoOpen选项,则将构造函数的openCallback传递给.open()函数。 如果已禁用它,则回调将被忽略。
  • .open()函数接受在打开端口后调用的回调。 如果禁用了autoOpen选项或先前已关闭开放端口,则可以使用此功能。
const SerialPort = require('serialport')
const port = new SerialPort('/dev/tty-usbserial1')

port.write('main screen turn on', function(err) {
  if (err) {
    return console.log('Error on write: ', err.message)
  }
  console.log('message written')
})

// Open errors will be emitted as an error event
port.on('error', function(err) {
  console.log('Error: ', err.message)
})

上面的代码是通过.on()函数来检测错误,同时检测错误的代码也可以写入到.write()函数的回调函数中。

const SerialPort = require('serialport')
const port = new SerialPort('/dev/tty-usbserial1', function (err) {
  if (err) {
    return console.log('Error: ', err.message)
  }
})

port.write('main screen turn on', function(err) {
  if (err) {
    return console.log('Error on write: ', err.message)
  }
  console.log('message written')
})

Auto Open

如果你禁用了 autoOpen 选项,则你就需要手动的通过 .open() 函数打开。

const SerialPort = require('serialport')
const port = new SerialPort('/dev/tty-usbserial1', { autoOpen: false })

port.open(function (err) {
  if (err) {
    return console.log('Error opening port: ', err.message)
  }

  // Because there's no callback to write, write errors will be emitted on the port:
  port.write('main screen turn on')
})

// The open event is always emitted
port.on('open', function() {
  // open logic
})

读取数据

获取数据可能是串口通信最简单的部分了(其实其他的也很简单)

// Read data that is available but keep the stream in "paused mode"
port.on('readable', function () {
  console.log('Data:', port.read())
})

// Switches the port into "flowing mode"
port.on('data', function (data) {
  console.log('Data:', data)
})

// Pipe the data into another stream (like a parser or standard out)
const lineStream = port.pipe(new Readline())

测试也比较简单,直接通过port对象写入一些数据就可以了:

port.write('Hi Mom!')
port.write(Buffer.from('Hi Mom!'))

就是这么简单。

更详细的可以参考这里

Kehaw

👨‍💻Ke Haw 🇨🇳👨‍👩‍👧‍👦

风吹云散去,夜色好观星
Java | 前端 | 大数据

专注于 Spring Cloud 微服务架构与数据处理,研究一切与Java相关的开发技术,包括一部分前端技术。

目前的工作主要是关于B2B大宗商品在线交易领域的数据处理。如果对本站的部分内容感兴趣,请通过邮件、Twitter联系我🤝。

Fork me on Gitee
基于Spring Security + OAuth2 + JWT 的权限认证(一) Java-Stream学习第四步:数据处理 Java-Stream学习第三步:终端操作 Java-Stream学习第二步:处理流 Java-Stream学习第一步:创建流 Electron使用串口通信 Electron下调用DLL文件 国外SaaS服务供应商都是干什么的:Part1 为什么Kafka会丢失消息 Spring Boot中使用JSR380验证框架
Description lists
Kehaw's blog
Site description
人初做事,如鸡伏卵,不舍而生气渐充;如燕营巢,不息而结构渐牢;如滋培之木,不见其长,有时而大;如有本之泉,不舍昼夜,盈科而后进,放乎四海。
Copyright
© 2014 Copyright Kehaw | All rights reserved.