This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Heart Rate collector example - how is it suppose to work?

Hi, 

i'm running the Heart Rate collector example and have a question. What is the expected behaviour? From the description on the infocenter I read that it should print out the HR reading from the connected HRM. And while it does so the first time I run it on a fresh dongle, it doesn't do it the next time or any other time for that matter. I cannot figure out the difference and don't know what is going on. The following runs only print out the following info on the log:

00> <info> app_timer: RTC: initialized.
00> 
00> <info> app: Heart Rate collector example started.
00> 
00> <info> app: Starting scan.
00> 
00> <info> peer_manager_handler: Peer data updated in flash: peer_id: 0, data_id: Peer rank, action: Update, no change
00> 
00> <info> app: Connected.
00> 
00> <info> app: GATT ATT MTU on connection 0x0 changed to 23.
00> 
00> <info> peer_manager_handler: Connection secured: role: Central, conn_handle: 0, procedure: Encryption
00> 
00> <info> peer_manager_handler: Peer data updated in flash: peer_id: 0, data_id: Peer rank, action: Update, no change
00> 
00> <info> app: Data length for connection 0x0 updated to 27.
00> 
00> <info> peer_manager_handler: Connection secured: role: Central, conn_handle: 0, procedure: Encryption
00> 
00> <info> peer_manager_handler: Peer data updated in flash: peer_id: 0, data_id: Peer rank, action: Update, no change
00> 
00> <info> app: Battery Level Read as 85 %.

PS: I use the NRF52 dongle together with a j-link debugger and I'm displyaing the logs via RTT. I use the example from the SDK 17.0.2, with SD 340.

  • Ok. There is something wierd happening with this HRM for sure. I found an old one of mine, broken a bit, but still good for testing (not good for using though). Our example here works with it - I can get notifications. So it must be the HRM that is faulty. There is no official Garmin way to reset it (erase bonds). I tried putting the battery upside down to short the battery terminals but it didn't help. The worst is - I cannot tell Garmin it doesn't work, because it does - everywhere except NRF Connect BLE and my application.

    Is there a way to remove bonds on it? Doesn BLE support this kind of operation?

    PS: anyway, thank you very much for your help.

  • Hi Lukasz, 

    I'm sorry that we couldn't help regarding a 3rd party software. The software on the Garmin HRM is something outside of what we can cover or discuss. 

    I would suggest to check on Garmin support channel. You can test by using a phone or other devices and try to connect and enable CCCD to see if the HRS is reported. If it works with a new device, I don't see any reason it wouldn't work with our DK (you can change the MAC address of the DK so it appear as a new device to the Garmin HRM).

  • Can I change the MAC of the NRF52 Dongle as well? How?

  • If you use nRF Connect on PC with the default serial firmware on the dongle , it's not possible to change the address. You can recompile the serial firmware and change the address using sd_ble_gap_addr_set() call. 

    Similarly, you can change the address if you flash the central firmware on the dongle using the same command. 

  • Hello Again after a while. I was digging more into this topic, sisnce also other HRM's did't work - only one HRM Dual from Garmin. The other HRM dual did not work and also some HRM's from Polar also did't work H7/H9/H10. 

    At the end of our investigation previously we concluded that the one HRM dual that didn't work had be faulty. But this turns out to be false. They all differ. For one the Heart Rate Measurement CCCD value handle is 0x0028 (and this one worked), and for the other it was 0x10 or 0x11. If I change it manually in the code, the programs works for this particular HRM (and stops working for the Garmin HRM for which it worked). I also noticed that the UUID is always 2a37.

    The question is - can I somehow tell the request to use the UUID, not the handle? 

    Or maybe I should somehow read the value of the handle first? How?

    Thanks

Related