SerialPort

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

实验性: 这是一项实验性技术
在生产中使用此技术之前,请仔细检查浏览器兼容性表格

注意:此功能在 专用 Web Workers 中可用。

Web Serial API 的 SerialPort 接口提供了对主机设备上串行端口的访问。

EventTarget SerialPort

构造函数

此接口的实例可通过调用 Serial 接口的方法来获取,因此它没有自己的构造函数。

实例属性

SerialPort.connected 只读 实验性

返回一个布尔值,指示端口是否已逻辑连接到设备。

SerialPort.readable 只读 实验性

返回一个 ReadableStream,用于从连接到端口的设备接收数据。

SerialPort.writable 只读 实验性

返回一个 WritableStream,用于向连接到端口的设备发送数据。

实例方法

SerialPort.forget() 实验性

返回一个 Promise,当对串行端口的访问被撤销时解析。调用此方法会“忘记”设备,重置任何先前设置的权限,以便调用站点无法再与端口通信。

SerialPort.getInfo() 实验性

返回一个包含端口可用的设备标识信息的对象。

SerialPort.open() 实验性

返回一个 Promise,当端口打开时解析。默认情况下,端口以 8 个数据位、1 个停止位和无奇偶校验进行打开。

SerialPort.setSignals() 实验性

设置端口上的控制信号,并返回一个 Promise,当信号设置完成后解析。

SerialPort.getSignals() 实验性

返回一个 Promise,当解析时,它将包含端口控制信号当前状态的对象。

SerialPort.close() 实验性

返回一个 Promise,当端口关闭时解析。

事件

connect 实验性

当端口连接到设备时触发。

disconnect 实验性

当端口与设备断开连接时触发。

示例

打开端口

在与串行端口通信之前,必须将其打开。打开端口允许站点指定控制数据传输和接收所需参数。开发者应查阅他们正在连接的设备的文档以获取适当的参数。

js
await port.open({ baudRate: 9600 /* pick your baud rate */ });

一旦 open() 返回的 Promise 解析,就可以访问 readablewritable 属性,以获取用于从连接的设备接收数据和向连接的设备发送数据的 ReadableStreamWritableStream 实例。

从端口读取数据

以下示例显示了如何从端口读取数据。外部循环处理非致命错误,创建新的读取器,直到遇到致命错误并且 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();
  }
}

向端口写入数据

以下示例显示了如何将字符串写入端口。在传输之前,TextEncoder 将字符串转换为 Uint8Array

js
const encoder = new TextEncoder();
const writer = port.writable.getWriter();
await writer.write(encoder.encode("PING"));
writer.releaseLock();

规范

规范
Web Serial API
# dom-serialport

浏览器兼容性