Bluetooth: Central and Peripheral HRS
The Central and Peripheral HRS sample demonstrates how to use Bluetooth® with Central and Peripheral roles concurrently. It also demonstrates how to use the GATT Heart Rate Service (HRS) Client library. It uses the HRS Client to retrieve heart rate measurement data from a remote device that provides a Heart Rate service. It relays this data to another remote device that provides a Heart Rate Service client implementation.
Requirements
The sample supports the following development kits:
Hardware platforms |
PCA |
Board name |
Build target |
---|---|---|---|
PCA10095 |
|
||
PCA10040 |
|
||
PCA10056 |
|
When built for an _ns
build target, the sample is configured to compile and run as a non-secure application.
Therefore, it automatically includes Trusted Firmware-M that prepares the required peripherals and secure services to be available for the application.
To test just the Bluetooth® LE Central Role operation, you need one of the following setups:
A smartphone or a tablet running a compatible application.
Another development kit running the Bluetooth: Peripheral HR sample. See the documentation for that sample for detailed instructions.
To test the Relay mode operation, you need one of the following setups:
A smartphone or a tablet running a compatible application.
Two additional development kits running Bluetooth: Central / Heart-rate Monitor and Bluetooth: Peripheral HR samples.
You can also mix devices when testing this sample. For a simple echo test, you only need one additional device. Alternatively, you can use a smartphone providing the HRS functionality and a development kit running the Bluetooth: Central / Heart-rate Monitor sample.
Overview
The sample demonstrates the following Bluetooth® LE roles:
Central role - Scans for a remote device providing Heart Rate Service.
Peripheral role - Advertises and exposes a Heart Rate Service.
When a device is connected as central, the sample starts the service discovery procedure to search for the Heart Rate Service. If this succeeds, the sample reads the Body Sensor Location characteristic and subscribes to the Heart Rate Measurement characteristic to receive notifications. When connected also as peripheral to the device acting as a Heart Rate Service client, the sample starts working as relay. It collects data from a remote device with Heart Rate Service that is sending notifications and sends this data to another remote device providing a Heart Rate Service client.
User interface
- LED 1:
Blinks when the main loop is running (that is, the device is advertising) with a period of two seconds, duty cycle 50%.
- LED 2:
On when the development kit is connected as central.
- LED 3:
On when the development kit is connected as peripheral.
Building and running
This sample can be found under samples/bluetooth/central_and_peripheral_hr
in the nRF Connect SDK folder structure.
When built as a non-secure firmware image for the _ns
build target, the sample automatically includes the Trusted Firmware-M (TF-M).
To build the sample with Visual Studio Code, follow the steps listed on the Building nRF Connect SDK application quick guide page in the nRF Connect for VS Code extension documentation. See Building and programming an application for other building and programming scenarios and Testing and debugging an application for general information about testing and debugging in the nRF Connect SDK.
Testing
After programming the sample to your development kit, test it either by connecting to other development kits that are running the Bluetooth: Peripheral HR sample, or by using the nRF Connect for Desktop Bluetooth Low Energy application that emulates an HRS server.
Testing with other development kits
Connect to the kit that runs this sample with a terminal emulator (for example, PuTTY). See How to connect with PuTTY for the required settings.
Program the other development kit with the Bluetooth: Peripheral HR sample and reset it.
Wait until the HRS is detected by the central. Observe that LED 2 is on.
In the terminal window, check for information similar to the following:
Heart Rate Sensor body location: Chest Heart Rate Measurement notification received: Heart Rate Measurement Value Format: 8 - bit Sensor Contact detected: 1 Sensor Contact supported: 1 Energy Expended present: 0 RR-Intervals present: 0 Heart Rate Measurement Value: 134 bpm
Notifications will be displayed periodically with a frequency determined by the HR server.
Program another development kit with the Bluetooth: Central / Heart-rate Monitor sample and reset it.
Wait until central is connected to your development kit. Observe that LED 3 is lit.
In terminal windows connected to device with the Bluetooth: Central / Heart-rate Monitor sample, check for information similar to following:
[NOTIFICATION] data 0x20006779 length 2
The sample works as relay now.
Testing with nRF Connect for Desktop
Connect to the kit that runs this sample with a terminal emulator (for example, PuTTY). See How to connect with PuTTY for the required settings.
Reset the development kit.
Start nRF Connect for Desktop.
Open the Bluetooth Low Energy app and select the connected dongle that is used for communication.
Open the SERVER SETUP tab.
Click the dongle configuration and select Load setup.
Load the
hr_service.ncs
file that is located undersamples/bluetooth/central_and_peripheral_hr
in the nRF Connect SDK folder structure.Click Apply to device.
Open the CONNECTION MAP tab.
Click the dongle configuration (gear icon) and select Advertising setup.
The current version of nRF Connect can store the advertising setup.
Click Load setup. Load the
hrs_adv_setup.ncs
file that is located undersamples/bluetooth/central_and_peripheral_hr
in the nRF Connect SDK folder structure.Click Apply and Close.
Click the gear icon to open the Adapter settings and select Start advertising.
Wait until the development kit running the Central and Peripheral HRS connects. Observe that LED 2 is lit.
Explore the Heart Rate Measurement characteristic.
Write value
06 80
and click the Play button to send a notification. In the terminal window, check for information similar to the following:Heart Rate Sensor body location: Chest Heart Rate Measurement notification received: Heart Rate Measurement Value Format: 8 - bit Sensor Contact detected: 1 Sensor Contact supported: 1 Energy Expended present: 0 RR-Intervals present: 0 Heart Rate Measurement Value: 128 bpm
The nRF Connect for Desktop also detects the Central and Peripheral HRS sample Heart Rate Service.
Enable the notification for the Heart Rate Measurement characteristic.
Write again value
06 80
and click the Play button to send a notification. The same value appears for the Heart Rate Measurement characteristic. The sample works as relay for the Heart Rate Service.
Dependencies
This sample uses the following nRF Connect SDK libraries:
In addition, it uses the following Zephyr libraries:
include/zephyr.h
-
include/bluetooth/bluetooth.h
include/bluetooth/gatt.h
include/bluetooth/conn.h
include/bluetooth/uuid.h
include/bluetooth/services/hrs.h
include/bluetooth/services/bas.h
The sample also uses the following secure firmware component: