iOS ble 写入不改变值

Posted

技术标签:

【中文标题】iOS ble 写入不改变值【英文标题】:iOS ble write not change value 【发布时间】:2017-06-27 06:03:35 【问题描述】:

通过 ios (writeValue: forCharacteristic: type :) 方法发送数据可以正常工作,没有错误,但值不会改变。你知道为什么吗?

> 2017-06-27 14:53:54.846963+0900 BluetoothSample[12662:5477661] Did
> write  characteristic <CBCharacteristic: 0x1700ad500, UUID =
> 2A588021-4FB2-40F5- 8204-85315DEF11C5, properties = 0xA, value =
> <1357>, notifying = NO>


uint8_t val = 123;
NSData * valData = [NSData dataWithBytes:(void*)&val length:sizeof(val)];


 [self.discoveredPeripheral writeValue:valData forCharacteristic:characteristic type:CBCharacteristicWriteWithResponse];


- (void) peripheral:(CBPeripheral *)peripheral didWriteValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error 

    if (error) 
         NSLog(@"didWriteValueForCharacteristic With error: %@", [error localizedDescription]);

        self.receivePaketDataTextView.text = [[NSString alloc] initWithFormat:@"%@",[error localizedDescription]];
        return ;
    

    self.receivePaketDataTextView.text = [[NSString alloc] initWithFormat:@"%@",characteristic.value];

当我尝试写入时,只打印相同的日志。

【问题讨论】:

哪个值不变?在您的外围设备中的价值?你的外围设备是什么? 我尝试把ble的特征值改成123,但是没有变化。 我明白了,但是哪里你没看到变化吗?在您的外围设备上?你的外设是什么?另一个 iOS 设备?其他设备?你如何读取价值?你接到你的didWriteValueForCBPeripheralDelegate方法的电话了吗?您是否在该方法中遇到错误? 其他设备(不是 iOS 设备)的值不变。 ReadValueForCharacteristic 工作正常。 writeValue 也可以正常工作并返回返回值,但不返回值。 在您的 iOS 中心,didWriteValueForCharacteristic 中的特征值不会反映您刚刚编写的更改。您需要发出显式读取以获取新值。这是设计使然 【参考方案1】:

试试:

[self.discoveredPeripheral writeValue: valData
           forCharacteristic:self.usedCharacteristic
                        type:CBCharacteristicWriteWithoutResponse];

使用类型:CBCharacteristicWriteWithoutResponse

还要检查你是否设置了通知器

  [self.discoveredPeripheral setNotifyValue:YES forCharacteristic:self.usedCharacteristic];

在提交您的代表之前。

【讨论】:

不应插入 CBCharacteristicWriteoutResponse。 setNotifyValue 方法也被执行了,但是 chracteristic 的值没有变为 YES。【参考方案2】:

在您的 iOS 中心,didWriteValueForCharacteristic 中特征的value 不会反映您刚刚编写的更改。

您需要发出显式读取以获取新值。

这是设计使然,因为不能保证你刚刚写入的值就是特征的当前值;只有外围设备才能为您提供当前值。

【讨论】:

以上是关于iOS ble 写入不改变值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 应用程序中快速写入 BLE 特征

iOS-BLE <CBCharacteristic:未指定“无响应写入”属性 - 忽略无响应写入

使用 Ionic Native BLE 向 BLE 外围设备发出写入值

为啥在 xamarin 表单中写入操作后,我在 iOS 中获得 BLE 配对请求对话框?

如何将结构发送到 BLE 写入值?

如何从 Swift 中的 BLE 外设特征写入回调中提取数据?