1

我正在开发一个 iOS 应用程序,它通过 bluegiga 通过蓝牙 4.0 与 WT11i 通信。iOS
作为中心运行,而 WT11i 作为外围设备。

WT11i广播的服务特点是Write/Notify

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

NS日志:

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 核心蓝牙,其中 writeValue: 与 didUpdateValueForCharacteristic: 发生冲突,因此导致我的“6”丢失。

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

4

1 回答 1

1

可能是连接间隔问题。您可以在单个连接间隔内发送一些数据。一旦收到来自外围设备的成功确认,接下来发送一些数据。通过这样做,丢失数据包的机会将减少。

请参考: 连接间隔核心蓝牙

于 2013-09-18T11:36:21.520 回答