iOS BLE 蓝牙 8.1 及更低版本 BLE 订阅特征通知无响应

Posted

技术标签:

【中文标题】iOS BLE 蓝牙 8.1 及更低版本 BLE 订阅特征通知无响应【英文标题】:iOS BLE Bluetooth 8.1 and lower BLE subscribed characteristic notification no response 【发布时间】:2015-10-09 13:34:09 【问题描述】:

您好,我是 ios 和目标 c 的新手,这是我的第一个应用程序,我不确定如何调试此问题。

应用程序将二进制文件发送到 STM 芯片(通过 BT 进行固件更新)。当我在 ios9 iphone 6 上运行我的应用程序时,它运行良好,没有问题,STM 芯片被刷新。当我在 iOS8 和更低版本上运行应用程序时,它不起作用。

信息流: Central 在特征 X = 0x61

中发送一个字符
`        _dataToSend1 = [@"a" dataUsingEncoding:NSUTF8StringEncoding];
        [_discoveredPeripheral writeValue:_dataToSend1 forCharacteristic:_WriteChX type:CBCharacteristicWriteWithResponse];
        [_discoveredPeripheral readValueForCharacteristic:_WriteChX];`

外设应通过特性 Y 通知响应:

          - (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error
NSLog(@"Here");
        if ([characteristic.UUID isEqual:[CBUUIDUUIDWithString:TRANSFER_CHARACTERISTIC_UUIDY]]) 
         NSLog(@"Recived");
          .
          .some other stuff
          .
    

在 iOS 9 上,我收到通知,在旧版本上,程序挂起,因为 CHY 没有响应,如果我在旧 iOS 上的调试控制台中向 CHX 写入值时设置了一个刹车点,它也可以工作?!我真的不知道如何调试这个......

编辑:所以我可以成功读取发送值 61 的特征 X。但似乎设备没有收到它。如果我第二次发送相同的命令 0x61,那么我会通过通知得到正确的响应......所以我找到了解决方法,但没有找到原因......

【问题讨论】:

【参考方案1】:

尝试在写入和读取之间设置一些时间间隔。

【讨论】:

以上是关于iOS BLE 蓝牙 8.1 及更低版本 BLE 订阅特征通知无响应的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows Phone 8.1 上连接和断开蓝牙 BLE

iPhone 4 BLE 使用核心蓝牙 4.0

Android 需要用户明确批准才能打开蓝牙

如何在 iOS 上搜索和连接附近的经典蓝牙设备(非 BLE)?

关于通过 BLE 实现固件 OTA 的任何好的资源?

如何提高蓝牙BLE的传输速率和稳定性