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.

Web Seri API'si artık masaüstünde Chrome 117'de Seri Bağlantı Noktası Profili (SPP) dahil olmak üzere eşlenen Bluetooth Klasik cihazlarda RFCOMM hizmetleriyle iletişim kurmayı destekliyor. Bu durum hem web geliştiricileri hem de kullanıcılar için yeni olanaklar sunar. Bu özellikten 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 kullanır.
  • Mobil satış noktası sistemleri, makbuz yazıcılarıyla iletişim kurmak için Bluetooth SPP'yi kullanır.
  • Hayvan RFID etiketi okuyucuları, hayvan hareketlerini günlüğe kaydetmek için Bluetooth SPP'yi kullanır.

Bluetooth RFCOMM protokolü

90'ların sonlarına geri dönün. Sonraki gün için takviminizi senkronize etmek üzere Palm Pilot'ınızı yuvasına yerleştirin. Bunun yerine kablosuz olarak yapabiliyor olsanız ne güzel olurdu. Bu yeni "Bluetooth" teknolojisiyle, dağınık kablolardan kurtulabilirsiniz. Kablosuz bağlantı geleceğin teknolojisidir. Yalnızca bir sorun var. Mevcut her şey RS-232 kablosuyla bağlanacak şekilde tasarlanmıştır. Bu nedenle Bluetooth, mevcut tüm yazılım ve donanıma 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. Bu sayede, Bluetooth Düşük Enerji'nin şu ana kadar karşılayamadığı belirli gecikme ve bant genişliği koşullarını karşılayabilirsiniz. Bu nedenle, üreticiler Bluetooth Düşük Enerji'ye geçmeden ve geliştiriciler bunun yerine Web Bluetooth API'sini kullanmadan önce bu eski RFCOMM hizmetlerine erişimi sağlamak için seri cihazlara bağlanmak için kullanılan 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şlenen Bluetooth Classic cihazlarla güvenilir bir şekilde iletişim kurabiliyor. Bu, Web Serial API'de yapılan aşağıdaki güncellemelerle mümkün oldu:

  • Chrome artık standartlaştırılmış Bluetooth Klasik Seri Bağlantı Noktası Profili'ni kullanarak seri arayüz sunan eşlenen Bluetooth cihazlarını listeliyor.
  • Chrome artık işletim sistemi özellikle taklit edilmiş bir seri bağlantı noktası üzerinden cihaz düğümü oluşturmamış olsa bile seri arayüzle iletişim kurabilir.
  • Chrome artık bir RFCOMM seri arayüzü sunan seri bağlantı noktası olmayan bir hizmetle iletişim kurabilir (standart olmayan hizmet sınıfı kimlikleri bölümüne bakın).

Web Serial API'nin nasıl kullanılacağı hakkında bilgi edinmek için Seri bağlantı noktasından okuma ve seri bağlantı noktasına yazma başlıklı makaleyi inceleyebilirsiniz. Bu makalede, Bluetooth hakkında temel düzeyde bilgi sahibi olduğunuz varsayılmaktadır ve Bluetooth üzerinden seri bağlantıyla ilgili değişikliklere odaklanılmaktadır.

navigator.serial.requestPort() çağrısı, herhangi bir filtre belirtmeden kullanıcıların Bluetooth olmayan seri bağlantı noktalarını, önceden 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 aracılığıyla SPP tabanlı iletişim sunsa da bazıları özel RFCOMM tabanlı hizmetler kullanır. Bu cihazların hizmet sınıfı kimliği, standart Bluetooth UUID aralığında değildir.

Aşağıdaki örnekte gösterildiği gibi, bu özel RFCOMM tabanlı hizmetlere erişmek için allowedBluetoothServiceClassIds listesini navigator.serial.requestPort()'a 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 Klasik hizmetlerini desteklemediğinden, Seri Bağlantı Noktası Profili Kimliği hariç olmak üzere Bluetooth SIG Base UUID'yi kullanan tüm Hizmet Sınıfı Kimliklerinin (yani "-0000-1000-8000-00805f9b34fb" ile biten tüm UUID'ler) engellendiğini unutmayın.

Ayrıca, navigator.serial.requestPort() işlevini çağırırken bluetoothServiceClassId filtre anahtarını kullanarak kullanıcıya Hizmet Sınıfı Kimlikleri ile tanımlanan filtrelenmiş Bluetooth seri bağlantı noktalarının listesini gösterebilirsiniz. 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 port.getInfo() çağrısı yapılarak döndürülen seri bağlantı noktası bilgisinde, 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ı kullanılabilir. Seri bağlantı noktası eşlenirse "00001101-0000-1000-8000-00805f9b34fb" veya kısa biçiminde 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 Eşlik Eden Uygulaması, kullanıcıların Pixel Buds Pro'ları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 geliştirilmiştir ve isteğe bağlı olarak diğer işletim sistemi uygulamalarının yanında 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 ChromeOS cihazınızda mypixelbuds.google.com adresini ziyaret edin (Diğer platformlar yakında kullanıma sunulacaktır).

Pixel Buds Pro web tamamlayıcı uygulamasının ekran görüntüsü.
Pixel Buds Pro Web Eşlik Eden Uygulaması.

Kaynaklar

Tasdik

Yorumları için Reilly Grant, Thomas Steiner, Ben Morss ve Vincent Scheib'e teşekkür ederiz.