electron之serialPort (扫码枪以串口形式监听扫描的数据)

注意:不同厂家的扫码枪开启串口数据模式可能不一样,具体联系厂家开启其串口通讯;
在electron环境下,新开一个子窗口用于监听扫码枪窗口程序,具体代码如下
创建qrCode.html 在配置文件 main.js

// mainWindow.on('closed', function () {
   // qrCodeWindow.close();
  //  mainWindow = null;
    //qrCodeWindow=null
 // })


app.on('ready', ()=>{
  createWindow();
  qrCode();
})
app.on('activate', function () {
   // macOS中点击Dock图标时没有已打开的其余应用窗口时,则通常在应用中重建一个窗口
  if (mainWindow === null) {
    createWindow()
    qrCode()
  }
})
function qrCode(){
  qrCodeWindow = new BrowserWindow({
    title: '二维码串口数据捕获',
    show: false,
    width: 800,
    height: 600,
    webPreferences: {
      nodeIntegration: true, //开启渲染进程中调用模块  即require
    }
  })
  qrCodeWindow.loadFile('./build/qrCode/qrCode.html');//子窗口路径
 
  ipcMain.on('qrBegin', (event, obj) => {//监听开始
    qrCodeWindow.webContents.send('begin', obj);
  })

  ipcMain.on('qrStart', (event, obj) => { //监听的结果返回
    mainWindow.send('qrResult',obj) 
  })
}

qrCode.html如下

 const { ipcRenderer } = require('electron');
    var serialPort = require("serialport");
    var SerialPort = serialPort.SerialPort;
    serialPort.list(function (err, ports) {
        ports.forEach(function (port) {
            begin(port.comName)
        });
    function begin(port) {
        var comName = port;
        var port = new serialPort(comName, {
            baudRate:9600, //波特率
            autoOpen: false,
            dataBits: 8, //数据位
            parity: 'none', //奇偶校验
            stopBits: 1, //停止位
            flowControl: false
        });
        port.open(function (error) {
            if (error) return;
            //所有数据发送到串口时
            port.drain(function (error) {
                if (!error) {
                    port.on('data', function (data) {
                        let obj ={};
                        console.log(data)
                        obj.code = Uint8ArrayToString(data)
                        ipcRenderer.send('qrStart',obj)//发送到主程序,在需要用到的地方做监听即可。
                    });
                   
                }
            })
        })
    }
    //uni8转字符串
    function Uint8ArrayToString(fileData) {
        var dataString = "";
        for (var i = 0; i < fileData.length; i++) {
            dataString += String.fromCharCode(fileData[i]);
        }
        return dataString;
    }

使用的地方代码如下

const { ipcRenderer } = require('electron');
ipcRenderer.send('qrBegin');  //监听开始 ,在整个程序中此处只需要执行一次
ipcRenderer.removeAllListeners('qrResult')  //先移除监听,避免多次进当前页面导致重复监听
ipcRenderer.on('qrResult',(e,code)=>{
            console.log(code) //获得扫码枪串口发送过来的数据
    })
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容