Bluetooth 4.0 を介して bluegiga で WT11i と通信する iOS アプリを開発しています
。WT11i が周辺機器として機能している間、iOS は中央として実行されています。
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");
}
Peripheral への writeValue: の結果がここに反映されます
- (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」が送信されたと表示されています。私の最大の疑いは、writeValue: が didUpdateValueForCharacteristic: と衝突する iOS コア Bluetooth にあるため、「6」が失われます。
以前にもこの問題に遭遇した人はいますか? なにか提案を?