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

François Beaufort
François Beaufort

Web Bluetooth APIWeb Serial API cho phép ứng dụng web tương tác với các thiết bị Bluetooth năng lượng thấp (BLE) và thiết bị nối tiếp tương ứng. 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 lớn, nhưng nhu cầu hỗ trợ cho các thiết bị Bluetooth cổ điển cũng ngày càng 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 đã ghép nối, bao gồm cả Hồ sơ cổng nối tiếp (SPP) trong Chrome 117 trên máy tính. Điều này mở ra nhiều khả năng mới cho cả nhà phát triển web và người dùng. Sau đây là một số thiết bị thực tế có thể hưởng lợi từ tính năng này:

  • Pixel Buds Pro và các tai nghe không dây khác sử dụng RFCOMM để quản lý 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 Bluetooth SPP để giao tiếp với máy in biên nhận.
  • Máy đọc thẻ RFID cho gia súc sử dụng Bluetooth SPP để ghi nhật ký chuyển động 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 chỉ cần đặt Palm Pilot vào đế để đồng bộ hóa lịch của mình cho ngày tiếp theo. Sẽ thật tuyệt nếu bạn có thể làm việc đó qua Wi-Fi. Với công nghệ "Bluetooth" mới này, bạn có thể loại bỏ tất cả những dây nhợ lộn xộn đó. Công nghệ không dây là tương lai! Chỉ có một vấn đề, mọi thứ hiện có đều được thiết kế để kết nối với cáp RS-232. Do đó, 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ó.

Ngay cả ngày nay, các dịch vụ RFCOMM vẫn được sử dụng rộng rãi trong phần cứng mới và hiện có. Điều này cho phép đáp ứng các yêu cầu cụ thể về độ trễ và băng thông mà Bluetooth năng lượng thấp chưa đáp ứng được. Đó là lý do chúng tôi đã phát triển tính năng tích hợp giữa Web Serial (một 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 tiết kiệm năng lượng và nhà phát triển có thể sử dụng API Web Bluetooth.

Các thay đổi về Web Serial API

Kể từ Chrome 117 trên máy tính, giờ đây, các nhà phát triển web 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 các dịch vụ RFCOMM bằng cách sử dụng API Web Serial. Điều này có thể thực hiện được nhờ các nội dung cập nhật sau đây đối với Web Serial API:

  • Chrome giờ đây 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 đã chuẩn hoá.
  • Giờ đây, Chrome 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.
  • Giờ đây, Chrome có thể giao tiếp với một 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 Mã nhận dạng lớp dịch vụ không chuẩn).

Bạn có thể tìm hiểu cách sử dụng API Web Serial 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 các thay đổi về nối tiếp qua Bluetooth.

Nếu không chỉ định bộ lọc nào, thao tác gọi navigator.serial.requestPort() cho phép người dùng chọn các cổng nối tiếp không phải Bluetooth, các cổng nối tiếp Bluetooth đã được ánh xạ và mọi cổng nối tiếp chưa được ánh xạ do Cấu hình 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 các thiết bị đều hiển thị giao tiếp dựa trên SPP thông qua Cấu hình cổng nối tiếp Bluetooth cổ điển đượ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ã nhận dạng lớp dịch vụ không nằm trong phạm vi UUID Bluetooth tiêu chuẩn.

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

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],
});

Xin lưu ý rằng tất cả mã lớp dịch vụ sử dụng UUID cơ sở Bluetooth SIG (tức là tất cả UUID có đuôi "-0000-1000-8000-00805f9b34fb") đều bị chặn, ngoại trừ mã 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 bằng Mã lớp dịch vụ. Hãy 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 là một phần của thiết bị Bluetooth, thì khoá bluetoothServiceClassId mới chứa mã nhận dạng lớp dịch vụ được liên kết với kênh RFCOMM mà cổng được 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ạ, thì cổng này 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 trên 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 từ mọi thiết bị có trình duyệt web. API này được xây dựng bằng công nghệ Ứng dụng web tiến bộ để 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. Điều 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ư tính năng chống ồn chủ động, bộ cân bằng, tính năng phát hiện 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 có thêm các nền tảng khác).

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

Tài nguyên

Thư cảm ơn

Cảm ơn Reilly Grant, Thomas Steiner, Ben Morss và Vincent Scheib đã xem xét.