Suche…


Bemerkungen

Dokumentation

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 .

  1. Öffnen Sie Package.appxmanifest
  2. Gehen Sie auf die Capabilities Registerkarte
  3. 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.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow