1. Health Thermometer Profile
Health Thermometer Profile (HTP) [1] is a Generic Attribute Profile (GATT) based low-energy profile defined by the Bluetooth® Special Interest Group[2]
Health Thermometer Profile is a combination of a Health Thermometer Collector and a Health Thermometer Sensor to connect and exchange data in different applications.
The Health Thermometer Sensor:
- Measures the temperature and exposes it via the Health Thermometer Service[3]
- Contains the Device Information Service to be identified by the remote device
- Is the GATT server.
The Health Thermometer Collector:
- Accesses the information exposed by the Health Thermometer Sensor and can for example display it to the end user or store it on nonvolatile memory for later analysis.
- Is the GATT client.
This wiki page is the description of the Health Thermometer Sensor project provided within the STM32CubeWBA MCU Package[4]
Bluetooth® LE Health Thermometer Profile & STM32WBA |
---|
The table below describes the structure of Health Thermometer Sensor services:
Bluetooth® LE Health Thermometer Service specification | ||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Health Thermometer is exported as a Service
- Temperature Measurement characteristic (TEMM):
- send a temperature measurement, and update flags related to these.
- Temperature Type characteristic (MNBS):
- is one of two methods that are used to describe the type of temperature measurement in relation to the location on the human body at which the temperature was measured.
- Intermediate Temperature characteristic (INT):
- send intermediate temperature values to a device for display purposes while the measurement is in progress.
- Measurement Interval characteristic (MEI):
- enables and controls the interval between consecutive temperature measurements.
Device Information (DIS) is exported as a Service
- Manufacturer Name String characteristic (MANS):
- name of the manufacturer of the device.
- Model Number String characteristic (MONS):
- model number assigned by the device vendor.
- System ID characteristic (SYID):
- structure containing an Organizationally Unique Identifier (OUI) followed by a manufacturer-defined identifier and is unique for each individual instance of the product.
Example of flow diagram between STM32WBA & ST BLE Toolbox |
---|
1.1. Advertising data
At start up, Health Thermometer application starts advertising with an interval of approximatively 80-100ms.
Data advertised are composed as follow:
HealthThermometer Advertising packet | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Manufacturer data are encoded following STMicroelectronics BlueST SDK v2 as described below:
STMicroelectronics Manufacturer Advertising data | |||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
2. Requirements
2.1. Software and system requirements
The software required are the following (minimum IDEs version):
- IAR Embedded Workbench for ARM (EWARM) toolchain V9.20.1, plus a patch available in Utilities/PC_Software/EWARMv8_STM32WBAx_V1.2.zip
- RealView Microcontroller Development Kit (MDK-ARM) toolchain V5.37, plus a patch available in Utilities/PC_Software/Keil.STM32WBAx_DFP.1.0.0.zip
- STM32CubeIDE toolchain V1.12.0 [5].
Programmer:
- STM32CubeProgrammer[6] : To flash the board with an already generated binary
2.2. Hardware requirements
NUCLEO-WBA5 [7] is necessary to install the application.
Hardware platform illustration |
---|
|
2.3. Collector applications compatible
The STM32CubeWBA Health Thermometer Sensor project is compatible with the following collector:
3. STM32WBA Health Thermometer Sensor example description
3.1. Project directory
The "BLE_HealthThermometer" application is available by downloading STM32CubeWBA MCU Package[8].
Refer to How to Build a BLE Project wiki page for project directory information.
3.2. Project description
3.2.1. Structure
Software project structure with the most important parts:
Health Thermometer project structure |
---|
WARNING: Do not modify the files in Middlewares folder |
3.2.2. Application initialization
The different steps of the application initialization are described below:
Health Thermometer project initialization |
---|
3.2.3. GAP and GATT initialization and interaction
and The Bluetooth LE Health Thermometer application initialization is done within app_ble.c
- Initialize the BLE stack - initialize the device as peripheral - configure and start advertising: ADV parameters, local name, UUID - APP_BLE_init()
- Call the services controller initialization SVCCTL_Init() - svc_ctl.c
- Manage the GAP event - SVCCTL_App_Notification()
- HCI_LE_CONNECTION_COMPLETE - provides information of the connection interval, slave latency, supervision timeout
- HCI_LE_CONNECTION_UPDATE_COMPLETE- provides the new information of the connection
- HCI_DISCONNECTION_COMPLETE - informs the application about the link disconnection and the reason
The Services management is done by the service controller, svc_ctl.c
- Initialize the number of registered handler - SVCCTL_Init()
- Manage events - SVCCTL_UserEvtRx()- from the BLE Host Stack and redirect them to the gap event handler - SVCCTL_App_Notification
The application level of the Health Thermometer is done with hts_app.c:
- Initialization of the services:
- Health Thermometer Service - HTS_Init() - hts.c
- Initialization of the context of the application
- Receive notification from the Health Thermometer Service - HTS_Notification()
- When temperature measurement characteristics are enabled by the remote, simulate every 1 s the temperature measure (HTS_APP_Measurement) and increase the energy expended to transfer to the remote device (collector) - HTS_UpdateValue()
The Health Thermometer Service hts.c manages the specification of the service:
- Service Init - HTS_Init()
- Register Health Thermometer Event Handle to Service Controller - SVCCTL_RegisterSvcHandler(HTS_EventHandler);
- Initialize Service UUID – add Health Thermometer service as Primary services
- Initialize Temperature measurement (TEMM) characteristic
- Initialize Temperature Type (MNBS) characteristic
- Initialize Intermediate Temperature (INT) characteristic
- Initialize Measurement Interval (MEI) characteristic
- Manage the GATT event from BLE Stack - HTS_EventHandler()
- ACI_GATT_WRITE_PERMIT_REQ_VSEVT_CODE
- Reception of a Write Command: Measurement Interval Characterictic Value
- Send an aci_gatt_write_response() with an OK or KO status.
- Reception of a Write Command: Measurement Interval Characterictic Value
- ACI_GATT_ATTRIBUTE_MODIFIED_VSEVT_CODE
- Reception of an attribute modification - Temperature Measurement Value : ENABLE or DISABLE Indication
- Notify application of the Measurement Notification - HTS_Notification(HTS_TEMM_INDICATE_ENABLED/DISABLED_EVT)
- Reception of an attribute modification - Intermediate Temperature Value : ENABLE or DISABLE Notification
- Notify application of the Measurement Notification - HTS_Notification(HTS_INT_NOTIFY_ENABLED/DISABLED_EVT)
- Reception of an attribute modification - Measurement Interval Value : ENABLE or DISABLE Indication
- Notify application of the Measurement Notification - HTS_Notification(HTS_MEI_INDICATE_ENABLED/DISABLED_EVT)
- Reception of an attribute modification - Temperature Measurement Value : ENABLE or DISABLE Indication
- ACI_GATT_WRITE_PERMIT_REQ_VSEVT_CODE
Health Thermometer Sensor software module interaction |
---|
3.3. Build and install
Follow the steps described in Bluetooth® LE Build and Install Application page, applying them for STM32WBA BLE_HealthThermometer project.
3.4. How to use
Once the BLE Health Thermometer application is installed on the STM32WBA platform, launch ST BLE ToolBox smartphone application.
Then, scan and connect the device called HT_XX (where XX is replaced by the last byte of the BD address) to the application.
Once the Bluetooth® LE connection is established and the notification enabled by the smartphone (by clicking on Health Thermometer icon):
- Intermediate temperature notification is provided to remote every 1 s.
- Temperature measurement indication is provided to remote every 10 s.
3.5. UART debug trace
Thanks to the debug log via UART interface LINK TO UPDATE?, it is possible to trace the application project.
To enable the traces within the project, enable them within app_conf.h as described below:
/**
* Enable or Disable traces in application
*/
#define CFG_DEBUG_APP_TRACE (1)
Health Thermometer - Initialization phase | Connected Phase |
---|---|
==>> Start Ble_Hci_Gap_Gatt_Init function
Success: hci_reset command
Success: aci_hal_write_config_data command - CONFIG_DATA_PUBADDR_OFFSET
Public Bluetooth Address: 00:80:e1:2a:7c:ea
Success: aci_hal_write_config_data command - CONFIG_DATA_IR_OFFSET
Success: aci_hal_write_config_data command - CONFIG_DATA_ER_OFFSET
Success: aci_hal_set_tx_power_level command
Success: aci_gatt_init command
Success: aci_gap_init command
Success: aci_gatt_update_char_value - Device Name
Success: aci_gatt_update_char_value - Appearance
Success: hci_le_set_default_phy command
Success: aci_gap_set_io_capability command
Success: aci_gap_set_authentication_requirement command
Success: aci_gap_configure_whitelist command
==>> End Ble_Hci_Gap_Gatt_Init function
Services and Characteristics creation
Success: aci_gatt_add_service command: DIS
Success: aci_gatt_add_char command : MANS
Success: aci_gatt_add_char command : MONS
Success: aci_gatt_add_char command : SYID
Success: aci_gatt_update_char_value MANS command
Success: aci_gatt_update_char_value MONS command
Success: aci_gatt_add_service command: HTS
Success: aci_gatt_add_char command : TEMM
Success: aci_gatt_add_char command : MNBS
Success: aci_gatt_add_char command : INT
Success: aci_gatt_add_char command : MEI
Success: aci_gatt_update_char_value MEI command
End of Services and Characteristics creation
==>> aci_gap_set_discoverable - Success
==>> Success: Start Advertising
|
>>== HCI_LE_CONNECTION_COMPLETE_SUBEVT_CODE - Connection handle: 0x0001
- Connection established with @:5f:6e:a2:95:0d:a5
- Connection Interval: 48.75 ms
- Connection latency: 0
- Supervision Timeout: 5000 ms
>>== HCI_LE_CONNECTION_UPDATE_COMPLETE_SUBEVT_CODE
- Connection Interval: 7.50 ms
- Connection latency: 0
- Supervision Timeout: 5000 ms
>>== HCI_LE_CONNECTION_UPDATE_COMPLETE_SUBEVT_CODE
- Connection Interval: 48.75 ms
- Connection latency: 0
- Supervision Timeout: 5000 ms
ACI_GATT_ATTRIBUTE_MODIFIED_VSEVT_CODE HTS_TEMM_INDICATE_ENABLED_EVT
ACI_GATT_ATTRIBUTE_MODIFIED_VSEVT_CODE HTS_INT_NOTIFY_ENABLED_EVT
HTS_INT_NOTIFY_ENABLED_EVT
ACI_GATT_ATTRIBUTE_MODIFIED_VSEVT_CODE HTS_MEI_INDICATE_ENABLED_EVT
HTS_MEI_INDICATE_ENABLED_EVT
|
4. References