core bluetooth on ios

43
現實活中的經驗使 BLE David Chu Monday, November 18, 13

Upload: storywithoutend

Post on 31-Oct-2014

2.357 views

Category:

Technology


7 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Core Bluetooth on iOS

現實⽣生活中的經驗使⽤用 BLEDavid Chu

Monday, November 18, 13

Page 2: Core Bluetooth on iOS

WWDC 2013 開始 讀書 睡好

core bluetooth timeLINE

現在

Monday, November 18, 13

Page 3: Core Bluetooth on iOS

WWDC 2013 開始 讀書 睡好

core bluetooth timeLINE

現在

Monday, November 18, 13

Page 4: Core Bluetooth on iOS

3.02.01.0 4.0

BT4.0 Not Backwards Compatible

Monday, November 18, 13

Page 5: Core Bluetooth on iOS

Classic

4.0

Streaming @ Max 30 mA

Packets @ Max 15 mA

Monday, November 18, 13

Page 6: Core Bluetooth on iOS

Hardware

Monday, November 18, 13

Page 7: Core Bluetooth on iOS

BLE Specs

Range 50 m

Data 1 Mbps

Power 1 year

Proximity RSSI

Monday, November 18, 13

Page 8: Core Bluetooth on iOS

Power1 year?

Monday, November 18, 13

Page 9: Core Bluetooth on iOS

Monday, November 18, 13

Page 10: Core Bluetooth on iOS

Monday, November 18, 13

Page 11: Core Bluetooth on iOS

CR2032

225 mAh / 15mA = 15 hours15 hours = 54,000,000 ms

54M ms / 3 ms = 18M transactions

1 transaction every second = ~7 months

Data Transaction Time 3s

Max Antenna Power 15 mA

225 mAh

Monday, November 18, 13

Page 12: Core Bluetooth on iOS

Data1 Mbps?

Monday, November 18, 13

Page 13: Core Bluetooth on iOS

BluetoothHW

1 Mbps Streaming Video720x486

BluetoothSW

270 kbps Streaming Music120 - 320 kps

Real Life Max 56 kbps ?

Monday, November 18, 13

Page 14: Core Bluetooth on iOS

Monday, November 18, 13

Page 15: Core Bluetooth on iOS

Monday, November 18, 13

Page 16: Core Bluetooth on iOS

Range50 m?

Monday, November 18, 13

Page 17: Core Bluetooth on iOS

Monday, November 18, 13

Page 18: Core Bluetooth on iOS

Monday, November 18, 13

Page 19: Core Bluetooth on iOS

Monday, November 18, 13

Page 20: Core Bluetooth on iOS

Actual Range

50 m

30 m

Bluetooth Spec Range

Our Tested Range

Monday, November 18, 13

Page 21: Core Bluetooth on iOS

Still Need Testing

Monday, November 18, 13

Page 22: Core Bluetooth on iOS

ProximityRSSI Accuracy?

Monday, November 18, 13

Page 23: Core Bluetooth on iOS

Standing Still

Monday, November 18, 13

Page 24: Core Bluetooth on iOS

Software

Monday, November 18, 13

Page 25: Core Bluetooth on iOS

Core Bluetooth

State Preservation and RestorationApp States and Multitasking

Monday, November 18, 13

Page 26: Core Bluetooth on iOS

iOS as bluetooth-central

• Scan

• Connect

• Read

• Write

• Subscribe

Monday, November 18, 13

Page 27: Core Bluetooth on iOS

Monday, November 18, 13

Page 28: Core Bluetooth on iOS

Monday, November 18, 13

Page 29: Core Bluetooth on iOS

Monday, November 18, 13

Page 30: Core Bluetooth on iOS

Monday, November 18, 13

Page 31: Core Bluetooth on iOS

// CBCentralManagerDelegate- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI{

// peripheral.services is empty until you call [peripheral discoverServices:];NSArray *serviceUUIDs = [advertismentData objectForKey: CBAdvertisementDataServiceUUIDsKey];

}

[centralManager scanForPeripheralsWithServices:serviceUUIDs options:options];

peripheralBluetooth Device Address

