iOS CoreBluetooth updatevalue:和didUpdateValueForCharacteristic:

时间:2013-09-18 07:19:13

标签: ios objective-c iphone bluetooth

我正在开发一款iOS应用程序,通过蓝牙4.0通过bluegiga与WT11i进行通信 iOS正在作为核心运行,而WT11i则充当外设。

WT11i广播的服务特征是写/通知

我的应用程序连接到外围设备(WT11i)后,外围设备将继续将计数器的值发送到我的应用程序。

的NSLog:

2013-09-18 14:22:58.843 IOS_Central[412:907] Receive -> 1
2013-09-18 14:22:58.904 IOS_Central[412:907] Receive -> 2
2013-09-18 14:22:58.963 IOS_Central[412:907] Receive -> 3
2013-09-18 14:22:59.023 IOS_Central[412:907] Receive -> 4

代码:

- (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error
{
    receivingThings =true;
    if (error) {
        NSLog(@"Error discovering characteristics: %@", [error localizedDescription]);
        return;
    }
    NSString *newString = [[NSString alloc] initWithData:characteristic.value encoding:NSUTF8StringEncoding];
    NSLog(@"Receive -> %@",newString);
}

我可以使用

从我的应用程序向我的外围设备发送短消息
-(void) sendToPeripheral:(NSString*)message{
    if(self.ConnectionState == CONNECTIONSTATE_NOTCONNECTED){
        return;
    }
   NSData *mainData1= [message dataUsingEncoding:NSUTF8StringEncoding];
    [self.connectedPeripheral writeValue:mainData1 forCharacteristic:self.connectedCharacteristic type:CBCharacteristicWriteWithResponse];
    NSLog(@"Send Message");
}

writeValue:to Peripheral的结果将在这里反映

- (void)peripheral:(CBPeripheral *)peripheral didWriteValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error{
    if(error == nil){
        NSLog(@"Sent successfully");
    }
    else{
        NSLog(@"Send Fail");
    }
}

当我的外围设备收到消息时,它会通过向我的应用程序发送“收到消息”确认来确认。

大部分时间沟通都很好。但是有一段时间我的应用程序会在我向外围设备发送消息后立即错过更新。

2013-09-18 14:22:58.843 IOS_Central[412:907] Receive -> 1
2013-09-18 14:22:58.904 IOS_Central[412:907] Receive -> 2
2013-09-18 14:22:58.963 IOS_Central[412:907] Receive -> 3
2013-09-18 14:22:59.023 IOS_Central[412:907] Receive -> 4
2013-09-18 14:22:59.050 IOS_Central[412:907] Send Message
2013-09-18 14:22:59.083 IOS_Central[412:907] Receive -> 5
2013-09-18 14:22:59.113 IOS_Central[412:907] Sent successfully
2013-09-18 14:22:59.143 IOS_Central[412:907] Receive -> 7
2013-09-18 14:22:59.203 IOS_Central[412:907] Receive -> 8
2013-09-18 14:22:59.263 IOS_Central[412:907] Receive -> Message Received
2013-09-18 14:22:59.322 IOS_Central[412:907] Receive -> 9

注意我的周边没有收到号码“6”? 我检查了外围设备上的日志,它说已经向我的应用发送了“6”。我最大的怀疑在于iOS corebluetooth,其中writeValue:与didUpdateValueForCharacteristic:冲突,因此导致我的“6”丢失。

之前有没有人遇到过这个问题?有什么建议吗?

1 个答案:

答案 0 :(得分:1)

可能是连接间隔问题。您可以在单个连接间隔中发送一些数据量。一旦从外围设备收到成功确认,请发送下一些数据。通过这样做,丢失数据包的可能性就会降低。

请参考: Connection Interval Core Bluetooth