2017-02-13 9 views
2

В настоящее время я работаю над устройством BLE с CoreBluetooth. Я могу найти свое устройство через CBCentralManagerDelegate и подключиться к своему устройству.Как читать значение характеристик?

Когда я хочу узнать характеристики службы, я могу получить правильный uuid, однако значение характеристики nil. Есть идеи?

func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) { 
    if error != nil { 
     print("ERROR DISCOVERING CHARACTERISTICS: \(error?.localizedDescription)") 
     return 
    } 
    if let characteristics = service.characteristics { 

     for characteristic in characteristics { 
      print("--------------------------------------------") 
      print("Characteristic UUID: \(characteristic.uuid)") 
      print("Characteristic isNotifying: \(characteristic.isNotifying)") 
      print("Characteristic properties: \(characteristic.properties)") 
      print("Characteristic descriptors: \(characteristic.descriptors)") 
      print("Characteristic value: \(characteristic.value)") 
     } 
    } 
} 

------------------------------------------------------------------- 
Characteristic UUID: FA01 
Characteristic isNotifying: false 
Characteristic properties: CBCharacteristicProperties(rawValue: 26) 
Characteristic descriptors: nil 
Characteristic value: nil 

Другой вопрос о свойствах, в соответствии с Bluetooth SIG

enter image description here

Почему nRFConnect проявляется read, write, notify. Но он действительно получает правильное значение характеристики.

enter image description here

+2

значение будет ноль, пока не выдавать запрос на чтение и получить обратный вызов к 'метода didUpdateValue' CBPeripheralDelegate. – Paulw11

+0

Вызов 'func readValue (для характеристики: CBCharacteristic)', когда вы его обнаружили. Или setNotify (если доступно для char). – Larme

+0

Это работает. как насчет свойств? – WeiJay

ответ

0

считанное значение характеристик. скор 4

func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) { 
    for newChar: CBCharacteristic in service.characteristics!{ 

      peripheral.readValue(for: newChar) 
     }