[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.
Myo-Python is a CFFI wrapper for the Thalmic Myo SDK. Minimum required Python version is 3.5.
Table of Contents
The documentation can currently be found in the docs/
directory in the
GitHub Repository.
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!")
The v0.2.x series of the Myo-Python library used ctypes
and has a little
bit different API. The most important changes are:
Hub
object no longer needs to be shut down explicitlyDeviceListener
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
time.clock()
with time.perf_counter()
(#92)enum34
package instead of nr.types.enum
which has been removed in nr.types>=2.0.0
ValueError
raised in myo.init()
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()
.nr>=2.0.10,<3
in favor of nr.types>=1.0.3
Event.warmup_result
(PR #58 @fribeiro1)Event.rotation_on_arm
(#59)This project is licensed under the MIT License. Copyright © 2015-2018 Niklas Rosenstein