Swift 4 iOS: не обнаруживает службы подключенного устройства BLE - PullRequest
0 голосов
/ 03 октября 2018

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

Я знаю, что устройства BLE имеют ряд служб, поскольку приложение Android уже существует,который может настроить то же устройство.

Мой код подключения выглядит следующим образом:

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
    if peripheral.name == "Sensor"{
        if let name = peripheral.name {
            foundPeripherals.append(name)

            sensor = peripheral
            sensor.delegate = self
            centralManager.connect(sensor, options: nil)

        } else {
            foundPeripherals.append(peripheral.identifier.uuidString)
        }
        RSSIs.append(RSSI)
        if peripheral.name != nil {
            // For viewing the data in the console
            print("--->Peripheral device<---")
            print("Name: \(peripheral.name as Any)")
            print("UUID: \(peripheral.identifier.uuidString)")
            print("RSSI: \(RSSI)")
            print(" -  -  -  -  -  -  -  -  -  -  -  -  -  - ")
            print(advertisementData)
        }
        connectTableView.reloadData()

    }
}


func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
    print("-->Connected to Sensor<--")
    print("Sensor info: \(peripheral)")
    centralManager?.stopScan()

    peripheral.delegate = self

    peripheral.discoverServices(nil)

}

Но я получаю этот вывод в моей консоли:

--->Scanning started<---
--->Peripheral device<---
Name: Optional("Sensor")
UUID: 1AC3DC85-61E0-C3E9-0E33-D98F1D1CA791
RSSI: -43
-  -  -  -  -  -  -  -  -  -  -  -  -  - 
["kCBAdvDataServiceUUIDs": <__NSArrayM 0x2814852c0>(
6E400001-B5A3-F393-E0A9-E50E24DCCA9E
)
, "kCBAdvDataIsConnectable": 1, "kCBAdvDataLocalName": Sensor]
-->Connected to Sensor<--
Sensor info: <CBPeripheral: 0x282bd0820, identifier = 1AC3DC85- 
61E0-C3E9-0E33-D98F1D1CA791, name = Sensor, state = connected>
2018-10-03 14:56:31.029079+0200 Sensor[9686:3266937] 
[CoreBluetooth] API MISUSE: Discovering services for peripheral 
<CBPeripheral: 0x282bd0820, identifier = 1AC3DC85-61E0-C3E9-0E33- 
D98F1D1CA791, name = Sensor, state = connected> while delegate is 
either nil or does not implement peripheral:didDiscoverServices:

Этоне обнаруживает / не показывает никаких услуг

Надеюсь, что это имеет смысл, и вы, ребята, можете помочь

-Thomas

1 Ответ

0 голосов
/ 03 октября 2018

Импорт сообщения в консоли:

[CoreBluetooth] MISUSE API : Обнаружение служб для периферийных устройств , когда делегат равен нулю или не реализует периферийные устройства: didDiscoverServices:

Вы неправильно используете CoreBluetooth Framework.

Youнаписал peripheral.discoverServices(nil), что приводит к этой ошибке в консоли.Поскольку это не часть , тогда как делегат равен nil , поскольку вы писали раньше peripheral.delegate = self, это означает, что это часть , а делегат не реализует peripheral:didDiscoverServices:.

В Swift это peripheral(_:didDiscoverServices:), или, точнее, optional func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?)

Сказав это, вы реализовали его, сделали peripheral.discoverCharacteristics(nil, for: service) и получили , в то время как делегат равен нулю или не реализует peripheral:didDiscoverCharacteristicsForService:error:.

Вы видите аналогию с предыдущим выпуском?Так что реализуйте peripheral(_:didDiscoverCharacteristicsFor:error:) или более явно: optional func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?)

...