2020-04-09 04:40:57 -04:00
| Supported Targets | ESP32 |
| ----------------- | ----- |
2021-10-21 13:28:36 -04:00
# BLE Heart Rate Measurement Example
2019-06-24 21:03:58 -04:00
(See the README.md file in the upper level 'examples' directory for more information about examples.)
This example creates GATT server demonstrating standard Heart Rate measurement service. It simulates Hear rate measurement and notifies to client when the notifications are enabled.
It uses ESP32's Bluetooth controller and NimBLE stack based BLE host
This example aims at understanding notification subscriptions and sending notifications.
To test this demo, any BLE scanner app can be used.
2019-07-04 20:14:04 -04:00
A Python based utility `blehr_test.py` is also provided (which will run as a BLE GATT Client) and can be used to test this example.
Note :
2022-07-29 02:42:54 -04:00
* To install the dependency packages needed, please refer to the top level [README file ](../../../README.md#running-test-python-script-ttfw ).
2019-07-04 20:14:04 -04:00
* Currently this Python utility is only supported on Linux (BLE communication is via BLuez + DBus).
2021-10-21 13:28:36 -04:00
## How to Use Example
2019-06-24 21:03:58 -04:00
2021-10-21 13:28:36 -04:00
Before project configuration and build, be sure to set the correct chip target using:
2019-06-24 21:03:58 -04:00
2021-10-21 13:28:36 -04:00
```bash
idf.py set-target < chip_name >
2019-06-24 21:03:58 -04:00
```
2021-10-21 13:28:36 -04:00
### Hardware Required
2019-06-24 21:03:58 -04:00
2021-10-21 13:28:36 -04:00
* A development board with ESP32/ESP32-C3 SoC (e.g., ESP32-DevKitC, ESP-WROVER-KIT, etc.)
* A USB cable for Power supply and programming
2019-06-24 21:03:58 -04:00
2021-10-21 13:28:36 -04:00
See [Development Boards ](https://www.espressif.com/en/products/devkits ) for more information about it.
### Build and Flash
Run `idf.py -p PORT flash monitor` to build, flash and monitor the project.
2019-06-24 21:03:58 -04:00
(To exit the serial monitor, type ``Ctrl-]``.)
2021-10-21 13:28:36 -04:00
See the [Getting Started Guide ](https://idf.espressif.com/ ) for full steps to configure and use ESP-IDF to build projects.
2019-06-24 21:03:58 -04:00
## Example Output
This console output can be observed when blehr is connected to client and client enables notifications:
```
I (91) BTDM_INIT: BT controller compile version [fe7ced0]
I (91) system_api: Base MAC address is not set, read default base MAC address from BLK0 of EFUSE
I (181) phy: phy_version: 4100, 6fa5e27, Jan 25 2019, 17:02:06, 0, 0
I (421) NimBLE_BLE_HeartRate: BLE Host Task Started
GAP procedure initiated: stop advertising.
Device Address: xx:xx:xx:xx:xx:xx
GAP procedure initiated: advertise; disc_mode=2 adv_channel_map=0 own_addr_type=0 adv_filter_policy=0 adv_itvl_min=0 adv_itvl_max=0
connection established; status=0
subscribe event; cur_notify=1
value handle; val_handle=3
I (21611) BLE_GAP_SUBSCRIBE_EVENT: conn_handle from subscribe=0
GATT procedure initiated: notify; att_handle=3
GATT procedure initiated: notify; att_handle=3
GATT procedure initiated: notify; att_handle=3
GATT procedure initiated: notify; att_handle=3
GATT procedure initiated: notify; att_handle=3
GATT procedure initiated: notify; att_handle=3
GATT procedure initiated: notify; att_handle=3
```
2019-07-04 20:14:04 -04:00
## Running Python Utility
```
python blehr_test.py
```
## Python Utility Output
This is this output seen on the python side on successful connection:
```
discovering adapter...
bluetooth adapter discovered
powering on adapter...
bluetooth adapter powered on
Started Discovery
Connecting to device...
Connected to device
Services
[dbus.String(u'00001801-0000-1000-8000-00805f9b34fb', variant_level=1), dbus.String(u'0000180d-0000-1000-8000-00805f9b34fb', variant_level=1), dbus.String(u'0000180a-0000-1000-8000-00805f9b34fb', variant_level=1)]
Subscribe to notifications: On
dbus.Array([dbus.Byte(6), dbus.Byte(90)], signature=dbus.Signature('y'), variant_level=1)
dbus.Array([dbus.Byte(6), dbus.Byte(91)], signature=dbus.Signature('y'), variant_level=1)
dbus.Array([dbus.Byte(6), dbus.Byte(92)], signature=dbus.Signature('y'), variant_level=1)
dbus.Array([dbus.Byte(6), dbus.Byte(93)], signature=dbus.Signature('y'), variant_level=1)
dbus.Array([dbus.Byte(6), dbus.Byte(94)], signature=dbus.Signature('y'), variant_level=1)
dbus.Array([dbus.Byte(6), dbus.Byte(95)], signature=dbus.Signature('y'), variant_level=1)
dbus.Array([dbus.Byte(6), dbus.Byte(96)], signature=dbus.Signature('y'), variant_level=1)
dbus.Array([dbus.Byte(6), dbus.Byte(97)], signature=dbus.Signature('y'), variant_level=1)
dbus.Array([dbus.Byte(6), dbus.Byte(98)], signature=dbus.Signature('y'), variant_level=1)
dbus.Array([dbus.Byte(6), dbus.Byte(99)], signature=dbus.Signature('y'), variant_level=1)
Subscribe to notifications: Off
Success: blehr example test passed
exiting from test...
disconnecting device...
device disconnected
powering off adapter...
bluetooth adapter powered off
```
2021-10-21 13:28:36 -04:00
## Troubleshooting
For any technical queries, please open an [issue ](https://github.com/espressif/esp-idf/issues ) on GitHub. We will get back to you soon.