Nối tiếp qua Bluetooth trên web

François Beaufort
François Beaufort

Web Bluetooth APIWeb Serial API cho phép các ứng dụng web giao tiếp lần lượt với thiết bị Bluetooth năng lượng thấp (BLE) và thiết bị nối tiếp. Mặc dù nhiều nhà phát triển web đã và đang sử dụng các API này để đạt được thành công rực rỡ, nhưng nhu cầu hỗ trợ các thiết bị Bluetooth phiên bản cũ cũng ngày càng gia tăng.

Giờ đây, Web Serial API hỗ trợ giao tiếp với các dịch vụ RFCOMM trên các thiết bị Bluetooth Classic được ghép nối, bao gồm cả Cấu hình cổng nối tiếp (SPP) trong Chrome 117 trên máy tính. Việc này mở ra cơ hội mới cho các nhà phát triển web cũng như người dùng. Sau đây là một số thiết bị thực tế có thể hưởng lợi từ việc này:

  • Pixel Buds Pro và các tai nghe không dây khác sử dụng RFCOMM để quản lý các chế độ cài đặt âm thanh và bản cập nhật chương trình cơ sở.
  • Hệ thống điểm bán hàng di động sử dụng SPP Bluetooth để giao tiếp với máy in hoá đơn.
  • Máy đọc thẻ RFID của vật nuôi sử dụng SPP Bluetooth để ghi lại sự di chuyển của động vật.

Giao thức RFCOMM Bluetooth

Trở về những năm cuối thập niên 90. Bạn vừa đặt lòng bàn tay thí điểm vào giá đỡ để đồng bộ hoá lịch của mình cho ngày tiếp theo. Thay vào đó, để làm việc đó qua kết nối không dây, chẳng phải rất tốt sao? Với công nghệ "Bluetooth" mới này, bạn có thể loại bỏ tất cả những dây lộn xộn đó. Tính năng không dây là tương lai! Chỉ có một vấn đề duy nhất là mọi thứ hiện có đều được thiết kế để kết nối với cáp RS-232. Vì vậy, Bluetooth sử dụng giao thức Giao tiếp tần số vô tuyến (RFCOMM) để cung cấp giao diện đó cho tất cả phần mềm và phần cứng hiện có.

Ngày nay, dịch vụ RFCOMM vẫn được sử dụng rộng rãi trong phần cứng mới và phần cứng hiện có. Chế độ này cho phép đáp ứng các yêu cầu cụ thể về băng thông và độ trễ mà tính năng Bluetooth năng lượng thấp chưa đáp ứng được cho đến nay. Đó là lý do tại sao chúng tôi đã phát triển sự tích hợp giữa Web Serial, API để kết nối với các thiết bị nối tiếp và Bluetooth, để cho phép truy cập vào các dịch vụ RFCOMM cũ này trước khi nhà sản xuất chuyển sang Bluetooth năng lượng thấp và nhà phát triển có thể sử dụng API Web Bluetooth thay thế.

Thay đổi về Web Serial API

Kể từ Chrome 117 trên máy tính, nhà phát triển web giờ đây có thể giao tiếp một cách đáng tin cậy với các thiết bị Bluetooth phiên bản cũ được ghép nối thông qua dịch vụ RFCOMM bằng Web Serial API. Điều này được thực hiện thông qua các bản cập nhật sau đây cho Web Serial API:

  • Chrome hiện liệt kê các thiết bị Bluetooth được ghép nối để hiển thị giao diện nối tiếp bằng cách sử dụng Cấu hình cổng nối tiếp Bluetooth cổ điển được chuẩn hoá.
  • Chrome giờ đây có thể giao tiếp với giao diện nối tiếp ngay cả khi hệ điều hành chưa tạo nút thiết bị thông qua cổng nối tiếp được mô phỏng cụ thể.
  • Chrome hiện có thể kết nối với dịch vụ không phải Cổng nối tiếp để hiển thị giao diện nối tiếp RFCOMM (xem phần Mã lớp dịch vụ không theo chuẩn).

Bạn có thể tìm hiểu về cách sử dụng Web Serial API trong bài viết Đọc từ và ghi vào cổng nối tiếp. Bài viết này giả định rằng bạn có kiến thức cơ bản về Bluetooth và tập trung vào những thay đổi nối tiếp qua Bluetooth.

