Поиск…


замечания

Документация

  • Реклама . Представление рекламной информации о рекламе Bluetooth LE.
  • Advertising Publisher - управляет отправкой рекламных объявлений Bluetooth LE.
  • Advertising Watcher - управляет просмотром объявлений Bluetooth LE.

Заметки

  • Windows 10 может работать только в центральном режиме, поэтому она может подключаться только к устройствам, поддерживающим периферийный режим. Из-за этого два устройства Windows 10 не могут подключаться через Bluetooth LE.
  • Для подключения к нему Windows 10 должна быть сопряжена с устройством Bluetooth LE.

Начальная настройка

Чтобы использовать любые функции Bluetooth в приложении Universal Platform, вы должны проверить возможности Bluetooth в Package.appxmanifest .

  1. Открыть Package.appxmanifest
  2. Перейдите на вкладку « Capabilities ».
  3. Найдите Bluetooth слева и установите флажок рядом с ним.

Создайте рекламу Bluetooth LE

В этом примере показано, как рекламировать пользовательскую полезную нагрузку с устройства Windows 10 на переднем плане. Полезная нагрузка использует составленную компанию (обозначенную как 0xFFFE) и рекламирует строку Hello World в рекламе.

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

Примечание. Это только для рекламы на переднем плане (пока приложение открыто).

Прослушать Bluetooth LE

Общие слушания

В этом примере показано, как слушать конкретную рекламу.

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

Фильтр рекламы: прослушивание определенной рекламы

Иногда вы хотите слушать определенную рекламу. В этом случае прислушайтесь к рекламе, содержащей полезную нагрузку, с составленной компанией (обозначенной как 0xFFFE) и содержащей строку Hello World в рекламе. Это может быть сопряжено с примером создания сообщения Bluetooth LE для рекламы одного компьютера Windows и другого прослушивания.

Примечание. Обязательно установите этот фильтр рекламы, прежде чем запускать наблюдателя!

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

Фильтр сигналов: прослушивание объявлений Proximal

Иногда вы только хотите вызвать своего наблюдателя, когда реклама устройства входит в диапазон. Вы можете определить свой собственный диапазон, просто отметьте, что нормальные значения находятся между 0 и -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
}

Примечание. Это только для прослушивания на переднем плане.

Судя по расстоянию от RSSI от Bluetooth LE

Когда срабатывает обратный вызов Bluetooth LE Watcher, eventArgs включают значение RSSI, сообщающее вам уровень принимаемого сигнала (насколько сильно

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

Это можно приблизительно пересчитать на расстояние, но не следует использовать для измерения истинных расстояний, поскольку каждое отдельное радио отличается. Различные факторы окружающей среды могут затруднить измерение расстояния (например, стены, корпуса вокруг радио или даже влажность воздуха).

Альтернативой суждению чистого расстояния является определение «ведра». Радиостанции обычно сообщают от 0 до -50 DBm, когда они очень близки, от -50 до -90, когда они находятся на среднем расстоянии, и ниже -90, когда они находятся далеко. Пробная и ошибка лучше всего определить, что вы хотите, чтобы эти ведра были для вас.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow