gpt4 book ai didi

ios - 在 iOS 中的 BLE 上写入数据时出现未知错误

转载 作者:技术小花猫 更新时间:2023-10-29 11:03:31 25 4
gpt4 key购买 nike

我正在尝试开发 iOS 应用程序,它正在检测 BLE 设备并需要调用写入命令。我可以成功连接到 BLE 设备并发现它的服务和特性。但是我在连接的外围设备上写入数据时遇到未知错误。下面是我写的代码:

发现的特征:

- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error {
NSArray *characteristics = [service characteristics];

if (peripheral != self.peripheral) {
NSLog(@"Wrong Peripheral.\n");
return ;
}

if (error != nil) {
NSLog(@"Error %@\n", error);
return ;
}

for (CBCharacteristic *characteristic in characteristics) {

if ([[characteristic UUID] isEqual:RWT_POSITION_CHAR_UUID]) {
self.positionCharacteristic = characteristic;
}
}
}

这里是BLE设备写数据的函数

- (void)writeCommand{

// See if characteristic has been discovered before writing to it
if (!self.positionCharacteristic) {
return;
}
NSString *cmd1=@"CQ+WHORU\r";

NSData *dataToWrite = [cmd1 dataUsingEncoding:NSUTF8StringEncoding];

CBCharacteristic *chr = self.positionCharacteristic;
NSLog(@"%@,%lu...%@",chr.UUID,chr.properties,chr);

NSInteger dataSize = [[NSByteCountFormatter stringFromByteCount:dataToWrite.length countStyle:NSByteCountFormatterCountStyleFile] integerValue];
if (dataSize > 130) {
NSLog(@"Cannot send more than 130 bytes");
}
else
{
[self.peripheral writeValue:dataToWrite forCharacteristic:self.positionCharacteristic type:CBCharacteristicWriteWithResponse];
}
}

- (void)peripheral:(CBPeripheral *)peripheral
didWriteValueForCharacteristic:(CBCharacteristic *)characteristic
error:(NSError *)error
{
if (error)
{
NSLog(@"Error writing characteristic value: %@", [error localizedDescription]);
}
else
{
NSLog(@"Successfully writing characteristic value");
}
}

在“didWriteValueForCharacteristic”委托(delegate)方法中出现以下错误:

Error writing characteristic value: Unknown error.

这个错误的可能原因是什么?

此外,如果我尝试定义在 BLE 设备上发送数据的特征,例如:

CBMutableCharacteristic *writeChar = [[CBMutableCharacteristic alloc]initWithType:[CBUUID UUIDWithString:@"ffe1"] properties:CBCharacteristicPropertyWriteWithoutResponse|CBCharacteristicPropertyNotify value:nil permissions:CBAttributePermissionsWriteable|CBAttributePermissionsReadable];
int8_t cmd = *[cmd1 UTF8String];

NSData *data = [NSData dataWithBytes:&cmd length:sizeof(cmd)];

NSInteger dataSize = [[NSByteCountFormatter stringFromByteCount:dataToWrite.length countStyle:NSByteCountFormatterCountStyleFile] integerValue];
if (dataSize > 130) {
NSLog(@"Cannot send more than 130 bytes");
}
else
{
[self.peripheral writeValue:dataToWrite forCharacteristic:writeChar type:CBCharacteristicWriteWithResponse];
// [self.peripheral writeValue:dataToWrite forCharacteristic:writeChar type:CBCharacteristicWriteWithResponse];
}

然后我收到这个错误:

**CoreBluetooth[WARNING] CBMutableCharacteristic: 0x1552a270 UUID = Unknown (<ffe1>),Value = (null), Properties = 0x14, Permissions = 0x3, Descriptors = (null), SubscribedCentrals = (
)> is not a valid characteristic for peripheral <CBPeripheral: 0x15549930 identifier = FC71890D-9F71-5E16-086D-D491E1EF7599, Name = " DEMOBLE1", state = connected**

最佳答案

当您写入请求响应的数据时 (CBCharacteristicWriteWithResponse)。

如果您正在写入的特性没有属性 CBCharacteristicPropertyWrite 设置,写入将失败,但仅支持无响应的写入 (CBCharacteristicPropertyWriteWithoutResponse)。

if ((self.positionCharacteristic.properties & CBCharacteristicPropertyWrite) == CBCharacteristicPropertyWrite) {
// Responses are available, so write with response.
[self.peripheral writeValue:dataToWrite forCharacteristic:self.positionCharacteristic type:CBCharacteristicWriteWithResponse];
}
else if ((self.positionCharacteristic.properties & CBCharacteristicPropertyWriteWithoutResponse) == CBCharacteristicPropertyWriteWithoutResponse) {
// Responses are not available.
// Write with response is going to fail, so write without response.
[self.peripheral writeValue:dataToWrite forCharacteristic:self.positionCharacteristic type:CBCharacteristicWriteWithoutResponse];
}

关于ios - 在 iOS 中的 BLE 上写入数据时出现未知错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28577757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com