Skip to content
This repository was archived by the owner on Jul 20, 2025. It is now read-only.

Commit f2a6afe

Browse files
committed
update examples for mms
1 parent 844c017 commit f2a6afe

24 files changed

+521
-137
lines changed

examples/acc_threshold_detector.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# usage: python acc_threshold_detector.py [mac]
1+
# usage: python3 acc_threshold_detector.py [mac]
22
from __future__ import print_function
33
from mbientlab.metawear import MetaWear, libmetawear, parse_value, create_voidp_int, create_voidp
44
from mbientlab.metawear.cbindings import *
@@ -54,31 +54,42 @@
5454
print("Logging data for 10s")
5555
sleep(10.0)
5656

57+
# stop acc
5758
libmetawear.mbl_mw_acc_stop(d.board)
5859
libmetawear.mbl_mw_acc_disable_acceleration_sampling(d.board)
60+
# stop logging
5961
libmetawear.mbl_mw_logging_stop(d.board)
60-
62+
# flush for mms
63+
libmetawear.mbl_mw_logging_flush_page(d.board)
64+
65+
# download handler fxn
6166
def progress_update_handler(context, entries_left, total_entries):
6267
if (entries_left == 0):
6368
e.set()
64-
69+
# download handler fxn ptr
6570
fn_wrapper = FnVoid_VoidP_UInt_UInt(progress_update_handler)
6671
download_handler= LogDownloadHandler(context = None, \
6772
received_progress_update = fn_wrapper, \
6873
received_unknown_entry = cast(None, FnVoid_VoidP_UByte_Long_UByteP_UByte), \
6974
received_unhandled_entry = cast(None, FnVoid_VoidP_DataP))
70-
7175
callback = FnVoid_VoidP_DataP(lambda ctx, p: print("threshold crossed: {epoch: %d, value: %s}" % (p.contents.epoch, parse_value(p))))
76+
77+
# subscribe to logger
7278
libmetawear.mbl_mw_logger_subscribe(ths_logger, None, callback)
79+
80+
# download
7381
libmetawear.mbl_mw_logging_download(d.board, 0, byref(download_handler))
82+
83+
# wait until done
7484
e.wait()
7585

7686
except RuntimeError as err:
7787
print(err)
7888
finally:
7989
e.clear()
8090
print("Resetting device")
81-
91+
sleep(1.0)
8292
d.on_disconnect = lambda status: e.set()
93+
# reset
8394
libmetawear.mbl_mw_debug_reset(d.board)
8495
e.wait()

examples/anonymous_datasignals.py

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# usage: python anonymous_datasignals.py [mac]
1+
# usage: python3 anonymous_datasignals.py [mac]
22
from __future__ import print_function
33
from mbientlab.metawear import MetaWear, libmetawear, parse_value
44
from mbientlab.metawear.cbindings import *
@@ -11,66 +11,85 @@
1111
if sys.version_info[0] == 2:
1212
range = xrange
1313

14+
# connect
1415
metawear = MetaWear(sys.argv[1])
1516
metawear.connect()
1617
print("Connected")
1718

19+
# setup
1820
e = Event()
1921
result = {}
22+
23+
# handler fxn
2024
def handler(ctx, board, signals, len):
2125
result['length'] = len
2226
result['signals'] = cast(signals, POINTER(c_void_p * len)) if signals is not None else None
2327
e.set()
28+
# handler fxn ptr
2429
handler_fn = FnVoid_VoidP_VoidP_VoidP_UInt(handler)
2530

31+
# datahandler class
2632
class DataHandler:
2733
def __init__(self, signal):
2834
self.identifier = libmetawear.mbl_mw_anonymous_datasignal_get_identifier(signal)
2935
self.data_handler_fn = FnVoid_VoidP_DataP(lambda ctx, ptr: print({"identifier": self.identifier, "epoch": ptr.contents.epoch, "value": parse_value(ptr)}))
3036

31-
print("Creating anonymous signals")
37+
# setup ble
3238
libmetawear.mbl_mw_settings_set_connection_parameters(metawear.board, 7.5, 7.5, 0, 6000)
3339
sleep(1.0)
40+
41+
# create anonymous signal
42+
print("Creating anonymous signals")
3443
libmetawear.mbl_mw_metawearboard_create_anonymous_datasignals(metawear.board, None, handler_fn)
3544
e.wait()
3645

