不允许iOS中央书写

时间:2015-10-03 04:43:11

标签: ios objective-c bluetooth-lowenergy core-bluetooth

我是ios开发人员。 我可以从arduino传感器中获取值。但我无法使用以下方法发送消息。

[peripheral writeValue:dataToWrite forCharacteristic:characteristic type:CBCharacteristicWriteWithResponse];

使用dataToWrite *

来分配“NSString”值
NSString* data = @"1";
NSData* dataToWrite = [data dataUsingEncoding:NSUTF8StringEncoding];

以下代码是“DiscoverCharacteristics in service”的完整代码

//DISCOVER CHAR
-(void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error
{
    if (error) {NSLog(@"DISCOVER_CHAR - Error");return;}

    NSString* data = @"1";
    NSData* dataToWrite = [data dataUsingEncoding:NSUTF8StringEncoding];

    for (CBCharacteristic * characteristic in service.characteristics) {
        NSLog(@"DISCOVER_CHAR - Characteristic : %@",characteristic);
        [peripheral writeValue:dataToWrite forCharacteristic:characteristic type:CBCharacteristicWriteWithResponse];
    }
}

在这一点上,我想总结一下我的问题。 我的问题是 “即使我使用[Peripheral writeValue:forCharacteristic:type]方法。为什么日志监视器中会显示错误消息?”喜欢“不允许写入。”

我是否需要获得为Arduino编写消息的权限? 我必须更改以下代码? OR 我在Arduino中遇到问题(实际上,Arduino可以从其他设备收到消息......所以,Arduino源代码很好。也许......)

NSString* data = @"1";
NSData* dataToWrite = [data dataUsingEncoding:NSUTF8StringEncoding];

我有点像蓝牙菜鸟。所以这可能是我忽略的一些显而易见的事情,但任何帮助都会受到高度赞赏。

谢谢!:)

2 个答案:

答案 0 :(得分:1)

非常感谢!!!!!!! Paulw11。最后,我从iphone发送数据到Arduino。我检查了我的特征属性是什么 <CBCharacteristic: 0x13564a680, UUID = FFE1, properties = 0x16, value = (null), notifying = NO>。 我的特征属性= 0x16。但我在枚举属性中找不到0x16。不过,我还不知道0x16的含义。有人说&#34;值表示特征的可能属性。由于可以组合特征属性,因此特征可以设置多个属性值。&#34; 网址:Interpret Characteristic Properties (iOS and BLE)。  无论如何,我可以通过PaulW11帮助找到解决方案!我怎么能这样做?这是我的解决方案。 首先,我的方法是[peripheral writeValue:dataToWrite forCharacteristic:characteristic *type:CBCharacteristicWriteWithResponse]*;。 问题代码是类型字段。我必须了解这种类型。该类型具有写入,读取等含义。因此,我将类型从CBCharacteristicWriteWithResponse更改为CBCharacteristicPropertyWrite。这就是我所做的。  [peripheral writeValue:dataToWrite forCharacteristic:characteristic *type:CBCharacteristicPropertyWrite*]; 再次感谢你! Paulw11

答案 1 :(得分:0)

尝试在以下方法中打印错误:

-(void)peripheral:(CBPeripheral *)peripheral
    didWriteValueForCharacteristic:(CBCharacteristic *)characteristic
             error:(NSError *)error 
{ 
    NSLog(@"%@",error.localizedDescription);
}

如果错误是“不允许写入”,则可能无法正确写入数据。以此格式转换字符串值

NSData* data = [@"string_to_write" dataUsingEncoding:NSASCIIStringEncoding];

试试这个:

[self.peripheral writeValue:data forCharacteristic:self.characteristic type:CBCharacteristicWriteWithoutResponse];

希望它有效!!

相关问题