1

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」が失われます。

以前にもこの問題に遭遇した人はいますか? なにか提案を?

4

1 に答える 1

1

接続間隔の問題である可能性があります。1 回の接続間隔である程度の量のデータを送信できます。Peripherals から成功確認を受信したら、次のデータを送信します。これにより、パケットが失われる可能性が低くなります。

これを参照してください: 接続間隔 Core Bluetooth

于 2013-09-18T11:36:21.520 に答える