Web Bluetooth API و Web Serial API به برنامه های وب اجازه می دهند به ترتیب با دستگاه های کم مصرف بلوتوث (BLE) و دستگاه های سریال ارتباط برقرار کنند. در حالی که بسیاری از توسعه دهندگان وب در حال حاضر از این APIها برای موفقیت بزرگ استفاده می کنند، تقاضای رو به رشدی برای پشتیبانی از دستگاه های کلاسیک بلوتوث نیز وجود دارد.
اکنون، Web Serial API از برقراری ارتباط با سرویسهای RFCOMM در دستگاههای کلاسیک بلوتوث جفت شده از جمله نمایه پورت سریال (SPP) در Chrome 117 روی دسکتاپ پشتیبانی میکند. این امر امکانات جدیدی را برای توسعه دهندگان وب و کاربران به طور یکسان باز می کند. در اینجا برخی از دستگاه های دنیای واقعی وجود دارد که می توانند از این مزیت بهره مند شوند:
- Pixel Buds Pro و سایر هدفونهای بیسیم از RFCOMM برای مدیریت تنظیمات صوتی و بهروزرسانیهای میانافزار استفاده میکنند.
- سیستمهای محل فروش موبایل از بلوتوث SPP برای ارتباط با چاپگرهای رسید استفاده میکنند.
- تگ خوان های Livestock RFID از بلوتوث SPP برای ثبت حرکات حیوانات استفاده می کنند.
پروتکل بلوتوث RFCOMM
خود را به اواخر دهه 90 برگردانید. شما فقط Palm Pilot خود را در گهواره آن قرار دهید تا تقویم خود را برای روز بعد همگام کند. آیا خوب نیست اگر بتوانید این کار را به صورت بی سیم انجام دهید؟ با استفاده از این فناوری جدید "بلوتوث" می توانید از شر تمام آن سیم های نامرتب خلاص شوید. بی سیم آینده است! تنها یک مشکل وجود دارد، هر چیزی که وجود دارد برای اتصال با کابل RS-232 طراحی شده است. بنابراین، بلوتوث از پروتکل ارتباط فرکانس رادیویی (RFCOMM) برای ارائه آن رابط به تمامی نرم افزارها و سخت افزارهای موجود استفاده می کند.
حتی امروزه، خدمات RFCOMM به طور گسترده در سخت افزارهای جدید و موجود استفاده می شود. این اجازه می دهد تا نیازهای تاخیر و پهنای باند خاصی را برآورده کنید که تاکنون توسط بلوتوث کم انرژی برآورده نشده است. به همین دلیل است که ما یکپارچگی بین Web Serial، یک API برای اتصال به دستگاههای سریال، و بلوتوث ایجاد کردهایم تا قبل از اینکه سازندگان در نهایت به بلوتوث کم انرژی مهاجرت کنند و توسعهدهندگان بتوانند به جای آن از Web Bluetooth API استفاده کنند، به این سرویسهای قدیمی RFCOMM دسترسی داشته باشیم.
تغییرات API سریال وب
با شروع Chrome 117 روی دسکتاپ، توسعهدهندگان وب اکنون میتوانند از طریق سرویسهای RFCOMM با استفاده از Web Serial API بهطور قابلاطمینانی با دستگاههای کلاسیک بلوتوث جفتشده ارتباط برقرار کنند. این با بهروزرسانیهای زیر در Web Serial API امکانپذیر شد:
- Chrome اکنون دستگاههای بلوتوث جفت شده را برمیشمارد که یک رابط سریال را با استفاده از نمایه پورت سریال کلاسیک استاندارد بلوتوث نشان میدهند.
- کروم اکنون میتواند با رابط سریال ارتباط برقرار کند، حتی اگر سیستم عامل گره دستگاه را از طریق یک پورت سریال شبیهسازیشده بهطور خاص ایجاد نکرده باشد.
- Chrome اکنون میتواند با یک سرویس پورت غیر سریالی که رابط سریال RFCOMM را در معرض دید قرار میدهد ارتباط برقرار کند ( شناسههای کلاس خدمات غیر استاندارد را ببینید).
شما می توانید در مورد نحوه استفاده از Web Serial API در مقاله Read from and write to a serial port یاد بگیرید. این مقاله فرض می کند که شما دانش اولیه در مورد بلوتوث دارید و بر روی تغییرات سریال از طریق بلوتوث تمرکز می کند.
بدون تعیین هیچ فیلتری، فراخوانی navigator.serial.requestPort()
به کاربران این امکان را میدهد که پورتهای سریال غیر بلوتوث، پورتهای سریال بلوتوثی که قبلاً نقشهبرداری شدهاند و هر پورت سریال بدون نقشه ارائهشده توسط نمایه پورت سریال کلاسیک استاندارد بلوتوث را انتخاب کنند.
// Prompt user to select any serial port.
const port = await navigator.serial.requestPort();
اگرچه اکثر دستگاهها ارتباطات مبتنی بر SPP را از طریق نمایه پورت سریال کلاسیک استاندارد بلوتوث نشان میدهند، برخی از آنها از خدمات سفارشی مبتنی بر RFCOMM استفاده میکنند. این دستگاهها دارای شناسه کلاس سرویس هستند که در محدوده استاندارد بلوتوث UUID نیست.
برای دسترسی به این خدمات سفارشی مبتنی بر RFCOMM همانطور که در مثال زیر نشان داده شده است، باید لیست allowedBluetoothServiceClassIds
را به navigator.serial.requestPort()
منتقل کنید.
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],
});
توجه داشته باشید که همه شناسههای کلاس خدماتی که از بلوتوث SIG Base UUID استفاده میکنند (یعنی همه UUIDهایی که به «-0000-1000-8000-00805f9b34fb» ختم میشوند) مسدود شدهاند، به جز شناسه نمایه پورت سریال، زیرا Chrome از خدمات کلاسیک بلوتوث پشتیبانی نمیکند. بصورت صوتی و تصویری
همچنین میتوانید از کلید فیلتر bluetoothServiceClassId
هنگام فراخوانی navigator.serial.requestPort()
استفاده کنید تا از کاربر فهرستی از پورتهای سریال بلوتوث فیلتر شده شناسایی شده توسط شناسههای کلاس سرویس را بخواهید. مثال زیر را ببینید.
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 }],
});
اگر پورت سریال بخشی از یک دستگاه بلوتوث است، یک کلید bluetoothServiceClassId
جدید حاوی شناسه کلاس سرویس مرتبط با کانال RFCOMM که پورت به آن متصل است، در اطلاعات پورت سریال که با فراخوانی port.getInfo()
بازگردانده می شود، موجود است. اگر پورت سریال نقشه برداری شده باشد، "00001101-0000-1000-8000-00805f9b34fb" یا 0x1101 را به شکل کوتاه خود برمی گرداند.
const { bluetoothServiceClassId } = port.getInfo();
مثال مورد استفاده: Control Pixel Buds Pro
برنامه Pixel Buds Pro Web Companion یک برنامه وب جدید است که به کاربران امکان می دهد Pixel Buds Pro خود را از هر دستگاهی با مرورگر وب کنترل کنند. این برنامه با استفاده از فناوریهای برنامههای وب پیشرفته برای تجربه بارگذاری فوری ساخته شده است و میتواند به صورت اختیاری در کنار سایر برنامههای سیستم عامل نصب شود.
این برنامه از Web Serial API برای برقراری ارتباط با Pixel Buds Pro استفاده می کند. این به کاربران اجازه می دهد تا تنظیمات مختلفی را در Pixel Buds Pro خود کنترل کنند، مانند کنترل نویز فعال، اکولایزر، تشخیص داخل گوش و به روز رسانی سیستم عامل.
برای امتحان برنامه Pixel Buds Pro Web Companion، از mypixelbuds.google.com در دستگاه ChromeOS (سایر پلتفرمها به زودی) دیدن کنید.
![عکس صفحه برنامه Pixel Buds Pro Web Companion.](https://developer.chrome.com/static/blog/serial-over-bluetooth/image/screenshot-the-pixel-bud-80348b896e9d5.jpg?authuser=4&hl=fa)
منابع
قدردانی
از ریلی گرانت، توماس اشتاینر، بن مورس و وینسنت شایب برای نقدهایشان تشکر میکنیم. تصویر قهرمان توسط Mika Baumeister در Unsplash .