he LED example demonstrates the use of a read-write characteristic to control a LED through a phone app. The canonical source for this example lives at https://github.com/ARMmbed/mbed-os-example-ble/tree/master/BLE_LED

To help you create your own BLE services, we have created this service template. The LED example demonstrates the use of a read-write characteristic to control a LED through a phone app.

The template covers:

  • Setting up advertising and connection states.
  • Assigning UUIDs to the service and its characteristic.
  • Creating an input characteristic: read-write, boolean. This characteristic offers control of the LED.
  • Constructing a service class and adding it to the BLE stack.

Running the application

Requirements

The sample application can be seen on any BLE scanner on a smartphone. If you don't have a scanner on your phone, please install :

- nRF Master Control Panel for Android.

- LightBlue for iPhone.

Hardware requirements are in the main readme.

  • NOTE:* If you have more than a single mbed board (e.g. nrf51dk or mkit) you can run the BLE_LED and BLE_LEDBlinker at the same time. For more information please refer to the BLE_LEDBlinker demo.

Building instructions

Building with mbed CLI

If you'd like to use mbed CLI to build this, then you should refer to the main readme. The instructions here relate to using the developer.mbed.org Online Compiler

In order to build this example in the mbed Online Compiler, first import the example using the ‘Import’ button on the right hand side.

Next, select a platform to build for. This must either be a platform that supports BLE, for example the NRF51-DK, or one of the following:

List of platforms supporting Bluetooth Low Energy

Or you must also add a piece of hardware and the supporting library that includes a Bluetooth Low Energy driver for that hardware, for example the K64F or NUCLEO_F401RE with the X-NUCLEO-IDB05A1

List of components supporting Bluetooth Low Energy.

Once you have selected your platform, compile the example and drag and drop the resulting binary onto your board.

For general instructions on using the mbed Online Compiler, please see the mbed Handbook

Checking for success

Note: Screens captures depicted below show what is expected from this example if the scanner used is nRF Master Control Panel version 4.0.5. If you encounter any difficulties consider trying another scanner or another version of nRF Master Control Panel. Alternative scanners may require reference to their manuals.

  • Build the application and install it on your board as explained in the building instructions.
  • Open the BLE scanner on your phone.
  • Start a scan.

https://developer.mbed.org/teams/mbed-os-examples/code/mbed-os-example-ble-LED/raw-file/c6a8f2b3efb6/img/start_scan.png

figure 1 How to start scan using nRF Master Control Panel 4.0.5

  • Find your device; it should be named `LED`.

https://developer.mbed.org/teams/mbed-os-examples/code/mbed-os-example-ble-LED/raw-file/c6a8f2b3efb6/img/scan_results.png

figure 2 Scan results using nRF Master Control Panel 4.0.5

  • Establish a connection with your device.

https://developer.mbed.org/teams/mbed-os-examples/code/mbed-os-example-ble-LED/raw-file/c6a8f2b3efb6/img/connection.png

figure 3 How to establish a connection using Master Control Panel 4.0.5

  • Discover the services and the characteristics on the device. The *LED service* has the UUID `0xA000` and includes the *LED state characteristic* which has the UUID `0xA001`. Depending on your scanner, non standard 16-bit UUID's can be displayed as 128-bit UUID's. If it is the case the following format will be used: `0000XXXX-0000-1000-8000-00805F9B34FB` where `XXXX` is the hexadecimal representation of the 16-bit UUID value.

https://developer.mbed.org/teams/mbed-os-examples/code/mbed-os-example-ble-LED/raw-file/c6a8f2b3efb6/img/discovery.png

figure 4 Representation of the Led service using Master Control Panel 4.0.5

  • Open the write pannel of the *LED state* characteristic.

https://developer.mbed.org/teams/mbed-os-examples/code/mbed-os-example-ble-LED/raw-file/c6a8f2b3efb6/img/write_characteristic.png

figure 5 How to read and write a characteristic value using Master Control Panel 4.0.5

  • The characteristic accept a 1 byte value:

https://developer.mbed.org/teams/mbed-os-examples/code/mbed-os-example-ble-LED/raw-file/c6a8f2b3efb6/img/write_pannel.png

figure 6 Write characteristic pannel using Master Control Panel 4.0.5

`0x00`: LED ON

https://developer.mbed.org/teams/mbed-os-examples/code/mbed-os-example-ble-LED/raw-file/c6a8f2b3efb6/img/LED_ON.png

figure 6 Write characteristic pannel to set the LED on using Master Control Panel 4.0.5

`0x01`: LED OFF

https://developer.mbed.org/teams/mbed-os-examples/code/mbed-os-example-ble-LED/raw-file/c6a8f2b3efb6/img/LED_OFF.png

figure 6 Write characteristic pannel to set the LED off using Master Control Panel 4.0.5

  • Toggle the LED characteristic value and see the LED turn ON or turn OFF according to the value you set.

