Zoeken…


Opmerkingen

Documentatie

Notes

  • Windows 10 kan alleen in de centrale modus werken, dus het kan alleen verbinding maken met apparaten die de perifere modus ondersteunen. Hierdoor kunnen twee Windows 10-apparaten geen verbinding maken via Bluetooth LE.
  • Windows 10 moet worden gekoppeld met een Bluetooth LE-apparaat om er verbinding mee te kunnen maken.

Initiële setup

Als u Bluetooth-functies op een Universal Windows Platform-app wilt gebruiken, moet u de Bluetooth functionaliteit in het Package.appxmanifest .

  1. Open Package.appxmanifest
  2. Ga naar het tabblad Capabilities
  3. Zoek links Bluetooth en vink het vakje ernaast aan

Maak een Bluetooth LE-advertentie

Dit voorbeeld laat zien hoe u een aangepaste payload kunt adverteren vanaf een Windows 10-apparaat op de voorgrond. De payload maakt gebruik van een verzonnen bedrijf (geïdentificeerd als 0xFFFE) en adverteert de string Hello World in de advertentie.

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();

Opmerking: dit is alleen voor advertenties op de voorgrond (terwijl de app open is).

Luister naar een Bluetooth LE-advertentie

Algemeen luisteren

Dit voorbeeld laat zien hoe u naar een specifieke advertentie kunt luisteren.

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();

Advertentiefilter: luisteren naar een specifieke advertentie

Soms wilt u naar een specifieke advertentie luisteren. Luister in dit geval naar een advertentie met een lading bij een verzonnen bedrijf (geïdentificeerd als 0xFFFE) en met de tekenreeks Hello World in de advertentie. Dit kan worden gecombineerd met het voorbeeld Een Bluetooth LE-advertentie maken om een Windows-machine te laten adverteren en een andere te laten luisteren.

Opmerking: zorg ervoor dat u dit advertentiefilter instelt voordat u uw watcher start!

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);

Signaalfilter: luisteren naar proximale advertenties

Soms wilt u uw watcher alleen activeren wanneer de apparaatadvertenties binnen bereik zijn gekomen. U kunt uw eigen bereik definiëren, houd er rekening mee dat de normale waarden tussen 0 en -128 liggen.

// 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);

callbacks

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
}

Opmerking: dit is alleen voor het luisteren op de voorgrond.

Beoordeling van de afstand op basis van RSSI van een Bluetooth LE-advertentie

Wanneer de callback van uw Bluetooth LE Watcher wordt geactiveerd, bevatten de eventArgs een RSSI-waarde die u de sterkte van het ontvangen signaal aangeeft (hoe sterk de

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

Dit kan grofweg worden vertaald in afstand, maar mag niet worden gebruikt om ware afstanden te meten, omdat elke afzonderlijke radio anders is. Verschillende omgevingsfactoren kunnen de afstand bemoeilijken (zoals muren, behuizingen rond de radio of zelfs luchtvochtigheid).

Een alternatief voor het beoordelen van pure afstand is het definiëren van "emmers". Radio's hebben de neiging om 0 tot -50 DBm te rapporteren als ze heel dichtbij zijn, -50 tot -90 als ze op middellange afstand zijn, en onder -90 als ze ver weg zijn. Probeer het uit en probeer het beste om te bepalen wat deze emmers voor uw toepassing zijn.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow