Gyroscope module¶
The PyMetaWear implementation of the libmetawear
gyroscope module.
It is initialized at the creation of the MetaWearClient
client and can then be accessed in the gyroscope
attribute of the client.
The only MetaWear gyroscope available is the BMI160 sensor.
Data streaming example¶
If you need a real time stream of sensor data, use the notifications()
method on the gyroscope
module:
from pymetawear.client import MetaWearClient
c = MetaWearClient('DD:3A:7D:4D:56:F0')
# Set data rate to 200 Hz and measuring range to +/- 1000 DPS
c.gyroscope.set_settings(data_rate=200.0, data_range=1000.0)
def gyro_callback(data):
"""Handle a (epoch, (x,y,z)) gyroscope tuple."""
print("Epoch time: [{0}] - X: {1}, Y: {2}, Z: {3}".format(data[0], *data[1]))
# Enable notifications and register a callback for them.
c.gyroscope.notifications(gyro_callback)
Logging Example¶
If you want to log data to the MetaWear board and retrieve it after some time, then use the
start_logging()
, stop_logging()
and download_log()
methods:
import os
import json
import time
from pymetawear.client import MetaWearClient
from pymetawear.exceptions import PyMetaWearException, PyMetaWearDownloadTimeout
c = MetaWearClient('DD:3A:7D:4D:56:F0')
# Set data rate to 200 Hz and measuring range to +/- 1000 DPS
c.gyroscope.set_settings(data_rate=200.0, data_range=1000.0)
# Log data for 10 seconds.
c.gyroscope.start_logging()
print("Logging gyroscope data...")
time.sleep(10.0)
c.gyroscope.stop_logging()
print("Finished logging.")
# Download the stored data from the MetaWear board.
print("Downloading data...")
download_done = False
n = 0
data = None
while (not download_done) and n < 3:
try:
data = c.gyroscope.download_log()
download_done = True
except PyMetaWearDownloadTimeout:
print("Download of log interrupted. Trying to reconnect...")
c.disconnect()
c.connect()
n += 1
if data is None:
raise PyMetaWearException("Download of logging data failed.")
print("Disconnecting...")
c.disconnect()
# Save the logged data.
class MetaWearDataEncoder(json.JSONEncoder):
"""JSON Encoder for converting ``mbientlab`` module's CartesianFloat
class to data tuple ``(x,y,z)``."""
def default(self, o):
if isinstance(o, CartesianFloat):
return o.x, o.y, o.z
else:
return super(MetaWearDataEncoder, self).default(o)
data_file = os.path.join(os.getcwd(), "logged_data.json")
print("Saving the data to file: {0}".format(data_file))
with open("logged_data.json", "wt") as f:
json.dump(data, f, indent=2)
API¶
Gyroscope module¶
Created by hbldh <henrik.blidh@nedomkull.com> on 2016-04-26
-
class
pymetawear.modules.gyroscope.
GyroscopeModule
(board, module_id)[source]¶ MetaWear gyroscope module implementation.
Parameters: - board (ctypes.c_long) – The MetaWear board pointer value.
- module_id (int) – The module id of this gyroscope
component, obtained from
libmetawear
. - debug (bool) – If
True
, module prints out debug information.
-
module_name
¶ Get module name.
Returns: The name of this module. Return type: str
-
sensor_name
¶ Get sensor name, if applicable.
Returns: The name of this module. Return type: str or None