If you can see the characteristic, and the LED is turned on/off as you toggle its value, the application is working properly.

Committer:
Vincent Coubard
Date:
Tue Jul 26 14:47:19 2016 +0100
Revision:
0:c6a8f2b3efb6
Child:
2:864ddfb70a9c
Update example at tag mbed-os-5.0.1-rc1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Vincent Coubard 0:c6a8f2b3efb6 1 To help you create your own BLE services, we have created this service template.
Vincent Coubard 0:c6a8f2b3efb6 2 The LED example demonstrates the use of a read-write characteristic to control a
Vincent Coubard 0:c6a8f2b3efb6 3 LED through a phone app.
Vincent Coubard 0:c6a8f2b3efb6 4
Vincent Coubard 0:c6a8f2b3efb6 5 The template covers:
Vincent Coubard 0:c6a8f2b3efb6 6
Vincent Coubard 0:c6a8f2b3efb6 7 * Setting up advertising and connection states.
Vincent Coubard 0:c6a8f2b3efb6 8 * Assigning UUIDs to the service and its characteristic.
Vincent Coubard 0:c6a8f2b3efb6 9 * Creating an input characteristic: read-write, boolean. This characteristic offers control of the LED.
Vincent Coubard 0:c6a8f2b3efb6 10 * Constructing a service class and adding it to the BLE stack.
Vincent Coubard 0:c6a8f2b3efb6 11
Vincent Coubard 0:c6a8f2b3efb6 12 # Running the application
Vincent Coubard 0:c6a8f2b3efb6 13
Vincent Coubard 0:c6a8f2b3efb6 14 ## Requirements
Vincent Coubard 0:c6a8f2b3efb6 15
Vincent Coubard 0:c6a8f2b3efb6 16 The sample application can be seen on any BLE scanner on a smartphone. If you don't have a scanner on your phone, please install :
Vincent Coubard 0:c6a8f2b3efb6 17
Vincent Coubard 0:c6a8f2b3efb6 18 - [nRF Master Control Panel](https://play.google.com/store/apps/details?id=no.nordicsemi.android.mcp) for Android.
Vincent Coubard 0:c6a8f2b3efb6 19
Vincent Coubard 0:c6a8f2b3efb6 20 - [LightBlue](https://itunes.apple.com/gb/app/lightblue-bluetooth-low-energy/id557428110?mt=8) for iPhone.
Vincent Coubard 0:c6a8f2b3efb6 21
Vincent Coubard 0:c6a8f2b3efb6 22 Hardware requirements are in the [main readme](https://github.com/ARMmbed/mbed-os-example-ble/blob/master/README.md).
Vincent Coubard 0:c6a8f2b3efb6 23
Vincent Coubard 0:c6a8f2b3efb6 24 *NOTE:* If you have more than a single mbed board (e.g. nrf51dk or mkit) you can
Vincent Coubard 0:c6a8f2b3efb6 25 run the BLE_LED and BLE_LEDBlinker at the same time. For more information please
Vincent Coubard 0:c6a8f2b3efb6 26 refer to the BLE_LEDBlinker demo.
Vincent Coubard 0:c6a8f2b3efb6 27
Vincent Coubard 0:c6a8f2b3efb6 28 ## Building instructions
Vincent Coubard 0:c6a8f2b3efb6 29
Vincent Coubard 0:c6a8f2b3efb6 30 Building instructions for all samples are in the [main readme](https://github.com/ARMmbed/mbed-os-example-ble/blob/master/README.md).
Vincent Coubard 0:c6a8f2b3efb6 31
Vincent Coubard 0:c6a8f2b3efb6 32 ## Checking for success
Vincent Coubard 0:c6a8f2b3efb6 33
Vincent Coubard 0:c6a8f2b3efb6 34 **Note:** Screens captures depicted below show what is expected from this example if the scanner used is *nRF Master Control Panel* version 4.0.5. If you encounter any difficulties consider trying another scanner or another version of nRF Master Control Panel. Alternative scanners may require reference to their manuals.
Vincent Coubard 0:c6a8f2b3efb6 35
Vincent Coubard 0:c6a8f2b3efb6 36
Vincent Coubard 0:c6a8f2b3efb6 37 1. Build the application and install it on your board as explained in the building instructions.
Vincent Coubard 0:c6a8f2b3efb6 38 1. Open the BLE scanner on your phone.
Vincent Coubard 0:c6a8f2b3efb6 39
Vincent Coubard 0:c6a8f2b3efb6 40 1. Start a scan.
Vincent Coubard 0:c6a8f2b3efb6 41
Vincent Coubard 0:c6a8f2b3efb6 42 ![](img/start_scan.png)
Vincent Coubard 0:c6a8f2b3efb6 43
Vincent Coubard 0:c6a8f2b3efb6 44 **figure 1** How to start scan using nRF Master Control Panel 4.0.5
Vincent Coubard 0:c6a8f2b3efb6 45
Vincent Coubard 0:c6a8f2b3efb6 46 1. Find your device; it should be named `LED`.
Vincent Coubard 0:c6a8f2b3efb6 47
Vincent Coubard 0:c6a8f2b3efb6 48 ![](img/scan_results.png)
Vincent Coubard 0:c6a8f2b3efb6 49
Vincent Coubard 0:c6a8f2b3efb6 50 **figure 2** Scan results using nRF Master Control Panel 4.0.5
Vincent Coubard 0:c6a8f2b3efb6 51
Vincent Coubard 0:c6a8f2b3efb6 52 1. Establish a connection with your device.
Vincent Coubard 0:c6a8f2b3efb6 53
Vincent Coubard 0:c6a8f2b3efb6 54 ![](img/connection.png)
Vincent Coubard 0:c6a8f2b3efb6 55
Vincent Coubard 0:c6a8f2b3efb6 56 **figure 3** How to establish a connection using Master Control Panel 4.0.5
Vincent Coubard 0:c6a8f2b3efb6 57
Vincent Coubard 0:c6a8f2b3efb6 58 1. Discover the services and the characteristics on the device. The *LED service* has the UUID `0xA000` and includes the *LED state characteristic* which has the UUID `0xA001`. Depending on your scanner, non standard 16-bit UUID's can be displayed as 128-bit UUID's. If it is the case the following format will be used: `0000XXXX-0000-1000-8000-00805F9B34FB` where `XXXX` is the hexadecimal representation of the 16-bit UUID value.
Vincent Coubard 0:c6a8f2b3efb6 59
Vincent Coubard 0:c6a8f2b3efb6 60 ![](img/discovery.png)
Vincent Coubard 0:c6a8f2b3efb6 61
Vincent Coubard 0:c6a8f2b3efb6 62 **figure 4** Representation of the Led service using Master Control Panel 4.0.5
Vincent Coubard 0:c6a8f2b3efb6 63
Vincent Coubard 0:c6a8f2b3efb6 64 1. Open the write pannel of the *LED state* characteristic.
Vincent Coubard 0:c6a8f2b3efb6 65
Vincent Coubard 0:c6a8f2b3efb6 66 ![](img/write_characteristic.png)
Vincent Coubard 0:c6a8f2b3efb6 67
Vincent Coubard 0:c6a8f2b3efb6 68 **figure 5** How to read and write a characteristic value using Master Control Panel 4.0.5
Vincent Coubard 0:c6a8f2b3efb6 69
Vincent Coubard 0:c6a8f2b3efb6 70
Vincent Coubard 0:c6a8f2b3efb6 71 1. The characteristic accept a 1 byte value:
Vincent Coubard 0:c6a8f2b3efb6 72
Vincent Coubard 0:c6a8f2b3efb6 73 ![](img/write_pannel.png)
Vincent Coubard 0:c6a8f2b3efb6 74
Vincent Coubard 0:c6a8f2b3efb6 75 **figure 6** Write characteristic pannel using Master Control Panel 4.0.5
Vincent Coubard 0:c6a8f2b3efb6 76
Vincent Coubard 0:c6a8f2b3efb6 77 * `0x00`: LED ON
Vincent Coubard 0:c6a8f2b3efb6 78
Vincent Coubard 0:c6a8f2b3efb6 79 ![](img/LED_ON.png)
Vincent Coubard 0:c6a8f2b3efb6 80
Vincent Coubard 0:c6a8f2b3efb6 81 **figure 6** Write characteristic pannel to set the LED on using Master Control Panel 4.0.5
Vincent Coubard 0:c6a8f2b3efb6 82
Vincent Coubard 0:c6a8f2b3efb6 83
Vincent Coubard 0:c6a8f2b3efb6 84 * `0x01`: LED OFF
Vincent Coubard 0:c6a8f2b3efb6 85
Vincent Coubard 0:c6a8f2b3efb6 86 ![](img/LED_OFF.png)
Vincent Coubard 0:c6a8f2b3efb6 87
Vincent Coubard 0:c6a8f2b3efb6 88 **figure 6** Write characteristic pannel to set the LED off using Master Control Panel 4.0.5
Vincent Coubard 0:c6a8f2b3efb6 89
Vincent Coubard 0:c6a8f2b3efb6 90
Vincent Coubard 0:c6a8f2b3efb6 91 1. Toggle the LED characteristic value and see the LED turn ON or turn OFF according to the value you set.
Vincent Coubard 0:c6a8f2b3efb6 92
Vincent Coubard 0:c6a8f2b3efb6 93 If you can see the characteristic, and the LED is turned on/off as you toggle its value, the application is working properly.