Web'de Bluetooth üzerinden seri

Furkan
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ı elde etmek için bu API'leri kullanmakta olsa da Bluetooth Classic cihazlarının desteklenmesine yönelik talep de giderek artıyor.

Artık Web Serial API, masaüstünde Chrome 117'deki Seri Bağlantı Noktası Profili (SPP) de dahil olmak üzere eşlenen Bluetooth Classic cihazlarda RFCOMM hizmetleriyle iletişim kurmayı desteklemektedir. Bu durum hem web geliştiricileri hem de kullanıcılar için yeni olanakların önünü açıyor. Bundan yararlanabilecek bazı gerçek 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'u kullanır.
  • Mobil satış noktası sistemleri, fatura yazıcılarıyla iletişim kurmak için Bluetooth SPP'yi kullanır.
  • Çiftlik hayvanı RFID etiket okuyucuları, hayvan hareketlerini kaydetmek için Bluetooth SPP'yi kullanır.

Bluetooth RFCOMM protokolü

90'ların sonlarına dönün. Takviminizi ertesi gün senkronize etmek için Palm Pilot'ınızı yuvaya yerleştirmeniz yeterli. Bunu kablosuz olarak da yapabilseniz güzel olmaz mıydı? Bu yeni "Bluetooth" teknolojisiyle dağınık kablolardan kurtulabilirsiniz. Kablosuz bağlantı geleceğidir. Tek bir sorun var: Mevcut tüm cihazlar RS-232 kablosuyla bağlanacak şekilde tasarlanmıştır. Bu nedenle Bluetooth, söz konusu arayüzü mevcut tüm yazılım ve donanımlara sağlamak için Radyo Frekansı İletişimi (RFCOMM) protokolünü kullanır.

RFCOMM hizmetleri bugün bile yeni ve mevcut donanımlarda yaygın olarak kullanılmaktadır. Bu özellik, Bluetooth Düşük Enerji tarafından henüz karşılanmayan belirli gecikme ve bant genişliği gereksinimlerinin karşılanmasına olanak tanır. 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ğlanma API'si olan Web Serial ve 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 aracılığıyla eşlenen Bluetooth Classic cihazlarla güvenilir bir şekilde iletişim kurabilmektedir. 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, seri arayüzü açığa çıkaran, eşlenmiş Bluetooth cihazları sıralıyor.
  • İşletim sistemi, özellikle emüle edilmiş bir seri bağlantı noktası üzerinden 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ü açığa çıkaran, Seri Bağlantı Noktası olmayan bir hizmetle iletişim kurabilir (standart olmayan Hizmet Sınıfı Kimlikleri sayfasına bakın).

Web Serial API'nin nasıl kullanılacağını öğrenmek için Seri bağlantı noktasından okuma ve bu bağlantı noktasına yazma başlıklı makaleyi inceleyebilirsiniz. Bu makale, Bluetooth hakkında temel bilgiye sahip olduğunuz varsayılır ve Bluetooth üzerinden seri bağlantı kurulmasına odaklanmaktadır.

Herhangi bir filtre belirtmeden navigator.serial.requestPort() çağrısı, kullanıcıların Bluetooth olmayan seri bağlantı noktalarını, önceden eşlenmiş olan 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çmelerine 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 gösterse de, bazı cihazlar RFCOMM tabanlı özel hizmetler kullanır. Bu cihazların Hizmet Sınıfı Kimliği, standart Bluetooth UUID aralığında değil.

Bu özel RFCOMM tabanlı hizmetlere aşağıdaki örnekte gösterildiği gibi erişmek için allowedBluetoothServiceClassIds listesini navigator.serial.requestPort() adresine 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, Bluetooth SIG Base UUID'yi (yani "-0000-1000-8000-00805f9b34fb" ile biten tüm UUID'ler) kullanan tüm Hizmet Sınıfı Kimlikleri, Seri Bağlantı Noktası Profili Kimliği dışında engellenir.

bluetoothServiceClassIdArama sırasında filtre anahtarınınavigator.serial.requestPort() kullanarak kullanıcıdan hizmet sınıfı kimlikleriyle tanımlanmış filtrelenmiş Bluetooth seri bağlantı noktalarının listesini görebilirsiniz. Aşağıdaki örneği inceleyin.

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ıyla döndürülen seri bağlantı noktası bilgilerinde yer alır. Seri bağlantı noktası eşlenmişse kısa biçimde "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 App, kullanıcıların Pixel Buds Pro cihazlarını web tarayıcısı olan herhangi bir cihazdan kontrol etmelerini sağlayan yeni bir web uygulamasıdır. Anında yükleme deneyimi için Progresif Web Uygulamaları teknolojileri kullanılarak oluşturulur 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 ayar, kullanıcıların 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 etmelerine olanak tanır.

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

Pixel Buds Pro Web Companion 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 ederiz. Mika Baumeister tarafından Unsplash'teki hero resim.