bluetooth
Kom igång med Bluetooth LE på Windows
Sök…
Anmärkningar
Dokumentation
- Annons - En representation av en nyttolast på Bluetooth LE-annonsen.
- Annons Publisher - Hanterar sändning av Bluetooth LE reklam.
- Annons Watcher - Hanterar tittar Bluetooth LE reklam.
anteckningar
- Windows 10 kan bara agera i centralt läge, så det kan bara ansluta till enheter som stöder kringläge. På grund av detta kan två Windows 10-enheter inte ansluta via Bluetooth LE.
- Windows 10 måste kopplas ihop med en Bluetooth LE-enhet för att kunna ansluta till den.
Första installationen
Om du vill använda alla Bluetooth-funktioner på en Universal Windows Platform-app måste du kontrollera Bluetooth
funktionen i Package.appxmanifest
.
- Open
Package.appxmanifest
- Gå till fliken
Capabilities
- Hitta
Bluetooth
till vänster och markera rutan bredvid
Skapa en Bluetooth LE-annons
Detta exempel visar hur man annonserar en anpassad nyttolast från en Windows 10-enhet i förgrunden. Nyttolasten använder ett sammansatt företag (identifierat som 0xFFFE) och annonserar strängen Hello World
i annonsen.
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();
Obs: Detta är endast för reklam i förgrunden (medan appen är öppen).
Lyssna efter en Bluetooth LE-annons
Allmän lyssning
Detta exempel visar hur du lyssnar på en specifik annons.
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();
Annonsfilter: Lyssnar på en specifik annons
Ibland vill du lyssna på en specifik annons. I det här fallet, lyssna efter en annons som innehåller en nyttolast hos ett sammansatt företag (identifierat som 0xFFFE) och som innehåller strängen Hello World i annonsen. Detta kan kopplas ihop med exempel på Skapa en Bluetooth LE-annons för att få en Windows-maskinreklam och en annan lyssnande.
Obs! Var noga med att ställa in det här annonsfiltret innan du startar din bevakare!
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: Lyssnar efter proximala annonser
Ibland vill du bara utlösa din bevakare när enhetsannonseringen har kommit inom räckvidden. Du kan definiera ditt eget intervall, bara notera att normala värden ligger mellan 0 och -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);
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
}
Obs! Detta är endast för att lyssna i förgrunden.
Att bedöma avstånd baserat på RSSI från en Bluetooth LE-annons
När din Bluetooth LE Watcher återuppringning utlöses, inkluderar händelsenArgs ett RSSI-värde som berättar den mottagna signalstyrkan (hur stark
private async void OnAdvertisementReceived(BluetoothLEAdvertisementWatcher watcher, BluetoothLEAdvertisementReceivedEventArgs eventArgs)
{
// The received signal strength indicator (RSSI)
Int16 rssi = eventArgs.RawSignalStrengthInDBm;
}
Detta kan grovt översättas till avstånd, men bör inte användas för att mäta verkliga avstånd eftersom varje enskild radio är annorlunda. Olika miljöfaktorer kan göra avstånd svårt att mäta (som väggar, höljen runt radio eller till och med luftfuktighet).
Ett alternativ till att bedöma rent avstånd är att definiera "hinkar". Radioer tenderar att rapportera 0 till -50 DBm när de är väldigt nära, -50 till -90 när de är på medelavstånd, och under -90 när de är långt borta. Test och fel är bäst att avgöra vad du vill att dessa hinkar ska vara för din applikation.