STM32WB Bluetooth® LE – Heart Rate Sensor Project

Revision as of 19:54, 28 January 2022 by Registered User (→‎GAP & GATT Initialization & Interaction)

1. Heart Rate Profile Presentation

Heart Rate Profile (HRP) [1] is a Generic Attribute Profile (GATT) based low energy profile defined by the Bluetooth® Special Interest Group[2]
The HRP, widely used in fitness applications, defines the communication between a GATT-server of a Heart Rate Sensor device, such as a wrist band, and a GATT-client Collector device, such as a smartphone or tablet.
Heart Rate Sensor is the device that measures heart rate data and other information, it can be defined as a GAP peripheral and GATT server implemented with the Heart Rate Service [3]

This wiki page is the description of the Heart Rate Sensor project provided within the STM32CubeWB MCU Package[4]

Bluetooth® LE Heart Rate profile overview
Connectivity Heart-Rate-Profile-Overview.png


The table below describes the structure of Heart Rate Sensor services :

Heart Rate Sensor services


2. Heart Rate Profile Interaction

Heart Rate Profile is a combination of a Heart Rate Collector and a Heart Rate Sensor to connect and exchange data in differents applications.

  • The Heart Rate Sensor:
    • Measures the heart rate and exposes it via the Heart Rate Service.
    • Contains the Device Information Service, which contains information for example about the manufacturer of the device.
    • Is the GATT server.
  • The Heart Rate Collector:
    • Accesses the information exposed by the Heart Rate Sensor and can for example display it to the end user or store it on non-volatile memory for later analysis.
    • Is the GATT client.

The GAP - Generic Access Profile defines and manages advertising and connection.

Collector Central device and Sensor Peripheral device
Connectivity HR GAP Interaction.png


The GATT - Generic Attribute Profile defines and manages in/out data exchanges.

Collector GATT Client device and Sensor GATT Service device
Connectivity HR GATT Interaction.png



Once Bluetooth® LE connection established & notification enabled :

  • Heart Rate measurement provided to remote every 1s.
  • Connection interval may be change by application.

3. Requirements

3.1. Software and System requirements

Software required are the following (minimum IDEs version) :

  • IAR Embedded Workbench for ARM (EWARM) toolchain V8.20.2
  • RealView Microcontroller Development Kit (MDK-ARM) toolchain V5.31
  • STM32CubeIDE toolchain V1.7.0 [5].


Programmer:

  • STM32CubeProgrammer[6] : To flash the board with an already generated binary

3.2. Hardware requirements

P-NUCLEO-WB55 [7] or STM32WB5MM-DK Discovery Kit [8] is necessary to install the application.

Hardware platforms illustration
Connectivity hardware-presentation.png


3.3. Smartphone Application

ST BLE Sensor application (for Android[9], or iOS[10]) or ST BLE ToolBox application (for Android[11], or IOS[12]).

4. STM32WB Heart Rate Sensor Example Description

4.1. Project Directory

The "BLE_HeartRate" application is available by downloading STM32CubeWB MCU Package[13].

Heart Rate project directory
Connectivity heartRate.png

4.2. Project Description

4.2.1. Structure

Software project structure with the most important parts :

Connectivity HR project structure.png


Connectivity yellow box.png
Main applicative part files
Connectivity blue box.png
Bluetooth® LE Stack API Interface
Connectivity dark blue box.png
Services management
Connectivity green box.png
System commands
Connectivity pink box.png
Transport Layer Interface

WARNING: Do not modify the files in Middlewares folder

4.2.2. Application Initialization

The different steps of application initialization are described bellow :

Connectivity HR Application Initialization.png
puce1.png
  • Initialize the system (HAL, Clock, Power Mode, RTC IP, Timer Server)
  • Infinite loop for run mode
puce2.png
  • Initialize the BSP (LEDs, buttons…), Transport Layer Interface, Debugger
  • Wait for initialization done