46+
# make sense of logging signals found
3747
if (result['signals'] == None):
3848
if (result['length'] != 0):
3949
print("Error creating anonymous signals, status = " + str(result['length']))
4050
else:
4151
print("No active loggers detected")
4252
else:
4353
e.clear()
54+
# stop logging
4455
libmetawear.mbl_mw_logging_stop(metawear.board)
45-
56+
# print results
4657
print(str(result['length']) + " active loggers discovered")
4758
handlers = []
59+
# analyze results
4860
for x in range(0, result['length']):
4961
wrapper = DataHandler(result['signals'].contents[x])
62+
# subscribe to download if good signal
5063
libmetawear.mbl_mw_anonymous_datasignal_subscribe(result['signals'].contents[x], None, wrapper.data_handler_fn)
5164
handlers.append(wrapper)
52-
65+
# progress handler fxn
5366
def progress_update_handler(ctx, left, total):
5467
if (left == 0):
5568
e.set()
56-
69+
# unknown entry handler fxn
5770
def unknown_entry_handler(ctx, id, epoch, data, length):
5871
print("unknown entry = " + str(id))
59-
72+
# download handlers
6073
print("Downloading log")
6174
progress_update_fn = FnVoid_VoidP_UInt_UInt(progress_update_handler)
6275
unknown_entry_fn = FnVoid_VoidP_UByte_Long_UByteP_UByte(unknown_entry_handler)
6376
download_handler= LogDownloadHandler(context = None, received_progress_update = progress_update_fn,
6477
received_unknown_entry = unknown_entry_fn, received_unhandled_entry = cast(None, FnVoid_VoidP_DataP))
78+
# download
6579
libmetawear.mbl_mw_logging_download(metawear.board, 10, byref(download_handler))
80+
# wait until done
6681
e.wait()
67-
82+
# wait 1s
83+
sleep(1.0)
6884
print("Download completed")
85+
# erase macros
6986
libmetawear.mbl_mw_macro_erase_all(metawear.board)
87+
sleep(1.0)
88+
# reset board
7089
libmetawear.mbl_mw_debug_reset_after_gc(metawear.board)
71-
90+
sleep(1.0)
7291
e.clear()
7392
metawear.on_disconnect = lambda status: e.set()
74-
93+
# disconnect
7594
libmetawear.mbl_mw_debug_disconnect(metawear.board)
7695
e.wait()

examples/calibrate.py

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,71 @@
1-
# usage: python calibrate.py [mac]
1+
# usage: python3 calibrate.py [mac]
2+
# This example is showing how to calibrate the sensor fusion on the metawear
23
from mbientlab.metawear import MetaWear, libmetawear, parse_value
34
from mbientlab.metawear.cbindings import *
45
from time import sleep
56
from threading import Event
67

78
import sys
89

10+
# connect
911
device = MetaWear(sys.argv[1])
1012
device.connect()
1113
print("Connected")
1214

15+
# event
1316
e = Event()
1417

18+
# calibration data fxn
1519
def calibration_data_handler(ctx, board, pointer):
1620
print("calibration data: %s" % (pointer.contents))
21+
# write the calib data to the metawear
1722
libmetawear.mbl_mw_sensor_fusion_write_calibration_data(board, pointer)
1823
libmetawear.mbl_mw_memory_free(pointer)
1924
e.set()
25+
# calibration data fxn ptr
2026
fn_wrapper_01 = FnVoid_VoidP_VoidP_CalibrationDataP(calibration_data_handler)
2127

28+
# get calibration state signal
2229
signal = libmetawear.mbl_mw_sensor_fusion_calibration_state_data_signal(device.board)
30+
31+
# calibration handler fxn
2332
def calibration_handler(ctx, pointer):
2433
value = parse_value(pointer)
2534
print("state: %s" % (value))
26-
2735
if (value.accelrometer == Const.SENSOR_FUSION_CALIBRATION_ACCURACY_HIGH and \
2836
value.gyroscope == Const.SENSOR_FUSION_CALIBRATION_ACCURACY_HIGH and \
2937
value.magnetometer == Const.SENSOR_FUSION_CALIBRATION_ACCURACY_HIGH):
30-
38+
# read
3139
libmetawear.mbl_mw_sensor_fusion_read_calibration_data(device.board, None, fn_wrapper_01)
3240
else:
3341
sleep(1.0)
3442
libmetawear.mbl_mw_datasignal_read(signal)
43+
# calbration handle fxn ptr
3544
fn_wrapper_02 = FnVoid_VoidP_DataP(calibration_handler)
3645

46+
# setup sensor fusion config
3747
libmetawear.mbl_mw_sensor_fusion_set_mode(device.board, SensorFusionMode.NDOF)
3848
libmetawear.mbl_mw_sensor_fusion_write_config(device.board)
3949

50+
# subscribe to the calibration sensor fusion signal
4051
libmetawear.mbl_mw_datasignal_subscribe(signal, None, fn_wrapper_02)
52+
53+
# start
4154
libmetawear.mbl_mw_sensor_fusion_start(device.board)
55+
56+
# read
4257
libmetawear.mbl_mw_datasignal_read(signal)
58+
59+
# wait for event
4360
e.wait()
4461

