Skip to main content

Python bindings for the Thalmic Labs Myo SDK.

Project description

Announcements

[Oct 15, 2018] Thalmic Labs have announced the discontinuation of the Myo armband. Software that used to be accessible on the Thalmic downloads page can be found on the GitHub releases page.

[Jun 28, 2018] Myo-Python 1.0 has been released. It comes with a number of API changes. If you have been following an older tutorial, you might have the new version installed but use code that worked with the old version.
Check the Migrating from v0.2.x section below.


Python bindings for the Myo SDK

Myo-Python is a CFFI wrapper for the Thalmic Myo SDK. Minimum required Python version is 3.5.

Table of Contents

Documentation

The documentation can currently be found in the docs/ directory in the GitHub Repository.

Example

Myo-Python mirrors the usage of the Myo C++ SDK in many ways as it also requires you to implement a DeviceListener that will then be invoked for any events received from a Myo device.

import myo

class Listener(myo.DeviceListener):
  def on_paired(self, event):
    print("Hello, {}!".format(event.device_name))
    event.device.vibrate(myo.VibrationType.short)
  def on_unpaired(self, event):
    return False  # Stop the hub
  def on_orientation(self, event):
    orientation = event.orientation
    acceleration = event.acceleration
    gyroscope = event.gyroscope
    # ... do something with that

if __name__ == '__main__':
  myo.init(sdk_path='./myo-sdk-win-0.9.0/')
  hub = myo.Hub()
  listener = Listener()
  while hub.run(listener.on_event, 500):
    pass

As an alternative to implementing a custom device listener, you can instead use the myo.ApiDeviceListener class which allows you to read the most recent state of one or multiple Myo devices.

import myo
import time

def main():
  myo.init(sdk_path='./myo-sdk-win-0.9.0/')
  hub = myo.Hub()
  listener = myo.ApiDeviceListener()
  with hub.run_in_background(listener.on_event):
    print("Waiting for a Myo to connect ...")
    device = listener.wait_for_single_device(2)
    if not device:
      print("No Myo connected after 2 seconds.")
      return
    print("Hello, Myo! Requesting RSSI ...")
    device.request_rssi()
    while hub.running and device.connected and not device.rssi:
      print("Waiting for RRSI...")
      time.sleep(0.001)
    print("RSSI:", device.rssi)
    print("Goodbye, Myo!")

Migrating from v0.2.x

The v0.2.x series of the Myo-Python library used ctypes and has a little bit different API. The most important changes are:

  • The Hub object no longer needs to be shut down explicitly
  • The DeviceListener method names changed to match the exact event name as specified by the Myo SDK (eg. from on_pair() to on_paired())
  • Hub.run(): The order of arguments is reversed (handler, duration_ms instead of duration_ms, handler)
  • myo.init(): Provides a few more parameters to control the way libmyo is detected.
  • myo.Feed: Renamed to myo.ApiDeviceListener

Projects using Myo-Python

Changes

v1.0.4 (2019-04-29)

  • Remove myo.quaternion, it was a leftover and the Quaternion class was actually in myo.types.math
  • move myo.types.math and myo.types.macaddr to myo package instead
  • myo.types package is now a stub for backwards compatibility
  • Depend on enum34 package instead of nr.types.enum which has been removed in nr.types>=2.0.0
  • Update the error message of a ValueError raised in myo.init()

v1.0.3 (2018-06-28)

  • Event.mac_address now returns None if the event's type is EventType.emg (#62)
  • Hub.run() now accepts DeviceListener objects for its handler parameter. This carries over to Hub.run_forever() and Hub.run_in_background().
  • Replace requirement nr>=2.0.10,<3 in favor of nr.types>=1.0.3

v1.0.2 (2018-06-09)

  • Fix Event.warmup_result (PR #58 @fribeiro1)

v1.0.1 (2018-06-09)

  • Fix Event.rotation_on_arm (#59)

v1.0.0 (2018-06-03)

  • Rewrite using CFFI

This project is licensed under the MIT License.
Copyright © 2015-2018 Niklas Rosenstein

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

myo-python-1.0.5.tar.gz (21.2 kB view details)

Uploaded Source

Built Distribution

myo_python-1.0.5-py3-none-any.whl (23.3 kB view details)

Uploaded Python 3

File details

Details for the file myo-python-1.0.5.tar.gz.

File metadata

  • Download URL: myo-python-1.0.5.tar.gz
  • Upload date:
  • Size: 21.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.8.11

File hashes

Hashes for myo-python-1.0.5.tar.gz
Algorithm Hash digest
SHA256 36e1e2c182ebeb39d7fbb55618bdc86355fa379c72a0f4918624d83e0e0996c8
MD5 db785bfb580a62e45b6320984c6f69c2
BLAKE2b-256 bb5b76aa8418a18c198472b7b9e61a9b5d9e80205e31aeefe5b2260acc97bfb0

See more details on using hashes here.

File details

Details for the file myo_python-1.0.5-py3-none-any.whl.

File metadata

  • Download URL: myo_python-1.0.5-py3-none-any.whl
  • Upload date:
  • Size: 23.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.8.11

File hashes

Hashes for myo_python-1.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 9b61c9b37134131cfcc2fc96405c17b4b054a3a9082f65f60ae515dd7e8c4212
MD5 af90305db91f30cbae48194cb0a62c47
BLAKE2b-256 e3c30c5ad5d2d05f4b59dc77f13872c726793e3c19cfefba1a75c23a376d4fe9

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