00:22:D0:00:AC:92

(NSUUID *) peripheral.identifier =68753A44-4D6F-1226-9C60-0050E4C00067

BDA

Core Bluetooth

NSUUID

Your App

Monday, November 18, 13

Page 32: Core Bluetooth on iOS

(NSDictionary *)advertisementData

CBAdvertisementDataLocalNameKey Name of Device

CBAdvertisementDataManufacturerDataKey ID for Manufacturer

CBAdvertisementDataServiceDataKey Dictionary with serviceUUIDs and data

CBAdvertisementDataServiceUUIDsKey Array of serviceUUIDs

CBAdvertisementDataTxPowerLevelKey Power Level of Transmission (optional)

CBAdvertisementDataIsConnectable If Device data is connectable

Monday, November 18, 13

Page 33: Core Bluetooth on iOS

[centralManager connectPeripheral:peripheral options:options];

peripheralBluetooth Device Address

00:22:D0:00:AC:92

(NSUUID *) peripheral.identifier =68753A44-4D6F-1226-9C60-0050E4C00067

BDA

iOS Keychain

NSUUID

Your App

Monday, November 18, 13

Page 34: Core Bluetooth on iOS

-connectPeripheral:options:

// Check Peripherals That Your App Has Connected To Before- (NSArray *)retrievePeripheralsWithIdentifiers:(NSArray *)identifiers

// Scan For New Peripherals- (void)scanForPeripheralsWithServices:(NSArray *)serviceUUIDs options:(NSDictionary *)options

// Callback in CBCentralManagerDelegate- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI

// Check Peripherals Already Connected To iPhone// Peripherals may be connected to other apps, but not yours- (NSArray *)retrieveConnectedPeripheralsWithServices:(NSArray *)serviceUUIDs

Monday, November 18, 13

Page 35: Core Bluetooth on iOS

Foreground

Background

CBCentralManager CBPeripheralManager

Scan for all peripherals

Can have multiple peripheral discoveries

Scan frequency normal

Service UUIDs are advertised

Device Name advertised

Advertising frequency highest

Can only scan for service UUID

Peripheral discovered only once

Scan frequency 55x less

ServiceUUIDs are hidden

Device Name is hidden

Advertising frequency decreased

Monday, November 18, 13

Page 36: Core Bluetooth on iOS

Reconnecting Peripheral

TerminatedNot in Memory

SuspendedInactive - In Memory

BackgroundActive - Not Visible

ForegroundActive - Visible

State Preservation and Restore

// CBCentralMangerDelegateProtocol- centralManager:central didDisconnectPeripheral:peripheral error:error{

if (error) {// User did not cancel connection. Reconnect.// Connection Requests DO NOT TIME OUT[central connectPeripheral:peripheral options:nil];

}}

// CBCentralMangerDelegateProtocol- centralManager:central didConnectPeripheral:peripheral{

// App will be brought back to background state}

Monday, November 18, 13

Page 37: Core Bluetooth on iOS

Scanning For Peripherals

TerminatedNot in Memory

SuspendedInactive - In Memory

BackgroundActive - Not Visible

ForegroundActive - Visible

Scanning is not possible

iOS cannot guarantee that you will not be suspended or that you will be brought back to background once suspended.

// CBCentralMangerDelegateProtocol- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI{

// Device can connect to BLE Peripheral and run task// In Background, you have 10s to complete task.// Background scanning also runs 55X slower or more.

}

Monday, November 18, 13

Page 38: Core Bluetooth on iOS

YourApp

If the user removes your app in the multi-tasking window, then all your background operations stop.

Monday, November 18, 13

Page 39: Core Bluetooth on iOS

Resources

Monday, November 18, 13

Page 40: Core Bluetooth on iOS

LightBlue

Monday, November 18, 13

Page 41: Core Bluetooth on iOS

https://github.com/ddaddy/BackgroundKill

Monday, November 18, 13

Page 42: Core Bluetooth on iOS

https://lists.apple.com/mailman/listinfo/bluetooth-dev

Monday, November 18, 13

Page 43: Core Bluetooth on iOS

Monday, November 18, 13