Upload
shuichi-tsutsumi
View
213
Download
0
Embed Size (px)
Citation preview
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’
Printable Open-Source Humanoid “PLEN2”
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: [email protected]