Skip to main content

Tools for reading and fusing live data streams from Polar OH1 (PPG) and H10 (ECG) sensors.

Project description

polarpy

Tools for reading and fusing live data streams from Polar OH1 (PPG) and H10 (ECG) sensors.

Requirements

If installing from the repo you need pygatttool (pip install pygatttool).

Installation

pip install polarpy

Usage

The following code starts the raw PPG and IMU streams on a Polar OH1, fuses the blocks pf data in the two streams at 135Hz, and provides a single output stream, each record having a timestamp, the PPG signal values for each of the 3 pairs of LEDs, and the corresponding accerelometer x, y and z readings.

from polarpy import OH1

OH1_ADDR = "A0:9E:1A:7D:3C:5D"
OH1_CONTROL_ATTRIBUTE_HANDLE = 0x003f
OH1_DATA_ATTRIBUTE_HANDLE = 0x0042

def callback(type: str, timestamp: float, payload: dict):
    print(f'{timestamp} {payload}')

if '__main__' == __name__:
    device = OH1(address=OH1_ADDR,
                 control_handle=OH1_CONTROL_ATTRIBUTE_HANDLE,
                 data_handle=OH1_DATA_ATTRIBUTE_HANDLE,
                 callback=callback)

    if device.start():
        while device.run():
            pass

The output looks something like this:

3.94 {'ppg0': 263249, 'ppg1': 351764, 'ppg2': 351928, 'ax': 0.775, 'ay': -0.42, 'az': 0.476}
3.947 {'ppg0': 263297, 'ppg1': 351964, 'ppg2': 352077, 'ax': 0.775, 'ay': -0.42, 'az': 0.476}
3.954 {'ppg0': 263319, 'ppg1': 352062, 'ppg2': 352013, 'ax': 0.778, 'ay': -0.417, 'az': 0.481}
3.962 {'ppg0': 263293, 'ppg1': 352106, 'ppg2': 352082, 'ax': 0.778, 'ay': -0.417, 'az': 0.481}
3.969 {'ppg0': 263440, 'ppg1': 352273, 'ppg2': 352199, 'ax': 0.778, 'ay': -0.417, 'az': 0.481}

...

The callback is used (rather than returning data from run()) because the blocks of PPG, ECG and IMU data arrive with different lengths and at different speeds. The individual samples from each channel must be buffered and interleaved, timestamps interpolated, then delivered asynchronously through the callback.

The address and attribute handles for your particular device can be found using gatttool or another BLE tool such as nRF Connect.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

polarpy-0.1.1.tar.gz (7.6 kB view details)

Uploaded Source

Built Distribution

polarpy-0.1.1-py3-none-any.whl (10.1 kB view details)

Uploaded Python 3

File details

Details for the file polarpy-0.1.1.tar.gz.

File metadata

  • Download URL: polarpy-0.1.1.tar.gz
  • Upload date:
  • Size: 7.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.4.0 CPython/3.8.10 Linux/5.4.0-144-generic

File hashes

Hashes for polarpy-0.1.1.tar.gz
Algorithm Hash digest
SHA256 78d3112db23fee95d965931815b4f2d6bcc3359d400a50b78e00249504efc15a
MD5 e83c8bcfb0d412cce45f7daf23d90a0d
BLAKE2b-256 da18c0a144e12f591ff08f905d2e5a41c52499af892b9c57d21f0da9476b0d6b

See more details on using hashes here.

File details

Details for the file polarpy-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: polarpy-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 10.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.4.0 CPython/3.8.10 Linux/5.4.0-144-generic

File hashes

Hashes for polarpy-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e436dfc5edb2305c9fe48c0bdbf7d83e94146b1cd9d4f2a024817f9f2d59cfae
MD5 d6ef4bfaedd1a87ed6b48210627f6e65
BLAKE2b-256 cf0fed67a8d1ad16449903d528cb52677c8c10305728163915c6f00134635560

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page