Web'de Bluetooth üzerinden seri

François Beaufort
François Beaufort

Web Bluetooth API ve Web Serial API, web uygulamalarının sırasıyla Bluetooth Düşük Enerji (BDE) cihazları ve seri cihazlarla iletişim kurmasına olanak tanır. Birçok web geliştiricisi büyük bir başarı için bu API'leri halihazırda kullanıyor olsa da, Bluetooth Classic cihazların desteklenmesine yönelik talep de giderek artıyor.

Artık Web Serial API, masaüstündeki Chrome 117 sürümünde Serial Port Profile (SPP) dahil olmak üzere eşlenmiş Bluetooth Classic cihazlarda RFCOMM hizmetleriyle iletişim kurmayı desteklemektedir. Bu yenilik hem web geliştiricileri hem de kullanıcılar için yeni olanakların kapısını açıyor. Bundan yararlanabilecek gerçek dünyadan bazı cihazlar şunlardır:

  • Pixel Buds Pro ve diğer kablosuz kulaklıklar, ses ayarlarını ve donanım yazılımı güncellemelerini yönetmek için RFCOMM'yi kullanır.
  • Mobil satış noktası sistemleri, makbuz yazıcılarıyla iletişim kurmak için Bluetooth SPP'yi kullanır.
  • Çiftlik hayvanları RFID etiket okuyucular, hayvanların hareketlerini günlüğe kaydetmek için Bluetooth SPP'yi kullanır.

Bluetooth RFCOMM protokolü

Kendinizi 90'ların sonlarına götürün. Sonraki gün için takviminizi senkronize etmek üzere Palm Pilot'ınızı yuvasına yerleştirin. Bunun yerine bunu kablosuz olarak yapabilseniz güzel olmaz mıydı? Bu yeni "Bluetooth" teknolojisiyle tüm bu dağınık kablolardan kurtulabilirsiniz. Geleceğin kablosuz deneyimi! Tek bir sorun var: Mevcut her şey RS-232 kablosuyla bağlanacak şekilde tasarlanmış. Bu nedenle Bluetooth, mevcut tüm yazılım ve donanımlara bu arayüzü sağlamak için Radyo Frekansı İletişimi (RFCOMM) protokolünü kullanır.

Günümüzde bile RFCOMM hizmetleri yeni ve mevcut donanımlarda yaygın olarak kullanılmaktadır. Bluetooth Düşük Enerji tarafından şu ana kadar karşılanmayan belirli gecikme ve bant genişliği gereksinimlerini karşılar. Bu nedenle, üreticiler Bluetooth Düşük Enerji'ye geçmeden ve geliştiriciler bunun yerine Web Bluetooth API'yi kullanmaya başlamadan önce, bu eski RFCOMM hizmetlerine erişim sağlamak için seri cihazlara bağlanmaya yönelik bir API olan Web Serial ile Bluetooth arasında bir entegrasyon geliştirdik.

Web Serial API değişiklikleri

Masaüstünde Chrome 117'den itibaren web geliştiricileri, artık Web Serial API'yi kullanarak RFCOMM hizmetleri üzerinden eşlenmiş Bluetooth Classic cihazlarla güvenilir şekilde iletişim kurabiliyor. Bu, Web Serial API'de yapılan aşağıdaki güncellemelerle mümkün olmuştur:

  • Chrome artık standartlaştırılmış Bluetooth Klasik Seri Bağlantı Noktası Profili'ni kullanarak bir seri arayüzü gösteren eşlenmiş Bluetooth cihazları numaralandırıyor.
  • İşletim sistemi özel olarak emüle edilmiş bir seri bağlantı noktası aracılığıyla bir cihaz düğümü oluşturmamış olsa bile Chrome artık seri arayüzle iletişim kurabilir.
  • Chrome artık RFCOMM seri arayüzünü sunan, Seri olmayan bir Bağlantı Noktası hizmetiyle iletişim kurabilir (standart olmayan Hizmet Sınıfı Kimlikleri bölümüne bakın).

