Skip to main content

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

Metadata

Release files for myo-python 1.0.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for myo-python 1.0.5
File Size Uploaded
myo-python-1.0.5.tar.gz 21.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for myo-python 1.0.5
File Interpreter ABI Platform
myo_python-1.0.5-py3-none-any.whl Python 3 none any Details

Total release size: 44.4 kB

Release files / myo-python-1.0.5.tar.gz

Download URL myo-python-1.0.5.tar.gz
Size 21.2 kB
Tags Source
SHA-256 checksum
How to use checksums
36e1e2c182ebeb39d7fbb55618bdc86355fa379c72a0f4918624d83e0e0996c8
BLAKE2b-256 checksum
How to use checksums
bb5b76aa8418a18c198472b7b9e61a9b5d9e80205e31aeefe5b2260acc97bfb0
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / myo_python-1.0.5-py3-none-any.whl

Download URL myo_python-1.0.5-py3-none-any.whl
Size 23.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9b61c9b37134131cfcc2fc96405c17b4b054a3a9082f65f60ae515dd7e8c4212
BLAKE2b-256 checksum
How to use checksums
e3c30c5ad5d2d05f4b59dc77f13872c726793e3c19cfefba1a75c23a376d4fe9
Upload date
Uploaded using Trusted Publishing?
What is 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

Release history Release notifications | RSS feed

This release

1.0.5 This release

2 release files

1.0.4

1 release file

1.0.3

1 release file

1.0.2

1 release file

1.0.1

1 release file

1.0.0

1 release file

0.2.4

1 release file

0.2.3

1 release file

0.2.2

1 release file

0.2.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page