puce3.png
  • Initialize the Bluetooth® LE App – GAP level
  • Manage GAP events (advertising,scanning)
puce4.png
  • Initialize the Bluetooth® LE App – GATT level
  • Initialize the Bluetooth® LE Stack
  • Manage GATT events
puce5.png
  • Initialize services
  • Manage services

4.2.3. GAP & GATT Initialization & Interaction

puce3.png

The GAP level of Heart Rate Sensor is managed by the file app_ble.c - APP_BLE_init()

  • initialization of the device as Peripheral - Configure & Start Advertising : ADV Parameters, Local Name, UUID
  • call the services controller initialization SVCCTL_Init() - svc_ctl.c
  • management of the GAP event:
    • EVT_LE_CONN_COMPLETE - Provides information of the connection interval, slave latency, Supervision timeout
    • EVT_LE_CONN_UPDATE_COMPLETE - Provides the new information of the connection
    • EVT_DISCONN_COMPLETE - Informs the application about the link disconnection and the reason
    • EVT_ENCRYPT_CHANGE - Informs the application weather the link is encrypted
puce4.png

The Services management is done by the service controller - svc_ctl.c

  • Calls the Initialization function of all the developed services
    • Heart Rate service - HRS_Init() hrs.c
    • Device Information service - DIS_Init() dis.c
  • Registers Services Event Handler
    • SVCCTL_RegisterSvcHandler() - function receiving the GATT events from the BLE Host Stack and redirect them to the services registered - Heart Rate Event Handle (hrs.c)
puce5.png

The Heart Rate Service hrs.c manages the specification of the service:

  • Service Init - HRS_Init()
    • Register Heart Rate Event Handle to Service Controller
    • Initialize Service UUID
      • aci_gatt_add_serv – add Heart Rate service as Primary services
    • Initialize Heart rate Measurement Characteristic
      • aci_gatt_add_char – add Heart Rate Characteristic
    • Initialize Body Sensor Location Characteristic
      • aci_gatt_add_char – add Body Sensor Location Characteristic
  • Update Heart Rate Measurement Characteristic
    • aci_gatt_update_char_value – update the wished characteristics with a value aligned with the specification
  • Update Body Sensor Location Characteristic Value
    • aci_gatt_update_char_value - update the wished characteristics with a value aligned with the specification
  • HeartRate_Event_Handler(void *Event) – manage HCI Vendor Type Event:
    • EVT_BLUE_GATT_WRITE_PERMIT_REQ
      • Server receives a Write Command
      • HR Control Point Char. Value
      • Reset Energy Expended command then:
        • Send an aci_gatt_write_response() with an OK status.
        • Notify HRS application to Reset Energy Expended
        • Or Send an aci_gatt_write_response() with an Error.
    • EVT_BLUE_GATT_ATTRIBUTE_MODIFIED
      • HR Measurement Char. Description Value
        • ENABLE Or DISABLE Notification
      • Notify HRS application of the Measurement Notification
Heart Rate sensor software module interaction
Connectivity HeartRate-Project.png


4.3. Build and Install

Follow steps described in Bluetooth® LE Build and Install Application page, applying it for BLE_HeartRate project.

5. Heart Rate Collector - Smartphone Application

Once the BLE Heart Rate application installed on the STM32WB platform, launch the ST BLE Sensor smartphone application.

Click on Connect one Device interface:

Heart Rate application interface 1
Connectivity Heart-Rate-screen-cap-1.jpg


Your device should be visible from this interface, connect to it:

Heart Rate application interface 2
Connectivity Heart-Rate-application-2.jpg


Now bpm measurement is displayed in real time.

Heart Rate application interface 3
Connectivity Heart-Rate-App-3.jpg


With Discovery Kit Platform, the Heart Rate is also visible from the board LCD screen, and Heart pulse is illustrated:

Heart Rate on DK illustration
Connectivity heart-rate-DK.png

6. References