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!'))

就是这么简单。

转载地址

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值