Firefox Tomorrow

web api interface

SerialPort

View on MDN ↗

Secure contextAvailable in workers

The SerialPort interface of the Web Serial API provides access to a serial port on the host device.

Constructor

Instances of this interface may be obtained by calling methods of the Serial interface, therefore it has no constructor of its own.

Instance properties

  • connected Read only
    • : Returns a boolean value that indicates whether the port is logically connected to the device.
  • readable Read only
    • : Returns a ReadableStream for receiving data from the device connected to the port.
  • writable Read only
    • : Returns a WritableStream for sending data to the device connected to the port.

Instance methods

  • forget()
    • : Returns a Promise that resolves when access to the serial port is revoked. Calling this “forgets” the device, resetting any previously-set permissions so the calling site can no longer communicate with the port.
  • getInfo()
    • : Returns an object containing identifying information for the device available via the port.
  • open()
    • : Returns a Promise that resolves when the port is opened. By default the port is opened with 8 data bits, 1 stop bit and no parity checking.
  • setSignals()
    • : Sets control signals on the port and returns a Promise that resolves when they are set.
  • getSignals()
    • : Returns a Promise that resolves with an object containing the current state of the port’s control signals.
  • close()
    • : Returns a Promise that resolves when the port closes.

Events

  • connect
    • : Fired when the port connects to the device.
  • disconnect
    • : Fired when the port disconnects from the device.

Examples

Opening a port

Before communicating on a serial port it must be opened. Opening the port allows the site to specify the necessary parameters that control how data is transmitted and received. Developers should check the documentation for the device they are connecting to for the appropriate parameters.

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

Once the Promise returned by open() resolves the readable and writable attributes can be accessed to get the ReadableStream and WritableStream instances for receiving data from and sending data to the connected device.

Reading data from a port

The following example shows how to read data from a port. The outer loop handles non-fatal errors, creating a new reader until a fatal error is encountered and readable becomes null.

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();
  }
}

Writing data to a port

The following example shows how to write a string to a port. A TextEncoder converts the string to a Uint8Array before transmission.

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

Specifications

SpecificationsStandards references are available on the canonical MDN page.

Browser compatibility

Browser compatibilityCompatibility data is available on the canonical MDN page.