我正在开发一个 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”丢失。
以前有没有人遇到过这个问题?有什么建议吗?