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

François Beaufort
François Beaufort

API Bluetooth năng lượng thấp (BLE)API nối tiếp web 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 lớn, nhưng nhu cầu hỗ trợ cho các thiết bị Bluetooth Classic 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 phiên bản 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. Điều này mở ra những khả năng mới cho cả nhà phát triển web cũng như người dùng. Dưới đâ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à 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ể thực hiện việc đó qua mạng không dây? Với tính năng "Bluetooth" mới này bạn có thể loại bỏ tất cả những sợi dây rối rắm đó. Không dây là tương lai! Chỉ có một vấn đề duy nhất, 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ó.

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

Các thay đổi đối với 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 bản cập nhật sau cho Web Serial API:

  • Giờ đây, Chrome 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á.
  • Chrome hiện có thể giao tiếp với giao diện nối tiếp ngay cả khi hệ điều hành không tạo riêng nút thiết bị thông qua cổng nối tiếp được mô phỏng.
  • 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 Mã 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 bạn có kiến thức cơ bản về Bluetooth và tập trung vào thay đổi 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 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á, một số thiết bị sử dụng các dịch vụ dựa trên RFCOMM tuỳ chỉnh. Những 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 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],
});

Lưu ý rằng tất 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 Classic như âm thanh và video.

Bạn cũng có thể sử dụng phím bộ lọc bluetoothServiceClassIdkhi gọi navigator.serial.requestPort() để nhắc người dùng danh sách cổng nối tiếp Bluetooth đã lọc được xác định theo Mã lớp dịch vụ. Hãy xem ví dụ dưới đây.

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ã lớp dịch vụ 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ạ, 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 bằng trình duyệt web bất kỳ. 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 dùng Web Serial API để giao tiếp với Pixel Buds Pro. Việc 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, 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 có thêm 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

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