웹 시리얼의 블루투스 RFCOMM 업데이트

François Beaufort
François Beaufort

Web Serial API는 데스크톱의 Chrome 117에서 페어링된 블루투스 Classic 기기의 RFCOMM 서비스와의 통신을 지원합니다. 예를 들어 무선 이어폰이 RFCOMM을 사용하여 오디오 설정과 펌웨어 업데이트를 관리할 수 있습니다. 자세한 내용은 웹에서 블루투스를 통한 직렬을 참고하세요.

데스크톱용 Chrome 130부터 Web Serial API가 개선되어 웹 앱이 포트를 열지 않고도 블루투스 RFCOMM 직렬 포트를 사용할 수 있는 시점을 감지할 수 있습니다. 이렇게 하면 무선 기기가 의도적으로 연결 해제되었을 때 불필요한 재연결이 방지됩니다.

무선 기기가 호스트의 범위를 벗어나면 웹 앱에서 연 무선 직렬 포트가 자동으로 닫힙니다. 이 경우 웹 앱이 SerialPort open() 메서드로 포트를 다시 열려고 시도할 수 있습니다. 그러나 무선 기기가 의도적으로 연결 해제된 경우 (예: 사용자가 운영체제 제어판에서 연결 해제) 웹 앱은 무선 기기에 다시 연결되지 않도록 포트를 다시 열지 않아야 합니다.

이제 새 불리언 SerialPort connected 속성을 통해 무선 직렬 포트를 호스팅하는 무선 기기의 논리적 연결 상태를 노출하면 웹 앱에서 이러한 사례를 구분하고 의도치 않은 연결 해제인 경우에만 다시 연결할 수 있습니다.

포트를 호스팅하는 무선 기기에 시스템에 대한 활성 연결이 있는 경우 무선 직렬 포트의 SerialPort connected 속성은 true입니다. 유선 직렬 포트의 경우 포트가 시스템에 물리적으로 연결되어 있으면 true입니다.

다음 스니펫은 사용 가능한 기기를 확인하고 자동으로 연결할 수 있는 기기를 확인하는 방법을 보여줍니다.

const ports = await navigator.serial.getPorts();
for (const port of ports) {
  if (port.connected) {
    // Automatically try to connect to the Bluetooth device.
    await port.open({ baudRate: 9600 });
  } else {
    // Otherwise, when the port is not logically connected:
    // 1. Prompt the user to make sure the Bluetooth device is available.
    // 2. Show a "connect" button to try opening the port.
  }
}

이전에는 유선 직렬 포트만 연결연결 해제 이벤트를 전달했습니다. 이제 블루투스 RFCOMM 직렬 포트는 포트가 논리적으로 연결되거나 연결 해제될 때 이러한 이벤트를 전달합니다.

데모

SerialPort 연결 데모

리소스

감사의 말

잭 셰이 씨와 레이리 그랜트 씨의 리뷰에 감사드립니다.