Прослушивание изменения значения характеристики с нескольких подключенных устройств BLE в iOS - PullRequest
0 голосов
/ 29 октября 2019

У меня есть устройство BLE, выполненное на заказ, с запуском на BLE v4.1, и я использую swift 5, чтобы создать приложение для iOS, которое может подключаться ко всем устройствам BLE в диапазоне телефонов iOS.

Я могу подключить и показать все устройства (которые имеют определенное имя), и я показываю их в таблице. С другой стороны, у меня есть полная реализация для подключения к первому обнаруженному устройству BLE, обнаружения служб, обнаружения характеристик, считывания значений характеристик с использованием метода делегата didUpdateValueFor в BTService.

func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {

    NSLog("didUpdateValue function called from BTService")

      if error != nil {
         print("ERROR ON UPDATING VALUE FOR CHARACTERISTIC: \(characteristic) - \(String(describing: error?.localizedDescription))")
         return
      }
    print("updating value of peripheral \(String(describing: peripheral))")
    print("Value of characteristic updated and didUpdateValueFor called. Value of characteristic is: \(characteristic.value!)")

      DispatchQueue.main.async(execute: { () -> Void in
         self.didReceiveData(characteristic.uuid, characteristic.value!)

                if characteristic == OTAUpgradeCharacteristic {
                    NSLog("Value updated for bootloader characteristic")

                    bootloaderModel.peripheralValueUpdate(peripheral, characteristic: characteristic, error: error)

                }
      })
   }

Я хочу одновременно прочитатьзначение характеристик, объявляемых на нескольких подключенных устройствах BLE одного типа. Все устройства BLE, к которым я подключаюсь, имеют одинаковое рекламное имя и одинаковые характеристики, но разные идентификаторы. Каждое устройство может отправлять разные значения характеристики. Каждый раз, когда я пытаюсь прочитать данные с нескольких подключенных устройств BLE одновременно, мой код считывает данные только с последнего подключенного устройства.

Существует ли какая-либо библиотека или код, которые можно использовать для получения данных рекламывсе устройства одновременно или didUpdateValueFor вызывается для каждого подключенного периферийного устройства?

1 Ответ

0 голосов
/ 02 ноября 2019

«получить рекламные данные» можно интерпретировать несколькими способами. Рекламные данные - это тип информации, являющейся частью процесса рекламы BLE, который вы получаете как часть процесса сканирования CentralManager и не отображаются в функции, показанной выше. Я предполагаю, что рекламные данные здесь используются в общем для обозначения характерных данных, которые можно прочитать или прослушать после подключения вашего приложения к периферийному устройству.

Короче говоря, каждый раз, когда ваш код подключается к устройству через CentralManager connect (_: options :), iOS создает соединение для этого конкретного периферийного устройства. Таким образом, ваш код должен содержать ссылку на периферийное устройство, и вы должны назначить делегата для каждого периферийного устройства, выполнить обнаружение службы / характеристики для каждого и т. Д. Код может делать это с одним классом, который ведет себя как делегат для каждого из них. подключенное периферийное устройство. Приведенный выше фрагмент подразумевает это, но он не показывает наверняка.

Нам нужно было бы увидеть код, который используется для обработки службы и обнаружения признаков, а также для подписки на уведомления или для генерацииПрочитайте запрос, чтобы увидеть наверняка, что происходит. Я подозреваю, что там есть проблема. Скорее всего, запрос на чтение выполняется только по одной характеристике. Я полагаю, что помимо поддержки периферийных устройств необходимо придерживаться характеристики CBC для каждого устройства. Например, если вы храните один CBCharacteristic для всех периферийных устройств, это может вызвать эту проблему.

Немного больше подробностей будет полезно, но, вероятно, проблема заключается в том, как выполняется чтение, и в управлении CBPeripheral. и CBC характерные ссылки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...