Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Building a Mobile Location Aware System with Beacons

Building a Mobile Location Aware System with Beacons

What if instead of a broad location, you could have pinpoint location awareness of someone in a physical space. How could this change everything about how we interact with the physical world? In this session we will be exploring Beacon technology, which enables this, the underlying Bluetooth Smart standard, and how we can use these systems to change everything from shopping, to accessibility for the disabled, all built on top of a mobile device.

Jonathan LeBlanc

February 19, 2015
Tweet

More Decks by Jonathan LeBlanc

Other Decks in Technology

Transcript

  1. Building a Mobile Location Aware System with Beacons Jonathan LeBlanc

    (@jcleblanc) Head of Global Developer Advocacy at PayPal + Braintree
  2. Connection Type: Intermittant Battery Life: ~ 1.5 years (ha) Range:

    ~ 75-100 meters Data Latency: 3ms Bluetooth Smart Details twitter: @jcleblanc | hashtag: #confoo
  3. twitter: @jcleblanc | hashtag: #confoo Estimote: $99 / 3, temp

    + motion Beacon Comparison Bluecat: Trial, AA batteries Gimbal Tag: $5, small & deployable Kontakt.io: $81 / 3, battery life
  4. Microcontroller (Arduino, etc.) Bluetooth Low Energy shield Wi-Fi shield Accelerometer

    (opt) Human Sensor (opt) Component List twitter: @jcleblanc | hashtag: #confoo
  5. twitter: @jcleblanc | hashtag: #confoo 1.  Phone to Beacon Connections

    2.  Distance feedback system 3.  Badges on beacon capture 4.  Unlock on hunt completion How it Works
  6. private static final String ESTIMOTE_PROXIMITY_UUID = "B9402F30-F5F7-466E-AFD9-25556B57GE6D"; private static final

    Region ALL_ESTIMOTE_BEACONS = new Region("regionId", ESTIMOTE_PROXIMITY_UUID, null, null); private BeaconManager beaconManager = new BeaconManager(activity); Setting the Beacon Manager twitter: @jcleblanc | hashtag: #confoo
  7. beaconManager.setRangingListener(new BeaconManager.RangingListener() { @Override public void onBeaconsDiscovered(Region region, List<Beacon> beacons)

    { ... } }); beaconManager.stopRanging(ALL_ESTIMOTE_BEACONS); Setting the Listener twitter: @jcleblanc | hashtag: #confoo
  8. double distance = 1000.0; Beacon beacon = null; for (Beacon

    rangedBeacon : beacons) { double currentDistance = Utils.computeAccuracy(rangedBeacon); if (currentDistance < distance && ! discovered.contains(rangedBeacon)){ distance = currentDistance; beacon = rangedBeacon; } } Getting Beacon Range twitter: @jcleblanc | hashtag: #confoo