Seri bağlantı noktasından okuma ve ona yazma makalesinde Web Serial API'nin nasıl kullanılacağını öğrenebilirsiniz. Bu makalede Bluetooth hakkında temel bilgiye sahip olduğunuz varsayılır ve Bluetooth üzerinden satılan seri seçeneğine odaklanılır.

navigator.serial.requestPort() çağrısı, herhangi bir filtre belirtilmeden kullanıcıların Bluetooth olmayan seri bağlantı noktalarını, daha önce eşlenmiş Bluetooth seri bağlantı noktalarını ve standartlaştırılmış Bluetooth Klasik Seri Bağlantı Noktası Profili tarafından sağlanan eşlenmemiş seri bağlantı noktalarını seçmesine olanak tanır.

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

Çoğu cihaz standartlaştırılmış Bluetooth Klasik Seri Bağlantı Noktası Profili üzerinden SPP tabanlı iletişimi ortaya çıkarsa da bazıları RFCOMM tabanlı özel hizmetler kullanır. Bu cihazların hizmet sınıfı kimliği, standart Bluetooth UUID aralığında değil.

RFCOMM tabanlı bu özel hizmetlere erişmek için aşağıdaki örnekte gösterildiği gibi allowedBluetoothServiceClassIds listesini navigator.serial.requestPort() adlı iş ortağına iletmeniz gerekir.

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

Chrome ses ve video gibi Bluetooth Classic hizmetlerini desteklemediğinden, Seri Bağlantı Noktası Profili Kimliği hariç Bluetooth SIG Base UUID'sini kullanan tüm Hizmet Sınıfı Kimliklerinin ("-0000-1000-8000-00805f9b34fb" ile biten tüm UUID'ler) engellendiğini unutmayın.

Ayrıca kullanıcıya Hizmet Sınıfı Kimlikleri ile tanımlanan filtrelenmiş Bluetooth seri bağlantı noktalarının listesini sormak için bluetoothServiceClassIdçağrırken filtre anahtarınınavigator.serial.requestPort() da kullanabilirsiniz. Aşağıdaki örneğe bakın.

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

Seri bağlantı noktası bir Bluetooth cihazının parçasıysa bağlantı noktasının bağlı olduğu RFCOMM kanalıyla ilişkili Hizmet Sınıfı Kimliği'ni içeren yeni bir bluetoothServiceClassId anahtarı, port.getInfo() çağrısı yapılarak döndürülen seri bağlantı noktası bilgisinde bulunabilir. Seri bağlantı noktası eşlenirse kısa biçiminde "00001101-0000-1000-8000-00805f9b34fb" veya 0x1101 değerini döndürür.

const { bluetoothServiceClassId } = port.getInfo();

Kullanım alanı örneği: Pixel Buds Pro'yu kontrol etme

Pixel Buds Pro Web Companion Uygulaması, kullanıcıların Pixel Buds Pro'larını web tarayıcısı olan herhangi bir cihazdan kontrol etmelerine olanak tanıyan yeni bir web uygulamasıdır. Anında yükleme deneyimi için Progresif Web Uygulamaları teknolojileri kullanılarak geliştirilmiştir ve isteğe bağlı olarak diğer işletim sistemi uygulamalarıyla birlikte yüklenebilir.

Uygulama, Pixel Buds Pro ile iletişim kurmak için Web Serial API'yi kullanır. Bu sayede kullanıcılar, Pixel Buds Pro'larında aktif gürültü kontrolü, ekolayzer, kulak içi algılama ve donanım yazılımı güncellemeleri gibi çeşitli ayarları kontrol edebilir.

Pixel Buds Pro Web Tamamlayıcı Uygulamasını denemek için bir ChromeOS cihazda (diğer platformlar yakında kullanıma sunulacaktır) mypixelbuds.google.com adresini ziyaret edin.

Pixel Buds Pro Web Tamamlayıcı Uygulaması'nın ekran görüntüsü.
Pixel Buds Pro Web Tamamlayıcı Uygulaması.

Kaynaklar

Tasdik

Yorumlar için Reilly Grant, Thomas Steiner, Ben Morss ve Vincent Scheib'e teşekkür ediyoruz. Mika Baumeister'ın Unsplash'teki hero resim.