4562
print("Disconnecting")
4663
e.clear()
4764
device.on_disconnect = lambda s: e.set()
65+
# stop
4866
libmetawear.mbl_mw_sensor_fusion_stop(device.board)
67+
sleep(2.0)
68+
# disconnect
4969
libmetawear.mbl_mw_debug_disconnect(device.board)
50-
51-
e.wait()
70+
# wait until done
71+
e.wait()

examples/data_fuser.py

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,59 +9,78 @@
99
states = []
1010

1111
class State:
12+
# init
1213
def __init__(self, device):
1314
self.device = device
1415
self.callback = cbindings.FnVoid_VoidP_DataP(self.data_handler)
1516
self.processor = None
16-
17+
# download data callback fxn
1718
def data_handler(self, ctx, data):
1819
values = parse_value(data, n_elem = 2)
1920
print("acc: (%.4f,%.4f,%.4f), gyro; (%.4f,%.4f,%.4f)" % (values[0].x, values[0].y, values[0].z, values[1].x, values[1].y, values[1].z))
20-
21+
# setup
2122
def setup(self):
23+
# ble settings
2224
libmetawear.mbl_mw_settings_set_connection_parameters(self.device.board, 7.5, 7.5, 0, 6000)
2325
sleep(1.5)
24-
26+
# events
2527
e = Event()
26-
28+
# processor callback fxn
2729
def processor_created(context, pointer):
2830
self.processor = pointer
2931
e.set()
32+
# processor fxn ptr
3033
fn_wrapper = cbindings.FnVoid_VoidP_VoidP(processor_created)
31-
34+
# get acc signal
3235
acc = libmetawear.mbl_mw_acc_get_acceleration_data_signal(self.device.board)
33-
gyro = libmetawear.mbl_mw_gyro_bmi160_get_rotation_data_signal(self.device.board)
34-
36+
# get gyro signal - MMRl, MMR, MMc ONLY
37+
#gyro = libmetawear.mbl_mw_gyro_bmi160_get_rotation_data_signal(self.device.board)
38+
# get gyro signal - MMRS ONLY
39+
gyro = libmetawear.mbl_mw_gyro_bmi270_get_rotation_data_signal(self.device.board)
40+
# create signals variable
3541
signals = (c_void_p * 1)()
3642
signals[0] = gyro
43+
# create acc + gyro signal fuser
3744
libmetawear.mbl_mw_dataprocessor_fuser_create(acc, signals, 1, None, fn_wrapper)
45+
# wait for fuser to be created
3846
e.wait()
39-
47+
# subscribe to the fused signal
4048
libmetawear.mbl_mw_datasignal_subscribe(self.processor, None, self.callback)
41-
49+
# start
4250
def start(self):
43-
44-
libmetawear.mbl_mw_gyro_bmi160_enable_rotation_sampling(self.device.board)
51+
# start gyro sampling - MMRL, MMC, MMR only
52+
#libmetawear.mbl_mw_gyro_bmi160_enable_rotation_sampling(self.device.board)
53+
# start gyro sampling - MMS ONLY
54+
libmetawear.mbl_mw_gyro_bmi270_enable_rotation_sampling(self.device.board)
55+
# start acc sampling
4556
libmetawear.mbl_mw_acc_enable_acceleration_sampling(self.device.board)
46-
47-
libmetawear.mbl_mw_gyro_bmi160_start(self.device.board)
57+
# start gyro - MMRL, MMC, MMR only
58+
#libmetawear.mbl_mw_gyro_bmi160_start(self.device.board)
59+
# start gyro sampling - MMS ONLY
60+
libmetawear.mbl_mw_gyro_bmi270_start(self.device.board)
61+
# start acc
4862
libmetawear.mbl_mw_acc_start(self.device.board)
4963

64+
# connect
5065
for i in range(len(argv) - 1):
5166
d = MetaWear(argv[i + 1])
5267
d.connect()
5368
print("Connected to " + d.address)
5469
states.append(State(d))
5570

71+
# configure
5672
for s in states:
5773
print("Configuring %s" % (s.device.address))
5874
s.setup()
5975

76+
# start
6077
for s in states:
6178
s.start()
6279

80+
# wait 10 s
6381
sleep(10.0)
6482

83+
# reset
6584
print("Resetting devices")
6685
events = []
6786
for s in states:
@@ -72,4 +91,4 @@ def start(self):
7291
libmetawear.mbl_mw_debug_reset(s.device.board)
7392

7493
for e in events:
75-
e.wait()
94+
e.wait()

0 commit comments

Comments
 (0)