Как я могу подключиться к устройству BLE? - UWP - PullRequest
0 голосов
/ 22 октября 2019

И идентификатор устройства, и адрес случайные, поэтому я НЕ МОГУ использовать их повторно для bleDevice = await BluetoothLEDevice.FromIdAsync или bleDevice = await BluetoothLEDevice.FromBluetoothAddressAsync.

Я предложил 2 возможных решения: (1) ConnectionStatusChange & (2) Pairing,

, но в обоих случаях у меня проблемы.


(1) ГЛАВНЫЙ ВОПРОС

Перед тем как отключиться, я сначала сохраняю bleDevice как bleDeviceReconnect.

Затем я отписываюсь, распоряжаюсь характеристиками и обслуживанием устройства Bluetooth, и устанавливаю их на нуль.

В случае повторного подключения вместо bleDevice = await BluetoothLEDevice.FromIdAsync(bleDeviceReconnect.DeviceId) я пытаюсь использовать:

var newSession = GattSession.FromIdAsyn(bleDeviceReconnect.BluetoothDeviceId);
newSession.MaintainConnection = true;
bleDeviceReconnect.ConnectionStatusChanged += ConnectionStatusChangedHandler;

Но в этом случае обработчик событий НИКОГДА НЕ ВЫЗЫВАЕТСЯ.

Обработчик выглядит так:

private async void ConnectionStatusChangedHandler(BluetoothLEDevice bluetoothLeDevice, object o)
{
   Debug.WriteLine(bluetoothLeDevice.ConnectionStatus.ToString()) //To check if event comes or not
   if(bluetoothLeDevice.ConnectionStatus.ToString() == "Conncected")
   {
      sList = bluetoothLeDevice.GetGattServicesForUuidAsync(custom service GUID)
      .
      .
      .
   }
}

(2) Было бы здорово, если бы вы могли ответить и на этот вопрос, но вам не нужно, если вы не знаете илиВы не хотите

Делает ли спаривание идентификатор устройства или адрес неизменным?

Сначала мне нужно использовать один из методов, которые ясказано выше в орддля получения объекта Bluetooth LE, который я могу использовать для поиска пользовательского сервиса (sList = bleDevice.GetGattServicesForUuidAsync) и характеристик (cList = sList.Services[0].GetCharacteristicsForUuidAsync), а также подписки / записи на характеристики и т. д.

Следовательно,если идентификатор или адрес изменяются, спаривание не имеет смысла.


Как правильно подключиться к устройству BLE ???

Буду очень признателен за любую помощь.


РЕДАКТИРОВАТЬ

Ричард Чжан - MSFT попросил минимальную работоспособную демонстрацию, которую я добавляю:

Код Microsoft BluetoothLE

(1) Scenario2_Client.xaml

Добавить 2 кнопки: [Отключить] и [Повторно подключить]

* Отключение не происходит сразу. Пожалуйста, подождите не менее 5 секунд, прежде чем нажать [Reconncect]

(2) Scenario2_Client.xaml.cs

Объявить private BluetoothLEDevice bluetoothLeDeviceReconnect

private void Disconnect_btn_Click(object sender, RoutedEventArgs e)
{
   bluetoothLeDeviceReconnect = bluetoothLeDevice;

   RemoveValueChangedHandler();
   selectedCharacteristic?.Service?.Dispose();
   selectedCharacteristic = null;
   service.Dispose();
   service = null;
   bluetoothLeDevice?.Dispose();
   bluetoothLeDevice = null;
   GC.Collect();
}

private void Reconnect_btn_Click(object sender, RoutedEventArgs e)
{
   var newSession = GattSession.FromIdAsyn(bluetoothLeDeviceReconnect.BluetoothDeviceId);
   newSession.MaintainConnection = true;
   bluetoothLeDeviceReconnect.ConnectionStatusChanged += ConnectionStatusChangedHandler;
}

private async void ConnectionStatusChangedHandler(BluetoothLEDevice bluetoothLeDevice, object o)
{
   SEE ABOVE
}

В данный момент я работаюиз-за того, что я еще не смог это проверить.

Дай мне знать, если это не сработает, как я сказал! Я создам учетную запись GitHub, загрузю свой проект, скопирую ссылку и вставлю ее сюда.

1 Ответ

0 голосов
/ 28 октября 2019

NVM Это работает!

Проблема с мобильным приложением во время сопряжения.

Кроме того, мне пришлось пара И добавить обработчик чтобы заставить его работать.

Я могу получить объект BluetoothLEDevice через обработчик, но поиск служб теперь является проблемой.

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

...