bluetooth
Erste Schritte mit Bluetooth LE unter Windows
Suche…
Bemerkungen
Dokumentation
- Werbung - Eine Darstellung einer Bluetooth LE-Werbungsnutzlast.
- Advertisment Publisher - Verwaltet das Senden von Bluetooth LE-Anzeigen.
- Advertisement Watcher - Verwaltet das Ansehen von Bluetooth LE-Anzeigen.
Anmerkungen
- Windows 10 kann nur im zentralen Modus arbeiten und kann daher nur mit Geräten verbunden werden, die den Peripheriemodus unterstützen. Daher können zwei Windows 10-Geräte keine Verbindung über Bluetooth LE herstellen.
- Windows 10 muss mit einem Bluetooth LE-Gerät gekoppelt sein, um eine Verbindung herstellen zu können.
Ersteinrichtung
Um eine Bluetooth-Funktion in einer Universal Windows Platform-App verwenden zu können, müssen Sie die Bluetooth
Funktion im Package.appxmanifest
.
- Öffnen Sie
Package.appxmanifest
- Gehen Sie auf die
Capabilities
Registerkarte - Suchen Sie links nach
Bluetooth
und aktivieren Sie das Kontrollkästchen daneben
Erstellen Sie eine Bluetooth LE-Werbung
In diesem Beispiel wird gezeigt, wie eine benutzerdefinierte Nutzlast von einem Windows 10-Gerät im Vordergrund angekündigt wird. Die Payload verwendet eine erfasste Firma (0xFFFE) und kündigt die Zeichenfolge Hello World
in der Anzeige an.
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();
Hinweis: Dies gilt nur für Werbung im Vordergrund (bei geöffneter App).
Hören Sie auf eine Bluetooth LE-Werbung
Allgemeines Zuhören
In diesem Beispiel wird gezeigt, wie Sie auf eine bestimmte Anzeige warten.
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();
Filter für Werbung: Auf eine bestimmte Werbung warten
Manchmal möchten Sie auf eine bestimmte Anzeige hören. Hören Sie in diesem Fall nach einer Werbung, die eine Nutzlast enthält, bei einer erfassten Firma (0xFFFE) und der Zeichenfolge Hello World in der Anzeige. Dies kann mit dem Beispiel " Eine Bluetooth LE-Werbung erstellen" gekoppelt werden , um einen Windows-Computer zu werben und einen anderen zu hören.
Hinweis: Stellen Sie sicher, dass Sie diesen Werbefilter einstellen, bevor Sie Ihren Beobachter starten!
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);
Signalfilter: Auf proximale Werbung warten
Manchmal möchten Sie Ihren Watcher nur dann auslösen, wenn die Gerätewerbung in Reichweite gekommen ist. Sie können Ihren eigenen Bereich definieren. Beachten Sie, dass die normalen Werte zwischen 0 und -128 liegen.
// 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);
Rückrufe
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
}
Hinweis: Dies gilt nur für das Abhören im Vordergrund.
Beurteilung der Entfernung basierend auf RSSI aus einer Bluetooth LE-Werbung
Wenn der Rückruf Ihres Bluetooth LE Watchers ausgelöst wird, enthalten die eventArgs einen RSSI-Wert, der die empfangene Signalstärke angibt (wie stark der Bluetooth LE Watcher)
private async void OnAdvertisementReceived(BluetoothLEAdvertisementWatcher watcher, BluetoothLEAdvertisementReceivedEventArgs eventArgs)
{
// The received signal strength indicator (RSSI)
Int16 rssi = eventArgs.RawSignalStrengthInDBm;
}
Dies kann grob in eine Entfernung übersetzt werden, sollte jedoch nicht zur Messung der wahren Entfernungen verwendet werden, da jedes einzelne Funkgerät unterschiedlich ist. Aufgrund verschiedener Umgebungsfaktoren kann es schwierig sein, die Entfernung zu messen (z. B. Wände, Fälle rund um das Radio oder sogar Luftfeuchtigkeit).
Eine Alternative zur Beurteilung der reinen Entfernung ist die Definition von "Buckets". Funkgeräte tendieren dazu, 0 bis -50 dBm zu melden, wenn sie sich sehr nahe sind, -50 bis -90, wenn sie sich in mittlerer Entfernung befinden, und unter -90, wenn sie weit entfernt sind. Versuch und Irrtum ist am besten zu bestimmen, was diese Buckets für Ihre Anwendung sein sollen.