因為 BLE 緩存區最多一次接收20字節的數據,發送數據時需對數據做分包處理。
BLE_SEND_MAX_LEN是藍牙單次可處理最大字節長度 //分包發送藍牙數據 -(void)sendMsgWithSubPackage:(NSData*)msgData Peripheral:(CBPeripheral*)peripheral Characteristic:(CBCharacteristic*)character { for (int i = 0; i < [msgData length]; i += BLE_SEND_MAX_LEN) { // 預加 最大包長度,如果依然小於總數據長度,可以取最大包數據大小 if ((i + BLE_SEND_MAX_LEN) < [msgData length]) { NSString *rangeStr = [NSString stringWithFormat:@"%i,%i", i, BLE_SEND_MAX_LEN]; NSData *subData = [msgData subdataWithRange:NSRangeFromString(rangeStr)]; NSLog(@"%@",subData); [self writeCharacteristic:peripheral characteristic:character value:subData]; //根據接收模塊的處理能力做相應延時 usleep(20 * 1000); } else { NSString *rangeStr = [NSString stringWithFormat:@"%i,%i", i, (int)([msgData length] - i)]; NSData *subData = [msgData subdataWithRange:NSRangeFromString(rangeStr)]; [self writeCharacteristic:peripheral characteristic:character value:subData]; usleep(20 * 1000); } } }