Example program for the Eddystone Beacon service.

Dependencies:   BLE_API mbed nRF51822 X_NUCLEO_IDB0XA1

Fork of BLE_EddystoneBeacon by URIBeacon

This example demonstrates how to set up and initialize a Eddystone Beacon. For more details on the Eddystone specification please see the Eddystone Github Page.

The Basics

An Eddystone Beacon is a Bluetooth Low Energy beacon, that means it does all of its data transfer in GAP advertising packets. Eddystone beacons, unlike other beacons, broadcast multiple types of data. Currently Eddystone beacons have 3 frame types (UID, URL, TLM) that will get swapped out periodically. This swapping of frame data allows Eddystone beacons to send many different types of data, thus increasing their usefulness over traditional beacons. Note that the UID frame type provides the same 16Bytes of UUID namespace that iBeacons do and the URL frame type provides the same functionality as a URIBeacon.

For more details see the Eddystone Specification.

Smartphone Apps

nRF Master Control Panel - this program recognizes Eddystone beacons and will display the data for all frame types.

iPhone Physical Web app

Android App

Walkthrough of Physical Web application

Technical Details

The Eddystone Specification looks like the following image. Please note that this may change over time and for up to date information the official spec should be referenced. /media/uploads/mbedAustin/scratch-1-.png

The Eddystone Frames get swapped in and out depending on what frames you have enabled. The only required frame type is the TLM frame, all others are optional and you can have any number enabled. To disable the UID or URL frames give their values a 'NULL' in the Eddystone constructor. The Eddystone spec recommends broadcasting 10 frames a second.

Note

  • The current Eddystone mbed example does not allow for combining the eddystone service with other services, this will be changes in a future update.
  • There is an Eddystone Config service that allows for updating beacons in the field. We are working on an example for this, so keep your eyes pealed for a future update.

Revisions of main.cpp

Revision Date Message Actions
34:f6d4a699a1ea 2015-11-26 Update example to use latest version of BLE_API and nRF51822 library. Furthermore, the example now uses a new Eddystone implementation rather than the deprecated implementation under ble/services. File  Diff  Annotate
33:862e6e0831ea 2015-10-01 updated example to be in line with API changes File  Diff  Annotate
32:41840b78597e 2015-10-01 Updating example to comply with latest API changes File  Diff  Annotate
31:bdd03742096a 2015-08-11 cleaned up code prior to public release. File  Diff  Annotate
30:6c2db8bf5b17 2015-07-24 [[Working]] Updated main program to periodically update the temperature and battery voltage. File  Diff  Annotate
29:dfb7fb5a971b 2015-07-24 [[Working]] Eddystone beacon working with URI, UID and TLM packets being sent correctly. File  Diff  Annotate
28:af37cebcb583 2015-07-24 [[FIX]] fixed build issue, now compiling, though not running correctly. File  Diff  Annotate
26:2896fbdd0450 2015-07-24 [[Branch]] Simpliefied everything down, was having trouble getting the config service to work, so i stripped it out. This is the bare bones eddystone beacon service. File  Diff  Annotate
24:8edfe6730cc2 2015-07-23 Renamed ZipBeacon ->EddystoneBeacon File  Diff  Annotate
23:05e9bb3b13af 2015-07-23 Renamed ZipBeacon->Eddystone, everything compiles and continues to work just fine. File  Diff  Annotate
22:160766614338 2015-07-23 [[Fix]] Eddystone functional with onRadioNotificationCallback. The beacon is functionally complete. Everything going forward is just polish. File  Diff  Annotate
19:f7c33fa88ca5 2015-07-23 [[Fix]] Fixed issue with UID where it would allow power outside the specified ranges. Added explicit enforcement to both the set function and the create payload function to enforce -20 to 100 as valid power levels. File  Diff  Annotate
18:91c36071aafb 2015-07-23 [[Debug]] Things are working now. Moved Radio callback to a ticker in the main.cpp file. I believe the issue i'm seeing is switching within an interrupt callback context. File  Diff  Annotate
16:a7d07ea94b31 2015-07-22 [[DEBUG]] commiting for help with Debug. Currently hardfaulting when trying to hotswap frames. File  Diff  Annotate
15:af8c24f34a9f 2015-07-20 [[Testing]] - confirmed all packets are being encoded correctly. Currently using Ticker to switch payloads. Need to add stuff to BLE library to enable callbacks to object functions.; File  Diff  Annotate
14:5a2a104a21a8 2015-07-20 [[Testing Commit]]; ; Added button interrupt that will swap out the frame types. File  Diff  Annotate
8:1a21308e5008 2015-06-20 update to the newer APIs; rename BLEDevice with BLE File  Diff  Annotate
7:e9800c45e065 2015-06-19 updating to the latest of the underlying libraries. File  Diff  Annotate
2:8020d6d4455a 2015-05-14 reintroduce param persistence into ZipBeacon. File  Diff  Annotate
0:c04d932e96c9 2015-05-12 Initial revision File  Diff  Annotate