No ACL setup yet! Denying access to everyone.
en:edu:zmitac:s2:aih:lab:nrf52zephyrblebeacon

This is an old revision of the document!


Zephyr Beacon example

It's time to deal with some wireless transmission using nRF52840 SoC. At the beginning, we will use the example of the Bluetooth Low Energy Beacon which is included in the Zephyr installation in PlatformIO. This example advertises the device as the “Test beacon” with details provided in Eddystone 1) format.

After importing it to the Visual Studio Code we should make some configuration: remove the unwanted build target from platformio.ini, and if we want to receive messages via serial port enable it within prj.conf. This example starts the Bluetooth interface with the function bt_enable() that passes the pointer to the bt_ready() which is the callback function to notify that initialization has finished.

err = bt_enable(bt_ready);

Inside this bt_ready() function, we call bt_le_adv_start() function to start our device to function as the server (broadcaster) and begin advertising.

bt_le_adv_start(BT_LE_ADV_NCONN, ad, ARRAY_SIZE(ad), sd, ARRAY_SIZE(sd));

The argument “BT_LE_ADV_NCONN” specifies the advertising mode without the possibility of accepting connections from a client (observer).

The “ad” structure holds the content of the advertising frame.

static const struct bt_data ad[] = {
	BT_DATA_BYTES(BT_DATA_FLAGS, BT_LE_AD_NO_BREDR),
	BT_DATA_BYTES(BT_DATA_UUID16_ALL, 0xaa, 0xfe),
	BT_DATA_BYTES(BT_DATA_SVC_DATA16,
		      0xaa, 0xfe, /* Eddystone UUID */
		      0x10, /* Eddystone-URL frame type */
		      0x00, /* Calibrated Tx power at 0m */
		      0x00, /* URL Scheme Prefix http://www. */
		      'z', 'e', 'p', 'h', 'y', 'r',
		      'p', 'r', 'o', 'j', 'e', 'c', 't',
		      0x08) /* .org */
};

It contains three elements of specific types. The complete list of types with their identifiers you can find in the official Bluetooth SiG website 2).

<caption List of elements of the advertising frame> Type ID ^ Type name ^ Content 0x01 | Flags | specifies if BR/EDR is supported 0x03 | List of 16-bit UUID of all services | Eddystone UUID 0x16 | service data with 16-bit UUID | UUID and content of Eddystone data

You can observe the details in the nRF Connect application on your mobile phone.

The “sd” argument is the structure that holds scan response data.

The beacon example is very simple because the beacon device is intended to advertise only so, there is no further functionality implemented. This example shows the so-called Eddystone format 3) of Bluetooth Beacons that send simple information to nearby devices. To reduce the number of bytes sent in the advertisement frame the Eddystone format defines the list of prefixes and suffixes that can be used in the URL 4). For example, web prefixes can be encoded as in the table 2.

Tab. 2: Eddystone web prefixes
Decimal Hex Prefix
0 0x00 http://www.
1 0x01 https://www.
2 0x02 http://
3 0x03 https://

Web suffixes defined in Eddystone format are listed in the table 3.

Tab. 3: Eddystone web suffixes
Decimal Hex Suffix
0 0x00 .com/
1 0x01 .org/
2 0x02 .edu/
3 0x03 .net/
4 0x04 .info/
5 0x05 .biz/
6 0x06 .gov/
7 0x07 .com
8 0x08 .org
9 0x09 .edu
10 0x0a .net
11 0x0b .info
12 0x0c .biz
13 0x0d .gov
en/edu/zmitac/s2/aih/lab/nrf52zephyrblebeacon.1702129833.txt.gz · Last modified: by ktokarz