Web Bluetooth API và Web 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 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 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ý 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 Bluetooth SPP để giao tiếp với máy in biên nhận.
- Đầu đọc thẻ RFID cho gia súc sử dụng Bluetooth SPP để ghi lại hoạt động di chuyển của động vật.
Giao thức Bluetooth RFCOMM
Hãy quay lại cuối những năm 90. Bạn chỉ cần đặt Palm Pilot vào giá đỡ để đồng bộ hoá lịch 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ợ rối rắm đó. 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, nhà phát triển web hiện có thể giao tiếp đáng tin cậy với các thiết bị Bluetooth cổ điển đã ghép nối thông qua các dịch vụ RFCOMM bằng cách sử dụng Web Serial API. Đ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 hiện liệt kê các thiết bị Bluetooth đã ghép nối hiển thị giao diện nối tiếp bằng cách sử dụng Hồ sơ cổng nối tiếp Bluetooth cổ điển được 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 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 các thay đổi về nối tiếp qua Bluetooth.
Khi không chỉ định bộ lọc nào, lệnh gọi navigator.serial.requestPort()
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à mọi cổng nối tiếp 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 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
đến navigator.serial.requestPort()
để truy cập vào các dịch vụ tuỳ chỉnh dựa trên RFCOMM này 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 liên kết, 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 trên mọi thiết bị có trình duyệt web. Ứng dụng này được xây dựng bằng các 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ể được cài đặt cùng với các ứng dụng hệ điều hành khác (không bắt buộ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 trên web của Pixel Buds Pro, hãy truy cập vào mypixelbuds.google.com trên thiết bị ChromeOS (các nền tảng khác sẽ sớm ra mắt).
Tài nguyên
Thư cảm ơn
Cảm ơn Reilly Grant, Thomas Steiner, Ben Morss và Vincent Scheib đã xem xét.