Numéro de série via Bluetooth sur le Web

François Beaufort
François Beaufort

L'API Web Bluetooth et l'API Web Serial permettent aux applications Web de communiquer respectivement avec des appareils Bluetooth à basse consommation (BLE) et des appareils série. Bien que de nombreux développeurs Web utilisent déjà ces API avec succès, la demande de prise en charge des appareils Bluetooth Classic est également croissante.

L'API Web Serial permet désormais de communiquer avec les services RFCOMM sur les appareils Bluetooth Classic associés, y compris le profil de port série (SPP) dans Chrome 117 sur ordinateur. Cela ouvre de nouvelles possibilités pour les développeurs Web et les utilisateurs. Voici quelques exemples d'appareils qui peuvent en bénéficier:

  • Les Pixel Buds Pro et d'autres écouteurs sans fil utilisent RFCOMM pour gérer les paramètres audio et les mises à jour du micrologiciel.
  • Les systèmes de point de vente mobiles utilisent la technologie Bluetooth SPP pour communiquer avec les imprimantes de reçus.
  • Les lecteurs de tags RFID pour le bétail utilisent le protocole SPP Bluetooth pour consigner les mouvements des animaux.

Le protocole RFCOMM Bluetooth

Remontez à la fin des années 90. Vous venez de placer votre Palm Pilot dans son socle pour synchroniser votre agenda pour le lendemain. Et si vous pouviez le faire sans fil ? Grâce à cette nouvelle technologie "Bluetooth", vous pouvez vous débarrasser de tous ces câbles encombrants. Le sans fil est l'avenir ! Il n'y a qu'un seul problème : tout ce qui existe est conçu pour se connecter à l'aide d'un câble RS-232. Le Bluetooth utilise donc le protocole Radio Frequency Communication (RFCOMM) pour fournir cette interface à tous les logiciels et matériels existants.

Encore aujourd'hui, les services RFCOMM sont largement utilisés dans le matériel nouveau et existant. Il permet de répondre aux exigences spécifiques en termes de latence et de bande passante qui ne sont pas encore satisfaites par la technologie Bluetooth Low Energy. C'est pourquoi nous avons développé une intégration entre Web Serial, une API permettant de se connecter à des appareils série, et Bluetooth, afin d'autoriser l'accès à ces anciens services RFCOMM avant que les fabricants ne migrent vers le Bluetooth à basse consommation et que les développeurs puissent utiliser l'API Web Bluetooth à la place.

Modifications apportées à l'API Web Serial

À partir de Chrome 117 sur ordinateur, les développeurs Web peuvent désormais communiquer de manière fiable avec les appareils Bluetooth classiques associés via les services RFCOMM à l'aide de l'API Web Serial. Cela a été rendu possible grâce aux mises à jour suivantes de l'API Web Serial:

  • Chrome énumère désormais les appareils Bluetooth associés qui exposent une interface série à l'aide du profil de port série standard Bluetooth Classic.
  • Chrome peut désormais communiquer avec l'interface série, même si le système d'exploitation n'a pas créé de nœud d'appareil via un port série émulé.
  • Chrome peut désormais communiquer avec un service de port non série qui expose une interface série RFCOMM (voir ID de classe de service non standard).

Pour en savoir plus sur l'utilisation de l'API Web Serial, consultez l'article Lire et écrire sur un port série. Cet article suppose que vous disposez de connaissances de base sur le Bluetooth et se concentre sur les modifications apportées à la communication série sur Bluetooth.

Sans spécifier de filtres, l'appel de navigator.serial.requestPort() permet aux utilisateurs de sélectionner des ports série non Bluetooth, des ports série Bluetooth déjà mappés et tous les ports série non mappés fournis par le profil de port série Bluetooth classique standardisé.

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

Bien que la plupart des appareils exposent une communication basée sur SPP via le profil standard de port série Bluetooth Classic, certains utilisent des services personnalisés basés sur RFCOMM. Ces appareils disposent d'un ID de classe de service qui ne se trouve pas dans la plage d'UUID Bluetooth standard.

Vous devez transmettre la liste allowedBluetoothServiceClassIds à navigator.serial.requestPort() pour accéder à ces services personnalisés basés sur RFCOMM, comme indiqué dans l'exemple ci-dessous.

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

Notez que tous les ID de classe de service qui utilisent l'UUID Bluetooth SIG Base (c'est-à-dire tous les UUID se terminant par "-0000-1000-8000-00805f9b34fb") sont bloqués, à l'exception de l'ID de profil du port série, car Chrome n'est pas compatible avec les services Bluetooth Classic tels que l'audio et la vidéo.

Vous pouvez également utiliser la touche de filtre bluetoothServiceClassId lorsque vous appelez navigator.serial.requestPort() pour demander à l'utilisateur une liste des ports série Bluetooth filtrés par ID de classe de service. Aidez-vous de l'exemple ci-dessous.

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

Si le port série fait partie d'un appareil Bluetooth, une nouvelle clé bluetoothServiceClassId contenant l'ID de classe de service associé au canal RFCOMM auquel le port est connecté est disponible dans les informations sur le port série renvoyées par l'appel de port.getInfo(). Si le port série est mappé, il renvoie "00001101-0000-1000-8000-00805f9b34fb" ou 0x1101 sous sa forme abrégée.

const { bluetoothServiceClassId } = port.getInfo();

Exemple d'utilisation: Contrôler les Pixel Buds Pro

La nouvelle application Web associée Pixel Buds Pro permet aux utilisateurs de contrôler leurs Pixel Buds Pro depuis n'importe quel appareil équipé d'un navigateur Web. Elle est conçue à l'aide de technologies de progressive web apps pour une expérience de chargement instantanée. Elle peut être installée en plus d'autres applications du système d'exploitation.

L'application utilise l'API Web Serial pour communiquer avec les Pixel Buds Pro. Les utilisateurs peuvent ainsi contrôler différents paramètres de leurs Pixel Buds Pro, comme le contrôle actif du bruit, l'égaliseur, la mise en pause automatique et les mises à jour du micrologiciel.

Pour essayer l'application Web associée aux Pixel Buds Pro, accédez à mypixelbuds.google.com sur un appareil ChromeOS (d'autres plates-formes seront bientôt disponibles).

Capture d'écran de l'application Web Pixel Buds Pro associée.
Application Web associée Pixel Buds Pro

Ressources

Remerciements

Merci à Reilly Grant, Thomas Steiner, Ben Morss et Vincent Scheib pour leurs avis.