Building iOS apps using "Bluetooth Low Energy"

71
Building iOS apps using "Bluetooth Low Energy" Shuichi Tsutsumi @shu223 July 25, 2016 Azrieli College, Jerusalem July 26, 2016 Google Campus - Tel Aviv, Israel July 27, 2016 SigmaLabs - Tel Aviv, Israel July 28, 2016 Birzeit University - Palestine

Transcript of Building iOS apps using "Bluetooth Low Energy"

Page 1: Building iOS apps using "Bluetooth Low Energy"

Building iOS apps using "Bluetooth Low Energy"

Shuichi Tsutsumi @shu223July 25, 2016 Azrieli College, Jerusalem July 26, 2016 Google Campus - Tel Aviv, Israel July 27, 2016 SigmaLabs - Tel Aviv, Israel July 28, 2016 Birzeit University - Palestine

Page 2: Building iOS apps using "Bluetooth Low Energy"
Page 4: Building iOS apps using "Bluetooth Low Energy"

Overview• Basics of BLE • Practical Tips to build apps using BLE

with Japanse Products

Page 5: Building iOS apps using "Bluetooth Low Energy"

Bluetooth Low Energy?

Page 6: Building iOS apps using "Bluetooth Low Energy"

Bluetooth Low Energy (BLE)• Wireless technology

- no network infrastructure required

Wi-FiBLE

Page 7: Building iOS apps using "Bluetooth Low Energy"

• Low energy

• NOT compatible with Classic BT

• Uses 2.4 GHz radio frequencies

• Marketed by the Bluetooth SIG

• etc…

Page 8: Building iOS apps using "Bluetooth Low Energy"

The most important thing (for iOS developers)

Page 9: Building iOS apps using "Bluetooth Low Energy"

The iOS API ‘Core Bluetooth’ is open for developers

• API for Classic BT is NOT open.

- Requires MFi certification.

Page 10: Building iOS apps using "Bluetooth Low Energy"

BLE is almost the ONLY way to enable iOS apps to communicate

with external hardware without infrastructure or MFi.

Page 11: Building iOS apps using "Bluetooth Low Energy"

fuelband estimote konashi moff band sensortag

fuelband estimote konashi moff band sensortag

External HW

• Simple

→ Small, Low cost & Long life

Smart Phone• High Performance

• Internet Connection

• Easy to program

• etc…

Communicate with BLE

Page 12: Building iOS apps using "Bluetooth Low Energy"

Basics of BLE

Page 14: Building iOS apps using "Bluetooth Low Energy"

(Demo)

Page 15: Building iOS apps using "Bluetooth Low Energy"

Moff Band Moff App

Sensor Data

BLE Connection

Sensors - Gyroscope - Accelerometer

Analyze sensor data

Recognize - Gesture - Posture

Play sounds

Page 16: Building iOS apps using "Bluetooth Low Energy"

Sensor Data

BLE Connection

How is sensor data sent to the app?

Page 17: Building iOS apps using "Bluetooth Low Energy"

Scan

Step 1. Scan

Advertise

: Search for nearby BLE devices

centralManager.scanForPeripheralsWithServices(nil, options: nil)

Peripheral Central

Page 18: Building iOS apps using "Bluetooth Low Energy"

Connect

Step 2. Connect

centralManager.connectPeripheral(peripheral, options: nil)

Page 19: Building iOS apps using "Bluetooth Low Energy"

Moff Service

xx Service

Button Characteristic

xx Characteristic

Sensor Characteristic

Subscribe (Request to be notified)

Step 3. Subscribe : Ready to receive data

GATT = Generic Attribute Profile

peripheral.setNotifyValue(true, forCharacteristic: c)

Page 20: Building iOS apps using "Bluetooth Low Energy"

Step 4. Notify

Notify subscribers

Moff Service

Sensor Characteristic

xxxx Characteristic

Update the value

