Welcome to the Pycom forum Forum
    • \[\[global:header.categories\]\]
    • \[\[global:header.recent\]\]
    • \[\[global:header.tags\]\]
    • \[\[global:header.popular\]\]
    • Login

    Explore Pybytes | Official Documentation | Report a Firmware Bug/Issue | GitHub

    Reading from a Polar H7 Bluetooth Heartrate sensor

    Scheduled Pinned Locked Moved LoPy
    3 Posts 2 Posters 1.6k Views 2 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • A Offline
      arneme
      last edited by arneme

      I have tried to connect to and read the pulse data from a Polar H7 sensor but is not managing to get it to work. Any ideas?
      The error I get is:
      Got services...
      Reading from service 180d
      Print chars found
      char 2a37
      Reading pulse data every second...
      Exception caught...
      the requested operation failed

      Here is the code:

      from network import Bluetooth
      import time
      bt = Bluetooth()
      bt.start_scan(-1)
      
      # Code to connect to Polar H7 Bluetooth heartrate sensor
      # The detected Heartrate is "published" over the LoRaWAN network
      
      while True:
          adv = bt.get_adv()
          if adv:
              name = bt.resolve_adv_data(adv.data, Bluetooth.ADV_NAME_CMPL)
              if name is not None:
                  if name.startswith("Polar H7"):
                      print ("Found: " + name)
                      bt.stop_scan()
                      try:
                          conn = bt.connect(adv.mac)
                          print("Connected...")
                          services = conn.services()
                          print("Got services...")
                          for service in services:
                              time.sleep(0.05)
                              # According to specification from Polar, service.uuid = 0x180D is Heart Rate and char.uuid = 2a37 is value in beats per minutes
                              if service.uuid() == 0x180D:
                                  print('Reading from service %x' % service.uuid())
                                  chars = service.characteristics()
                                  print("Print chars found")
                                  for char in chars:
                                      print('char %x' % char.uuid())
                                      # Charactersistic 2a37 is a notification char and we need to enable notification to receive the ValueError
                                      if char.uuid() == 0x2a37:
                                          # Notify sensor that we want to receive pulse data.
                                          byte = bytes([1])
                                          char.write(byte)
                                          while True:
                                              print("Reading pulse data every second...")
                                              print('char {} value = {}'.format(char.uuid(), char.read()))
                      except Exception as ex:
                          print("Exception caught...")
                          print(ex)
      J 1 Reply Last reply Reply Quote 0
      • J Offline
        jmarcelino @arneme
        last edited by jmarcelino

        @arneme
        The Heart Rate Measurement profile requires BLE notifications, it doesn't work with simple reads.

        However there isn't yet a system to receive BLE notifications on the LoPy so unfortunately you'll have to wait a bit more.

        EDIT: Was catching up on the other threads and apparently this functionality could come next week. I also have a Polar H7 and can look into it at some point.

        1 Reply Last reply Reply Quote 1
        • A Offline
          arneme
          last edited by

          I was afraid that the notification part was missing in the firmware but great if it appears soon :-). Thanks for the speedy reply.

          1 Reply Last reply Reply Quote 0

          Hello! It looks like you're interested in this conversation, but you don't have an account yet.

          Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

          With your input, this post could be even better 💗

          Register Login
          • 1 / 1
          • First post
            Last post

          Pycom on Twitter

          Pycom