bluetooth
Commencez avec Bluetooth LE sous Windows
Recherche…
Remarques
Documentation
- Advertisement - Représentation d'une charge utile de publicité Bluetooth LE.
- Advertisement Publisher - Gère l'envoi des publicités Bluetooth LE.
- Annonce Watcher - Gère la surveillance des publicités Bluetooth LE.
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
.
- Ouvrir
Package.appxmanifest
- Accédez à l'onglet
Capabilities
- 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.