nRF5 SDK for Thread and Zigbee v2.0.0
BLE Proximity and Thread CoAP Server Example

Table of Contents

The BLE Proximity and Thread CoAP Server Example example is provided in two configurations:

If native USB CDC connectivity is used on Windows XP/7 hosts, you must manually install the nordic_cdc_acm.inf driver located at <InstallFolder>\examples\usb_drivers. Hosts running on Windows 8 (and later) will automatically pick the correct driver (usbser.sys).

This BLE-Thread dynamic multiprotocol example requires you to run on the second board any complementary example that contains Thread CoAP Server functionality, for example:

This example application is based on the Proximity Application example available in nRF5 SDK. It has been extended to support dynamic switching between two connection modes, BLE and Thread, at the same time (concurrently). Thread operates on the 802.15.4 radio during Bluetooth low energy radio's inactive time (using Timeslot API). Depending on the Bluetooth low energy connection interval, nRF52840 SoC can spend up to 99% of the radio time on Thread protocol.

This example also supports the Thread CoAP Server role as described in Simple CoAP Server example.

The application works similarly to ble_app_proximity, using BLE Proximity and BLE Find Me Profiles. When the device is in BLE connection, it can trigger a sound alarm on BLE Central node (for example, a smartphone) by using BSP_BUTTON_0. Similarly, BLE Central can trigger BSP_LED_2 by setting a proper characteristic (for example, by tapping te Find Me button on smartphone application). When not using BLE, nRF52840 SoC acts as a Thread CoAP Server controlling BSP_LED_3.

LED assignments:

Button assignments:

Setup

You can find the source code and the makefile in the following folder: <InstallFolder>\examples\multiprotocol\ble_thread\ble_thread_dyn_proximity

Testing

  1. Prepare two nRF52840 Preview Development Kits and an Android smartphone (you can also use an iOS smartphone).
  2. On the smartphone, install nRF Toolbox for BLE.
  3. Run the following commands to flash the simple_coap_client example to one of the boards and switch it on. LED 1 starts blinking (attaching to a Thread network) and, after a few seconds, it turns solid (attached to a Thread network or Thread network created):
    $ cd <InstallFolder>/examples/thread/simple_coap_client/hex
    $ nrfjprog -f nrf52 -r --program nrf52840_xxaa.hex --chiperase
  4. Build the example according to the instructions in Building examples.
  5. Flash SoftDevice and the example according to the instructions in Running examples and switch the board on. LED 1 starts blinking (BLE advertising).
  6. Connect to the board through UART. The application uses the following UART settings:
    • Baud rate: 115200
    • 8 data bits
    • 1 stop bit
    • No parity
    • HW flow control: None
    Refer to OpenThread CLI reference for complete reference of the OpenThread Command Line Interface.
  7. Run the state command to check the state of the device in the Thread network:
    > state
    leader
    Done
    Note
    If there are any other Thread devices using the same channel and PANID, the observed state can be router or child.
  8. Open nRF Toolbox and choose the Proximity application.
    nrftoolbox_dynamic_prox_1.png
    nRF Toolbox - Proximity application
  9. Tap ADD DEVICE and select the Thread_Prox device.
    nrftoolbox_dynamic_prox_2.png
    nRF Toolbox - Proximity application after establishing the connection
  10. Observe that BSP_LED_0 is solid, which indicates that a BLE connection is established.
  11. Trigger a sound alarm on the smartphone by pressing BSP_BUTTON_0.
  12. Use the Find Me button to toggle BSP_LED_2 on the nRF52840 Development Kit.
    Note
    This feature may not work correctly on nRF Toolbox running on the newest Android releases.
    You can control BSP_LED_3 on the multiprotocol node by pressing BSP_BUTTON_1 on the node with simple_coap_client firmware. No pairing is required for this procedure, because multicast messages are used by the client node.

You can now control the BSP_LED_3 on this server node by pressing BSP_BUTTON_0 on the client node.


Documentation feedback | Developer Zone | Subscribe | Updated