func peripheral(peripheral: CBPeripheral, didUpdateValueForCharacteristic characteristic: CBCharacteristic, error: NSError?) { print(“Received sensor data!”) }

Page 21: Building iOS apps using "Bluetooth Low Energy"

Hardware Side?I’m sorry, I don’t know…

Page 22: Building iOS apps using "Bluetooth Low Energy"

BLE

Firmware Engineer iOS Engineer

Page 23: Building iOS apps using "Bluetooth Low Energy"

Japanese Hardware Products

I’ve worked on

Page 24: Building iOS apps using "Bluetooth Low Energy"
Page 25: Building iOS apps using "Bluetooth Low Energy"
Page 26: Building iOS apps using "Bluetooth Low Energy"
Page 27: Building iOS apps using "Bluetooth Low Energy"
Page 28: Building iOS apps using "Bluetooth Low Energy"
Page 29: Building iOS apps using "Bluetooth Low Energy"
Page 30: Building iOS apps using "Bluetooth Low Energy"
Page 31: Building iOS apps using "Bluetooth Low Energy"
Page 32: Building iOS apps using "Bluetooth Low Energy"
Page 33: Building iOS apps using "Bluetooth Low Energy"

Group conversation system with VoIP

- Detects the human voice

- Cuts out all background noise

→ Can be used even in areas with poor coverage!

Page 34: Building iOS apps using "Bluetooth Low Energy"

BLE for BONX

Page 35: Building iOS apps using "Bluetooth Low Energy"

IoT for Cars ‘SmartDrive’

Page 37: Building iOS apps using "Bluetooth Low Energy"

Music for the DeafDaito Manabe/Motoi Ishibashi/Teruoka Masaki/Shuichi Tsutsumi x SOUL FAMILY

Page 38: Building iOS apps using "Bluetooth Low Energy"

Music for the DeafDaito Manabe/Motoi Ishibashi/Teruoka Masaki/Shuichi Tsutsumi x SOUL FAMILY

Commands

Electronic Stimulation DeviceiPhone

Page 39: Building iOS apps using "Bluetooth Low Energy"
Page 40: Building iOS apps using "Bluetooth Low Energy"

Practical Tips to build apps using BLE

Page 41: Building iOS apps using "Bluetooth Low Energy"

Defining GATT

Page 42: Building iOS apps using "Bluetooth Low Energy"

GATT to send sensor data

Foo Service

Sensor Data Characteristic

UUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Bar Service

xx Characteristic

UUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Properties: Notify

Value: acc x, acc y, acc z, gyro x, gyro y, gyro z (2bytes for each)

xx Characteristic

Page 43: Building iOS apps using "Bluetooth Low Energy"

GATT to send button interactions

Foo Service

Button Control Characteristic

UUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

UUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Properties: Notify

Value: 0x01 or 0x00

Button interactions

0x01: Pushed 0x00: Released

Page 44: Building iOS apps using "Bluetooth Low Energy"

GATT for remote control

Foo Service

Remote Control Characteristic

UUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

UUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Properties: Write

Value: Horizontal (-100 ~ 100), Vertical (-100 ~ 100)

values

Page 45: Building iOS apps using "Bluetooth Low Energy"

How to define GATT1. Create UUID for the service & characteristic

2. Define the properties (Read, Notify, Write, etc.)

Peripheral → Central: Notify Central → Peripheral: Write

3. Define the value format

Usually limited to 20 bytes

$ uuidgen CEEA31BC-BEAC-4A78-B7ED-FC96B6254D4C

Page 46: Building iOS apps using "Bluetooth Low Energy"

Reference: GATT profiles by Bluetooth SIG

Page 47: Building iOS apps using "Bluetooth Low Energy"

Defining background behaviors

Page 48: Building iOS apps using "Bluetooth Low Energy"

Background behaviors on iOS• Very limited

- Listening to music

- Getting location data

- Downloading data

Page 49: Building iOS apps using "Bluetooth Low Energy"

Imagine

