我是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];
我有点像蓝牙菜鸟。所以这可能是我忽略的一些显而易见的事情,但任何帮助都会受到高度赞赏。
谢谢!:)
答案 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];
希望它有效!!