Introduction to Beacons technology

You can refer to Tut 2 in the series Tutorials -> Arduino -> Tut2 - iBeacon devices with VBLUno51 and posts at the following links:

https://developer.mbed.org/teams/Bluetooth-Low-Energy/code/BLE_iBeacon/?platform=Nordic-nRF51822

http://www.havlena.net/en/location-technologies/ibeacons-how-do-they-technically-work/

http://www.warski.org/blog/2014/01/how-ibeacons-work/


An iBeacon device example using the VBLUno51 board uses mbed-OS

  • Step 1: Source code
#include "mbed.h"
#include "ble/services/iBeacon.h"

BLE ble;
    
void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
{
    BLE &ble          = params->ble;
    ble_error_t error = params->error;

    if (error != BLE_ERROR_NONE) {
        return;
    }
    
    /**
     * The Beacon payload has the following composition:
     * 128-Bit / 16byte UUID = E2 0A 39 F4 73 F5 4B C4 A1 2F 17 D1 AD 07 A9 61
     * Major/Minor  = 0x1122 / 0x3344
     * Tx Power     = 0xC8 = 200, 2's compliment is 256-200 = (-56dB)
     *
     * Note: please remember to calibrate your beacons TX Power for more accurate results.
     */
    const uint8_t uuid[] = {0xE2, 0x0A, 0x39, 0xF4, 0x73, 0xF5, 0x4B, 0xC4,
                            0xA1, 0x2F, 0x17, 0xD1, 0xAD, 0x07, 0xA9, 0x61};
    uint16_t majorNumber = 1122;
    uint16_t minorNumber = 3344;
    uint16_t txPower     = 0xC8;
    iBeacon *ibeacon = new iBeacon(ble, uuid, majorNumber, minorNumber, txPower);

    ble.gap().setAdvertisingInterval(1000); /* 1000ms. */
    ble.gap().startAdvertising();
}

int main(void)
{
    ble.init(bleInitComplete);
    
    /* SpinWait for initialization to complete. This is necessary because the
     * BLE object is used in the main loop below. */
    while (!ble.hasInitialized()) { /* spin loop */ }

    while (true) {
        ble.waitForEvent(); // allows or low power operation
    }
}
  • Step 2: Build and run

  • After compiling and loading program for VBLUno51 board, the program is run automatically. For testing purpose, you need to use a device that supports BLE. I use Beacons Scanner software running on Android phone for testing

  • Test results show that our VBLUno51 board has implemented beacons. The parameters that the device obtained is shown in the below image

  • Step 3: Learn the API functions in the above example

In the above example I have used iBeacons library of mbed-os. The program initializes the iBeacons parameters that we need, and then proceed to broadcast BLE to the environment.

The code is clear, hopefully not to make difficult for you to read it.

As can be seen, with the VNG VBLUno51 board (and other versions) you can easily build a beacons transmitter. You can experiment with the advanced precision problem to determine the distance to the beacons (Calculate Distance from RSSI signal)

  • Example Project: HERE
Tags: tutorials