2016-09-20 11 views
0

リモートデバイスが特性値を変更したときにアプリに通知することができますが、アプリが値を更新するとリモートデバイスはそれを見ません。特性にデータを送信できません

だから、私は私の特性が有効である知っている、私はまた、他のアプリは、(実際のデバイスを印刷、それを)

だから問題はアプリで、もちろんであるという特性に書き戻すことが可能であることを知っています。

さらに興味深いのは、すべての特性にのハンドルがあり、それぞれ独自のUUIDを持つことです。

のiOSは、私だけが2つのハンドルが、私は、コールバックを取得し、ライトバックしようとし、ここで、とにかく異なるUUID'S

と各特性のためにありますが、私の特性UUID、そのハンドルへのアクセスなしを確認できるようになる

func sendData(data:String) 
    { 
     if(peripheral != nil) 
     { 
      //happens for sure 
      var bytesData = [UInt8](data.utf8) 
      let writeData = NSData (bytes: &bytesData, length: bytesData.count) 
      peripheral.writeValue(writeData as Data, for: characteristic, type: CBCharacteristicWriteType.withResponse) 
     } 
    } 

と私の特性をリスト(プリント:と

func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) { 
    print("UPDATE FROM:" , characteristic) //good! 
    sendData(data: "check") //not good 
     if characteristic.uuid.uuidString == characteristicUUID { 
     if let str = NSString(data: characteristic.value!, encoding: String.Encoding.utf8.rawValue) 
     { 
      print("BLE:GOT:",str) 
      NotificationCenter.default.post(name: Notification.Name(rawValue: "Bluetooth"), object: str) 
     } 
     } 
} 

と書き込み1つのUUID - 私たちは1つだけを持っている真のthatsが、それは異なるUUIDを持つ2つの取っ手を持っている)

func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) { 
     for charateristic in service.characteristics! 
     { 
       print("Found CHARACTERISTIC:",charateristic as CBCharacteristic) 
     } 

答えて

2

あなたはproperitiesがあなたの特性のために設定されているかどうか確認する必要があります。 CBCharacteristicPropertyWriteが設定されている場合、レスポンス付きの書き込みを実行できます。 CBCharacteristicPropertyWriteWithoutResponseが設定されている場合は、type: CBCharacteristicWriteType.withResponseを設定してwriteValueを実行することはできません。

+0

ありがとうございます、私はあなたを取得するか分からない。これをチェック/設定する方法は?私はあなたが私の質問を完全に読んだかどうか分からないが、他のアプリが同じデバイスに書き込むことができると言った。 – Curnelious

+0

BLEデバイス側のファームウェアまたはドキュメントにアクセスできない場合は、単にCBCharacteristicWriteType.withResponse CBCharacteristicWriteType.withoutResponseに設定します。もしうまくいくなら、それだけです。変更するには、ファームウェアへのアクセスが必要です。 –

+0

ああ、あなたは私の問題を解決する、WriteWithoutResponse!ありがとう。 – Curnelious

関連する問題