Web 串口 API

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,某些或所有支持的浏览器中。

实验性: 这是一个实验性技术
在生产环境中使用之前,请仔细查看浏览器兼容性表

注意: 此功能在专用 Web 工作线程中可用。

Web 串口 API 提供了一种方法,使网站可以从串行设备读取数据并写入串行设备。 这些设备可以通过串行端口连接,也可以是模拟串行端口的 USB 或蓝牙设备。

概念和用法

Web 串口 API 是允许网站与连接到用户计算机的外围设备通信的一组 API 中的一个。 它提供连接到需要通过串行 API 通信的设备(而不是 USB,可以通过WebUSB API访问)的能力,或者可以通过WebHID API访问的输入设备。

串行设备的示例包括 3D 打印机和微控制器,例如BBC micro:bit 板

接口

Serial 实验性

提供从网页查找和连接到串行端口的属性和方法。

SerialPort 实验性

提供对主机设备上的串行端口的访问。

对其他接口的扩展

返回一个Serial 对象,该对象代表进入 Web 串口 API 的入口点,以启用对串行端口的控制。

WorkerNavigator.serial 只读 实验性

返回一个Serial 对象,该对象代表进入 Web 串口 API 的入口点,以启用对串行端口的控制。

示例

以下示例演示了 Web 串口 API 提供的一些功能。

检查可用端口

以下示例演示如何检查可用端口,并允许用户授予它访问其他端口的权限。

connectdisconnect 事件使网站能够在设备连接或断开连接时做出反应。 然后调用getPorts() 方法来查看网站已具有访问权限的已连接端口。

如果网站没有访问任何已连接端口的权限,它必须等到有用户激活才能继续执行。 在此示例中,我们使用按钮上的click 事件处理程序来执行此任务。 将过滤器传递给requestPort(),其中包含 USB 供应商 ID,以将显示给用户的设备集限制为仅由特定制造商制造的 USB 设备。

js
navigator.serial.addEventListener("connect", (e) => {
  // Connect to `e.target` or add it to a list of available ports.
});

navigator.serial.addEventListener("disconnect", (e) => {
  // Remove `e.target` from the list of available ports.
});

navigator.serial.getPorts().then((ports) => {
  // Initialize the list of available ports with `ports` on page load.
});

button.addEventListener("click", () => {
  const usbVendorId = 0xabcd;
  navigator.serial
    .requestPort({ filters: [{ usbVendorId }] })
    .then((port) => {
      // Connect to `port` or add it to the list of available ports.
    })
    .catch((e) => {
      // The user didn't select a port.
    });
});

从端口读取数据

以下示例演示如何从端口读取数据。 外部循环处理非致命错误,创建新的读取器,直到遇到致命错误并且SerialPort.readable 变为 null

js
while (port.readable) {
  const reader = port.readable.getReader();
  try {
    while (true) {
      const { value, done } = await reader.read();
      if (done) {
        // |reader| has been canceled.
        break;
      }
      // Do something with |value|...
    }
  } catch (error) {
    // Handle |error|...
  } finally {
    reader.releaseLock();
  }
}

规范

规范
Web 串口 API
# serial-interface

浏览器兼容性

BCD 表仅在浏览器中加载

另请参阅