Recherche…


Remarques

Documentation

Remarques

  • Windows 10 ne peut agir qu'en mode central, il ne peut donc se connecter qu'aux périphériques prenant en charge le mode périphérique. Pour cette raison, deux périphériques Windows 10 ne peuvent pas se connecter via Bluetooth LE.
  • Windows 10 doit être associé à un périphérique Bluetooth LE pour pouvoir s'y connecter.

La configuration initiale

Pour utiliser une fonctionnalité Bluetooth sur une application Universal Windows Platform, vous devez vérifier la capacité Bluetooth dans Package.appxmanifest .

  1. Ouvrir Package.appxmanifest
  2. Accédez à l'onglet Capabilities
  3. Trouvez Bluetooth à gauche et cochez la case à côté

Créer une publicité Bluetooth LE

Cet exemple montre comment publier une charge utile personnalisée à partir d'un périphérique Windows 10 au premier plan. La charge utile utilise une société créée (identifiée 0xFFFE) et annonce la chaîne Hello World dans la publicité.

BluetoothLEAdvertisementPublisher publisher = new BluetoothLEAdvertisementPublisher();

// Add custom data to the advertisement
var manufacturerData = new BluetoothLEManufacturerData();
manufacturerData.CompanyId = 0xFFFE;

var writer = new DataWriter();
writer.WriteString("Hello World");

// Make sure that the buffer length can fit within an advertisement payload (~20 bytes). 
// Otherwise you will get an exception.
manufacturerData.Data = writer.DetachBuffer();

// Add the manufacturer data to the advertisement publisher:
publisher.Advertisement.ManufacturerData.Add(manufacturerData);

publisher.Start();

Remarque: Ceci est uniquement pour la publicité au premier plan (lorsque l'application est ouverte).

Écoutez une publicité Bluetooth LE

Écoute générale

Cet exemple montre comment écouter une publicité spécifique.

BluetoothLEAdvertisementWatcher watcher = new BluetoothLEAdvertisementWatcher();

// Use active listening if you want to receive Scan Response packets as well
// this will have a greater power cost.
watcher.ScanningMode = BluetoothLEScanningMode.Active;

// Register a listener, this will be called whenever the watcher sees an advertisement. 
watcher.Received += OnAdvertisementReceived;

watcher.Start();

Filtre de publicité: écoute pour une publicité spécifique

Parfois, vous voulez écouter une publicité spécifique. Dans ce cas, écoutez une publicité contenant une charge utile avec une société constituée (identifiée 0xFFFE) et contenant la chaîne Hello World dans la publicité. Ceci peut être associé à l'exemple Créer une annonce Bluetooth LE pour avoir une publicité machine Windows et une autre écoute.

Remarque: Veillez à définir ce filtre de publicité avant de démarrer votre observateur!

var manufacturerData = new BluetoothLEManufacturerData();
manufacturerData.CompanyId = 0xFFFE;

// Make sure that the buffer length can fit within an advertisement payload (~20 bytes). 
// Otherwise you will get an exception.
var writer = new DataWriter();
writer.WriteString("Hello World");
manufacturerData.Data = writer.DetachBuffer();

watcher.AdvertisementFilter.Advertisement.ManufacturerData.Add(manufacturerData);

Filtre de signal: écoute des publicités proximales

Parfois, vous souhaitez uniquement déclencher votre observateur lorsque la publicité de l'appareil est à portée de main. Vous pouvez définir votre propre plage, notez simplement que les valeurs normales sont comprises entre 0 et -128.

// Set the in-range threshold to -70dBm. This means advertisements with RSSI >= -70dBm 
// will start to be considered "in-range" (callbacks will start in this range).
watcher.SignalStrengthFilter.InRangeThresholdInDBm = -70;

// Set the out-of-range threshold to -75dBm (give some buffer). Used in conjunction 
// with OutOfRangeTimeout to determine when an advertisement is no longer 
// considered "in-range".
watcher.SignalStrengthFilter.OutOfRangeThresholdInDBm = -75;

// Set the out-of-range timeout to be 2 seconds. Used in conjunction with 
// OutOfRangeThresholdInDBm to determine when an advertisement is no longer 
// considered "in-range"
watcher.SignalStrengthFilter.OutOfRangeTimeout = TimeSpan.FromMilliseconds(2000);

Rappels

watcher.Received += OnAdvertisementReceived;
watcher.Stopped += OnAdvertisementWatcherStopped;

private async void OnAdvertisementReceived(BluetoothLEAdvertisementWatcher watcher, BluetoothLEAdvertisementReceivedEventArgs eventArgs)
{
    // Do whatever you want with the advertisement

    // The received signal strength indicator (RSSI)
    Int16 rssi = eventArgs.RawSignalStrengthInDBm;
}


private async void OnAdvertisementWatcherStopped(BluetoothLEAdvertisementWatcher watcher, BluetoothLEAdvertisementWatcherStoppedEventArgs eventArgs)
{
    // Watcher was stopped
}

Remarque: Ceci est uniquement pour l'écoute au premier plan.

Distance d'évaluation basée sur RSSI d'une publicité Bluetooth LE

Lorsque le rappel de votre Bluetooth LE Watcher est déclenché, le paramètre eventArgs inclut une valeur RSSI indiquant la force du signal reçu (la

private async void OnAdvertisementReceived(BluetoothLEAdvertisementWatcher watcher, BluetoothLEAdvertisementReceivedEventArgs eventArgs)
{
    // The received signal strength indicator (RSSI)
    Int16 rssi = eventArgs.RawSignalStrengthInDBm;
}

Cela peut être grossièrement traduit en distance, mais ne doit pas être utilisé pour mesurer les vraies distances car chaque radio individuelle est différente. Différents facteurs environnementaux peuvent rendre la mesure difficile à évaluer (comme les murs, les caisses autour de la radio ou même l'humidité de l'air).

Une alternative à l'évaluation de la distance pure consiste à définir des "seaux". Les radios ont tendance à indiquer de 0 à -50 DBm lorsqu'elles sont très proches, de -50 à -90 lorsqu'elles sont éloignées, et inférieures à -90 lorsqu'elles sont éloignées. L'essai et l'erreur sont les meilleurs pour déterminer ce que vous voulez que ces compartiments soient pour votre application.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow