我正在尝试使用CoreBluetooth来编写特定的已知特性。我觉得这应该是可能的,因为我使用了德州仪器BLE实用程序,您可以在连接的外围设备上选择“写入值”操作,只需输入特征UUID和您想要写入的值,它就不会执行任何问题。
据我了解,为了做到这一点,我必须打电话给
[peripheral writeValue:data forCharacteristic:...];
将CBCharacteristic
对象配置为具有正确的UUID。
我尝试使用正确的UUID创建CBMutableCharacteristic
,甚至对我所知道的此外围设备配置文件中的现有特性具有正确的权限,并且在尝试执行任何读/写操作时出现以下崩溃在外围设备上具有该特性的操作:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[CBMutableCharacteristic peripheral]: unrecognized selector sent to instance 0x1ed57690'
这是我用来设置和写入特征的代码:
NSString *characteristicUUIDstring = @"fff1";
CBUUID *characteristicUUID = [CBUUID UUIDWithString:characteristicUUIDstring];
char dataByte = 0x10;
NSData *data = [NSData dataWithBytes:&dataByte length:1];
CBMutableCharacteristic *testCharacteristic = [[CBMutableCharacteristic alloc] initWithType:characteristicUUID properties:CBCharacteristicPropertyRead|CBCharacteristicPropertyWrite value:data permissions:CBAttributePermissionsReadable|CBAttributePermissionsWriteable];
[peripheral writeValue:data forCharacteristic:testCharacteristic type:CBCharacteristicWriteWithResponse];
答案 0 :(得分:12)
虽然外围设备内部可能存在这样的特征,但这并不是它所知道的实际特征。您需要发现所有服务和特征,然后直接从这些服务和字符中书写。
//Assuming you've already discovered all your services and characteristics, do something like this:
for(CBService *service in peripheral.services)
{
if([service.UUID isEqual:theServiceCBUUIDYouAreLookingFor])
{
for(CBCharacteristic *charac in service.characteristics)
{
if([charac.UUID isEqual:theCharCBUUIDYoureLookingFor])
{
//NOW DO YOUR WRITING/READING AND YOU'LL BE GOOD TO GO
}
}
}
}
答案 1 :(得分:0)
请注意,如果您使用" authenticated_read"或" authenticated_write"您的GATT特征中的属性可能无法发现CBC特性