Web Serial API 串口通信与 Electron 实现扫码枪数据读取

近年来,随着物联网和智能设备的发展,Web Serial API 的出现使得网页应用能更好地与硬件设备进行交互,尤其是在涉及串口通信的场景中。本文将介绍如何利用 Web Serial API 实现与扫码枪的串口通信,并在 Electron 应用中读取数据。

一、Web Serial API 简介

Web Serial API 是一种用于在浏览器中访问连接的串行设备的技术。通过该 API,开发者可以直接与支持串口通信的外部设备进行连接,读取和发送数据。

二、基本环境搭建

在应用中集成 Web Serial API 首先需要确保你的浏览器支持该 API。目前,Chrome 和 Edge 等浏览器已提供原生支持。我们将使用 Electron 框架来构建桌面应用,因此确保你已安装好 Node.js 和 npm。

三、扫码枪的串口通信

扫码枪通常通过串口将扫描到的数据以文本形式发送。使用 Web Serial API,我们可以按照以下步骤进行串口通信:

  1. 请求连接设备
  2. 读取数据
  3. 处理数据

四、代码示例

下面是一个简单的 Electron 应用示例,演示如何通过 Web Serial API 连接扫码枪并读取数据。

// main.js
const { app, BrowserWindow } = require('electron');

function createWindow () {
  const win = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      contextIsolation: true,
      enableRemoteModule: false,
      preload: __dirname + '/preload.js'
    }
  });

  win.loadFile('index.html');
}

app.whenReady().then(createWindow);
// preload.js
const { contextBridge } = require('electron');

contextBridge.exposeInMainWorld('electron', {
  connectSerial: () => navigator.serial.requestPort(),
  readData: (port) => {
    return port.open({ baudRate: 9600 }).then(() => {
      const decoder = new TextDecoderStream();
      port.readable.pipeTo(decoder.writable);
      const reader = decoder.readable.getReader();
      return reader.read()
        .then(({ value, done }) => {
          reader.releaseLock();
          return value;
        });
    });
  }
});
<!-- index.html -->
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>扫码枪读取数据</title>
</head>
<body>
    <h1>扫码枪数据读取</h1>
    <button id="connectBtn">连接扫码枪</button>
    <p id="dataOutput"></p>

    <script>
        document.getElementById('connectBtn').addEventListener('click', async () => {
            try {
                const port = await electron.connectSerial();
                const data = await electron.readData(port);
                document.getElementById('dataOutput').innerText = `读取到的数据: ${data}`;
            } catch (error) {
                console.error('连接或读取失败', error);
                document.getElementById('dataOutput').innerText = '连接或读取失败';
            }
        });
    </script>
</body>
</html>

五、注意事项

  1. 权限问题:在连接串口之前,用户需要手动选择设备以提供访问权限。Web Serial API 会弹出一个系统对话框,允许用户选择可用的串口设备。
  2. 串口参数:扫码枪的波特率等串口参数需与实际设备相符,确保能够正确读取数据。
  3. 错误处理:在真实应用中,应当添加适当的错误处理逻辑,以提高用户体验。

六、总结

利用 Web Serial API 加上 Electron 框架,我们可以方便地与扫码枪等串口设备进行数据交互。这种技术不仅适用于扫码枪,还广泛适用于各种串口通信的应用场景,如传感器读取、设备控制等。未来,随着 Web Serial API 的不断完善,将会有更多的桌面和网页应用能够利用这一特性,实现与硬件设备的无缝连接。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部