Blue Gecko использует принятый Bluetooth SIG сервисный термометр здоровья.Документация SIG гласит следующее: Источник: https://www.bluetooth.com/specifications/gatt
После настройки Коллектором термометр, как правило, остается отключенным между использованиями и будет только рекламировать и позволять Коллекторуподключаться, когда у термометра есть данные для отправки.В этом случае термометр войдет в режим GAP-подключения и начнет рекламу, когда у него есть данные для отправки в коллектор.Коллектор обычно выполняет процедуру установления соединения GAP таким образом, что он сканирует Термометр, используя белый список.Когда соединение установлено, термометр отправляет одно или несколько указаний или уведомлений в коллектор.Когда передача данных завершена, термометр обычно прерывает соединение.
Где коллектор - ваше приложение, а термометр - ваш Blue Gecko.
Для UWP это означает: прослушивание устройства с AdvertisingWatcher и получите устройство.Получить услугу и подключиться.Получите характеристику и установите ClientCharacteristicConfigurationDescriptor для уведомления.Реализуйте метод изменения значения характеристики.
Это означает, что значения термометра находятся в уведомлении, или вы должны прочитать значения после получения уведомления.Если уведомлений нет, читать нечего.
Я сделал пример на Github, объяснив рекламодателя и подписавшись на уведомления: https://github.com/GrooverFromHolland/SimpleBleExample_by_Devicename
Пример написан для Visual Studio 2017, ноВы можете прочитать самые важные методы и получить представление об этом, открыв файл MainPage.xaml.cs на Github.
Вы читаете температуру в байтовом массиве, связывая поле флагов (8 бит), температуру (4 байта)и необязательная метка времени (7 байт), temptype (8 бит) от https://www.bluetooth.com/specifications/gatt/viewer?attributeXmlFile=org.bluetooth.characteristic.temperature_measurement.xml
Ваш appxmanifest должен содержать:
<Capabilities>
<Capability Name="internetClient" />
<DeviceCapability Name="bluetooth" />
</Capabilities>
В моем примере добавьте следующие строки после:
characteristicFoundMilis = stopwatch.ElapsedMilliseconds;
Debug.WriteLine("Characteristic found in " +
(characteristicFoundMilis - serviceFoundMilis) + " ms");
Строки для добавления:
GattCharacteristicProperties properties = charac.CharacteristicProperties;
if (properties.HasFlag(GattCharacteristicProperties.Read))
{
Debug.WriteLine("This characteristic supports reading from it.");
}
if (properties.HasFlag(GattCharacteristicProperties.Write))
{
Debug.WriteLine("This characteristic supports writing to it.");
}
if (properties.HasFlag(GattCharacteristicProperties.Notify))
{
Debug.WriteLine("This characteristic supports subscribing to notifications.");
}
if (properties.HasFlag(GattCharacteristicProperties.Indicate))
{
Debug.WriteLine("This characteristic supports subscribing to Indication");
}