BLE通知有时在iOS App中传输错误的传输数据

时间:2015-04-08 06:48:48

标签: ios bluetooth-lowenergy notify

我使用CC2541作为外设,iPad mini作为Central。我通过串口(波特率为19200)每隔一秒从CC2541传输数据作为通知。 (我也尝试每隔100毫秒传输数据。它的准确度似乎相同)

这是我的代码:

- (void) peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error{
if (error)
{
    NSLog(@"Error receiving notification for characteristic %@: %@", characteristic, error);
    return;
}

//NSLog(@"Received data on a characteristic.");

if (characteristic == self.rxCharacteristic)
{
    NSData *data = [characteristic value];
    //NSString* string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSString* string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

    [self.delegate didReceiveData:string];
}
else if ([characteristic.UUID isEqual:self.class.hardwareRevisionStringUUID])
{
    NSString *hwRevision = @"";
    const uint8_t *bytes = characteristic.value.bytes;
    for (int i = 0; i < characteristic.value.length; i++)
    {
        NSLog(@"%x", bytes[i]);
        hwRevision = [hwRevision stringByAppendingFormat:@"0x%02x, ", bytes[i]];
    }

    //[self.delegate didReadHardwareRevisionString:[hwRevision substringToIndex:hwRevision.length-2]];
}
}

我尝试了单步调试,但似乎这段代码是正确的。从外围设备传输是错误的(因为我调试时“字符串”是错误的)。我得到了大约85%的正确数据。 15%的数据是错误的。

正确的数据(字符串)为"12399921",它将通知为0x3132333939393231。通常会出现错误的数据,例如0x313233393939320x3132E7393932310x313233393932310x249ACACACA928AFE ......

也许它有办法纠正它们,因为它似乎有一些常规的......或者有什么办法可以避免来自外设的错误数据传输。无论哪种方式都可以。

提前致谢。

1 个答案:

答案 0 :(得分:0)

...对不起

我想我自己发现了什么问题。

波特率设置为 57600 而不是19200时,准确度会更好。

但对于Android应用程序来说似乎是一样的(即使波特率是19200或57600,它仍然运行良好。)