Không cần chỉ định bộ lọc nào, thao tác gọi navigator.serial.requestPort() sẽ cho phép người dùng chọn cổng nối tiếp không phải Bluetooth, cổng nối tiếp Bluetooth đã được liên kết và bất kỳ cổng nối tiếp nào chưa được liên kết do Hồ sơ cổng nối tiếp Bluetooth cổ điển đã chuẩn hoá cung cấp.

// Prompt user to select any serial port.
const port = await navigator.serial.requestPort();

Mặc dù hầu hết thiết bị đều sử dụng cấu hình giao tiếp dựa trên SPP thông qua Cấu hình cổng nối tiếp cổ điển Bluetooth được chuẩn hoá, nhưng một số thiết bị lại sử dụng các dịch vụ dựa trên RFCOMM tuỳ chỉnh. Các thiết bị này có Mã lớp dịch vụ không nằm trong phạm vi UUID Bluetooth tiêu chuẩn.

Bạn cần chuyển danh sách allowedBluetoothServiceClassIds cho navigator.serial.requestPort() để truy cập các dịch vụ dựa trên RFCOMM tuỳ chỉnh này, như trong ví dụ dưới đây.

const myBluetoothServiceUuid = "01234567-89ab-cdef-0123-456789abcdef";

// Prompt user to select any serial port.
// Access to the custom Bluetooth RFCOMM service above will be allowed.
const port = await navigator.serial.requestPort({
  allowedBluetoothServiceClassIds: [myBluetoothServiceUuid],
});

Lưu ý rằng tất cả các ID lớp dịch vụ sử dụng UUID cơ sở Bluetooth SIG (nghĩa là tất cả các UUID kết thúc bằng "-0000-1000-8000-00805f9b34fb") đều bị chặn ngoại trừ ID hồ sơ cổng nối tiếp vì Chrome không hỗ trợ các dịch vụ Bluetooth cổ điển như âm thanh và video.

Bạn cũng có thể sử dụng khoá bộ lọc bluetoothServiceClassId khi gọi navigator.serial.requestPort() để nhắc người dùng bằng danh sách các cổng nối tiếp Bluetooth đã lọc được xác định theo Mã lớp dịch vụ. Xem ví dụ bên dưới.

const myBluetoothServiceUuid = "01234567-89ab-cdef-0123-456789abcdef";

// Prompt the user to select Bluetooth serial ports with
// the custom Bluetooth RFCOMM service above.
const port = await navigator.serial.requestPort({
  allowedBluetoothServiceClassIds: [myBluetoothServiceUuid],
  filters: [{ bluetoothServiceClassId: myBluetoothServiceUuid }],
});

Nếu cổng nối tiếp thuộc một thiết bị Bluetooth, thì khoá bluetoothServiceClassId mới có chứa Mã lớp dịch vụ liên kết với kênh RFCOMM mà cổng kết nối sẽ có trong thông tin cổng nối tiếp được trả về bằng cách gọi port.getInfo(). Nếu cổng nối tiếp được ánh xạ, nó sẽ trả về "00001101-0000-1000-8000-00805f9b34fb" hoặc 0x1101 ở dạng ngắn.

const { bluetoothServiceClassId } = port.getInfo();

Ví dụ về trường hợp sử dụng: Điều khiển Pixel Buds Pro

Ứng dụng đồng hành web Pixel Buds Pro là một ứng dụng web mới cho phép người dùng điều khiển Pixel Buds Pro của mình trên mọi thiết bị bằng trình duyệt web. Ứng dụng này được xây dựng bằng công nghệ Ứng dụng web tiến bộ nhằm mang lại trải nghiệm tải tức thì và có thể tuỳ ý cài đặt cùng với các ứng dụng hệ điều hành khác.

Ứng dụng sử dụng Web Serial API để giao tiếp với Pixel Buds Pro. Tính năng này cho phép người dùng kiểm soát nhiều chế độ cài đặt trên Pixel Buds Pro, chẳng hạn như chủ động kiểm soát tiếng ồn, bộ cân bằng âm thanh, phát hiện cài trong tai và cập nhật chương trình cơ sở.

Để dùng thử Ứng dụng đồng hành web Pixel Buds Pro, hãy truy cập vào mypixelbuds.google.com trên thiết bị ChromeOS (sắp ra mắt các nền tảng khác).

Ảnh chụp màn hình Ứng dụng đồng hành web Pixel Buds Pro.
Ứng dụng đồng hành web Pixel Buds Pro.

Tài nguyên

Thư cảm ơn

Cảm ơn các bài đánh giá của Reilly Grant, Thomas Steiner, Ben Morss và Vincent Scheib. Hình ảnh chính của Mika Baumeister trên Unsplash.