Electron串口通信

安装串口

// serialport版本不一样则使用方法有差异,这里使用10.4.0版本
npm install --save serialport
npm install --save serialport@10.4.0

串口工具

工具用来测试读取串口是否成功连上

SerialPort

属性

  • path
  • baudRate
  • isOpen
  • binding

事件

  • open 端口打开时触发;
  • error 发送错误时触发;
  • close 端口关闭时触发;
  • data 收到数据时触发;
  • drain 如果write方法返回false,则再次调用write方法时将触发该事件;

方法

  • open(() => {}): void 打开端口;
  • update(options: updateOptions, callback?: err => {}): void 更改波特率;
  • write(data: string|Buffer|Array<number>, en[**coding**](https://www.lsjlt.com/tag/coding/)?: string, callback?: error => {}): boolean 发送数据;
  • read(size?: number): string|Buffer|null 读取数据;
  • close(callback?: error => {}): void 关闭端口;
  • set(options: setOptions, callback?: error => {}): void 设置流控制;
  • get(callback: (error, data: ModemStatus) => {}): void 获取已打开端口的流控制状态;
  • flush(callback? error => {}):void 清空接收和发送缓存中未处理数据;
  • drain(callback? error => {}):void 等待数据发送完成;
  • pause(): this 暂停 flowing mode 触发data事件,转为 paused mode;
  • resume(): this 恢复 data 事件,从 paused mode 转为 flowing mode;

代码使用

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

const serialport = new SerialPort({
  path:"COM3", // 串口号
  baudRate:9600, // 波特率
  dataBits:8, // 数据位
  parity:"none", // 奇偶校验
  stopBits:1, // 停止位
  autoOpen:false // 是否自动打开端口
});
// 打开串口
serialport.open((err) => {
  if(err) {
    return console.log('Err: ', err);
  }
  console.log('端口打开成功!');
});

serialport.removeAllListeners();  //清除所有监听器
// 串口数据监听
serialport.on("data",data=>{
  console.log('Data:', data)  // data为监听到的内容,即下位机返回的数据
})
// 串口关闭
serialport.on("close", () =>{
  console.log('串口关闭')
})
// 错误监听
serialport.on('error', (err) =>{
  console.log('error: ' err)
})

// 发送数据,实现下行数据
serialport.write('Hello world!\n'); // 发送字符串
serialport.write(Buffer.from('Hey!\n')); // 发送Buffer数据

数据处理

如果串口传递过来的数据,被一段一段的切分开,这样就会很难处理数据,
例如: 原数据为01 3D 47 00 00 12 A4 32 33
可第一次接收到的就为 01 3 剩下的D 47 00 00 12 A4 32 33 会被遗留到第二次发送

解决方法

  • 数据粘包与分包
  • 建立缓存区对数据进行合并拆分
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容