Page 50: Building iOS apps using "Bluetooth Low Energy"

If BLE didn’t work in the background…

Page 51: Building iOS apps using "Bluetooth Low Energy"

You would have to always keep the app in the foreground, while snowboarding!

Page 52: Building iOS apps using "Bluetooth Low Energy"

You would have to launch the app whenever you go driving!

Page 53: Building iOS apps using "Bluetooth Low Energy"

What functions can be used in the background in iOS?

• Scanning peripherals

• Connecting with peripherals

• Reading characteristics’ value

• Writing characteristics’ value

• Receiving notifications

Almost all functions can be used even in the background!

Page 54: Building iOS apps using "Bluetooth Low Energy"

Limitations• Longer intervals for scanning

• Must explicitly specify one or more services to scan

• CBCentralManagerOptionShowPowerAlertKey option is ignored

Resources

- Core Bluetooth Programming Guide

- Core Bluetooth Framework Reference (also in headers)

Page 55: Building iOS apps using "Bluetooth Low Energy"

If the app in the background is killed by the system…

Page 56: Building iOS apps using "Bluetooth Low Energy"
Page 57: Building iOS apps using "Bluetooth Low Energy"

State Preservation and Restoration

The system takes over the BLE tasks even after the app is killed.

- Preserves the state of the app’s central managers and continues the BLE tasks on their behalf.

- Relaunches the app into the background and calls the corresponding callback method.

→ The app can handle BLE events!

Page 58: Building iOS apps using "Bluetooth Low Energy"

func peripheral(peripheral: CBPeripheral, didUpdateValueForCharacteristic characteristic: CBCharacteristic, error: NSError?) { print(“Received the characteristic data!”) }

• The app is killed by the system

• The user pushes the button on the peripheral device

• The system receives the notification

• The app is relaunched in the BG and the delegate method is called.

The app can process the button interaction!

Page 59: Building iOS apps using "Bluetooth Low Energy"

How to test without HW prototypes

Page 60: Building iOS apps using "Bluetooth Low Energy"

Did the HW prototypes exist when develop the apps?

Projects HW prototypes existed?

Moff YES

WHILL NOBONX NOSmartDrive YES

PLEN2 NOMusic for the Deaf NO

Page 61: Building iOS apps using "Bluetooth Low Energy"

Development Kit

Can start development without creating a circuit ourselves

BLE ModuleDisplay

USB interface

Battery box

Page 62: Building iOS apps using "Bluetooth Low Energy"

Horizontal (-100~100) / Vertical (-100~100)

Development Kit AppBLE

Page 63: Building iOS apps using "Bluetooth Low Energy"
Page 64: Building iOS apps using "Bluetooth Low Energy"

Emulator App

• Develop another iOS app as the alternative to the peripheral device

• Easier for iOS engineers

Page 65: Building iOS apps using "Bluetooth Low Energy"

Multi-Function Control • Single Tap • Double Tap • Long Press • Very Long Press

=

Page 66: Building iOS apps using "Bluetooth Low Energy"

App Review

Page 67: Building iOS apps using "Bluetooth Low Energy"

Costing too much

MSRP $13,995

Not enough devices when submitting

Page 68: Building iOS apps using "Bluetooth Low Energy"

Videos for review

• Show how the app works with the peripheral device • Not need to be cool!

Page 69: Building iOS apps using "Bluetooth Low Energy"

• Shoot with iPhone • Edit with iMovie

Page 70: Building iOS apps using "Bluetooth Low Energy"

Recap• What is Bluetooth Low Energy?

• Basics of BLE with ‘Moff’.

• Japanese Hardware Products I’ve worked on

• Practical Tips to build apps using BLE - Defining GATT

- Defining background behaviors

- Testing without HW prototypes

- App Review

Page 71: Building iOS apps using "Bluetooth Low Energy"

Thank you!Shuichi Tsutsumi - iOS Freelancer

• Twitter: @shu223

• GitHub: shu223

• Email: [email protected]