building ios apps using "bluetooth low energy"

Post on 16-Apr-2017

213 Views

Category:

Mobile

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

with Japanse Products

Bluetooth Low Energy?

Bluetooth Low Energy (BLE)• Wireless technology

- no network infrastructure required

Wi-FiBLE

• Low energy

• NOT compatible with Classic BT

• Uses 2.4 GHz radio frequencies

• Marketed by the Bluetooth SIG

• etc…

The most important thing (for iOS developers)

The iOS API ‘Core Bluetooth’ is open for developers

• API for Classic BT is NOT open.

- Requires MFi certification.

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

with external hardware without infrastructure or MFi.

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

Basics of BLE

(Demo)

Moff Band Moff App

Sensor Data

BLE Connection

Sensors - Gyroscope - Accelerometer

Analyze sensor data

Recognize - Gesture - Posture

Play sounds

Sensor Data

BLE Connection

How is sensor data sent to the app?

Scan

Step 1. Scan

Advertise

: Search for nearby BLE devices

centralManager.scanForPeripheralsWithServices(nil, options: nil)

Peripheral Central

Connect

Step 2. Connect

centralManager.connectPeripheral(peripheral, options: nil)

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)

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!”) }

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

BLE

Firmware Engineer iOS Engineer

Japanese Hardware Products

I’ve worked on

Group conversation system with VoIP

- Detects the human voice

- Cuts out all background noise

→ Can be used even in areas with poor coverage!

BLE for BONX

IoT for Cars ‘SmartDrive’

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

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

Commands

Electronic Stimulation DeviceiPhone

Practical Tips to build apps using BLE

Defining GATT

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

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

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

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

Reference: GATT profiles by Bluetooth SIG

Defining background behaviors

Background behaviors on iOS• Very limited

- Listening to music

- Getting location data

- Downloading data

Imagine

If BLE didn’t work in the background…

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

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

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!

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)

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

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!

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!

How to test without HW prototypes

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

Development Kit

Can start development without creating a circuit ourselves

BLE ModuleDisplay

USB interface

Battery box

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

Development Kit AppBLE

Emulator App

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

• Easier for iOS engineers

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

=

App Review

Costing too much

MSRP $13,995

Not enough devices when submitting

Videos for review

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

• Shoot with iPhone • Edit with iMovie

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

Thank you!Shuichi Tsutsumi - iOS Freelancer

• Twitter: @shu223

• GitHub: shu223

• Email: shuichi0526@gmail.com

top related