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

Commit 9854274

Browse files
committed
More example script improvements
1 parent d48c30e commit 9854274

File tree

9 files changed

+209
-268
lines changed

9 files changed

+209
-268
lines changed

examples/acc_threshold_detector.py

Lines changed: 8 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,10 @@
1-
# usage: python acc_threshold_detector [mac]
1+
# usage: python acc_threshold_detector.py [mac]
22
from __future__ import print_function
3-
from mbientlab.metawear import MetaWear, libmetawear, parse_value
3+
from mbientlab.metawear import MetaWear, libmetawear, parse_value, create_voidp_int, create_voidp
44
from mbientlab.metawear.cbindings import *
55
from time import sleep
66
from threading import Event
7-
8-
# CURRENT:
9-
# Sample accelerometer at 50Hz
10-
# Use the rms to combine X,Y,Z
11-
# Use the average to downsample to about 4Hz (averaging 8 samples)
12-
# Use the threshold detector to detect a bump
13-
# Also log all the event and download it later
14-
7+
158
print("Searching for device...")
169
d = MetaWear(sys.argv[1])
1710
d.connect()
@@ -21,35 +14,6 @@
2114
sleep(1.0)
2215

2316
e = Event()
24-
def create_voidp(create, resource):
25-
result = [None]
26-
def handler(ctx, pointer):
27-
result[0] = RuntimeError("Could not create " + resource) if pointer == None else pointer
28-
e.set()
29-
30-
callback_wrapper = FnVoid_VoidP_VoidP(handler)
31-
create(callback_wrapper)
32-
e.wait()
33-
34-
e.clear()
35-
if (result[0] is RuntimeError):
36-
raise result[0]
37-
return result[0]
38-
39-
def end_event_record(evt):
40-
result = [None]
41-
def handler(ctx, pointer, status):
42-
if (status != Const.STATUS_OK):
43-
result[0] = RuntimeError("Event recording returned a non-zero status (%d)" % (status))
44-
e.set()
45-
46-
callback_wrapper = FnVoid_VoidP_VoidP_Int(handler)
47-
libmetawear.mbl_mw_event_end_record(evt, None, callback_wrapper)
48-
e.wait()
49-
50-
e.clear()
51-
if (result[0] is RuntimeError):
52-
raise result[0]
5317

5418
try:
5519
# setup accelerometer (odr 50Hz and 2Gs)
@@ -61,24 +25,24 @@ def handler(ctx, pointer, status):
6125
acc_signal = libmetawear.mbl_mw_acc_get_acceleration_data_signal(d.board)
6226

6327
# create RMS - root mean square of acc X,Y,Z
64-
rms = create_voidp(lambda fn: libmetawear.mbl_mw_dataprocessor_rms_create(acc_signal, None, fn), "RMS")
28+
rms = create_voidp(lambda fn: libmetawear.mbl_mw_dataprocessor_rms_create(acc_signal, None, fn), resource = "RMS", event = e)
6529
print("RMS created")
6630

6731
# setup averager - averages over 8 RMS samples @ 50Hz
68-
avg = create_voidp(lambda fn: libmetawear.mbl_mw_dataprocessor_average_create(rms, 8, None, fn), "averager")
32+
avg = create_voidp(lambda fn: libmetawear.mbl_mw_dataprocessor_average_create(rms, 8, None, fn), resource = "averager", event = e)
6933
print("Averager created")
7034

7135
# setup event on avg - reset averager
7236
libmetawear.mbl_mw_event_record_commands(avg)
7337
libmetawear.mbl_mw_dataprocessor_average_reset(avg)
74-
end_event_record(avg)
38+
create_voidp_int(lambda fn: libmetawear.mbl_mw_event_end_record(avg, None, fn), event = e)
7539

7640
# setup threshold detector - detect anything above 1
77-
ths = create_voidp(lambda fn: libmetawear.mbl_mw_dataprocessor_threshold_create(avg, ThresholdMode.BINARY, 1.0, 0.0, None, fn), "threshold detector")
41+
ths = create_voidp(lambda fn: libmetawear.mbl_mw_dataprocessor_threshold_create(avg, ThresholdMode.BINARY, 1.0, 0.0, None, fn), resource = "threshold detector", event = e)
7842
print("Threshold detector created")
7943

8044
# setup logger - log the final signal of the averaged data
81-
ths_logger = create_voidp(lambda fn: libmetawear.mbl_mw_datasignal_log(ths, None, fn), "threshold logger")
45+
ths_logger = create_voidp(lambda fn: libmetawear.mbl_mw_datasignal_log(ths, None, fn), resource = "threshold logger", event = e)
8246
print("Threshold logger created")
8347

8448
# start accelerometer and event logging

examples/calibrate.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# usage: python led.py [mac]
1+
# usage: python calibrate.py [mac]
22
from mbientlab.metawear import MetaWear, libmetawear, parse_value
33
from mbientlab.metawear.cbindings import *
44
from time import sleep

examples/log_acc.py

Lines changed: 36 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,87 +1,60 @@
1-
# usage: python log_acc [mac]
1+
# usage: python log_acc.py [mac]
22
from __future__ import print_function
3-
from mbientlab.metawear import MetaWear, libmetawear, parse_value
3+
from mbientlab.metawear import MetaWear, libmetawear, parse_value, create_voidp, create_voidp_int
44
from mbientlab.metawear.cbindings import *
55
from time import sleep
66
from threading import Event
77

8-
import platform
98
import sys
109

11-
if sys.version_info[0] == 2:
12-
range = xrange
13-
14-
class State:
15-
def __init__(self, device):
16-
self.device = device
17-
18-
def setup_logger(self):
19-
e = Event()
20-
result = [None]
21-
22-
def logger_handler(ctx, pointer):
23-
result[0] = RuntimeError("Could not create logger") if pointer == None else pointer
24-
e.set()
25-
fn_wrapper = FnVoid_VoidP_VoidP(logger_handler)
26-
27-
signal = libmetawear.mbl_mw_acc_get_acceleration_data_signal(self.device.board)
28-
libmetawear.mbl_mw_datasignal_log(signal, None, fn_wrapper)
29-
e.wait()
30-
31-
if (result[0] is RuntimeError):
32-
raise result[0]
33-
34-
self.logger = result[0]
35-
36-
libmetawear.mbl_mw_acc_enable_acceleration_sampling(self.device.board)
37-
libmetawear.mbl_mw_acc_start(self.device.board)
38-
libmetawear.mbl_mw_logging_start(self.device.board, 0);
39-
40-
def download_data(self):
41-
libmetawear.mbl_mw_acc_stop(self.device.board)
42-
libmetawear.mbl_mw_acc_disable_acceleration_sampling(self.device.board)
43-
libmetawear.mbl_mw_logging_stop(self.device.board)
44-
45-
e = Event()
46-
def progress_update_handler(context, entries_left, total_entries):
47-
if (entries_left == 0):
48-
e.set()
49-
50-
fn_wrapper = FnVoid_VoidP_UInt_UInt(progress_update_handler)
51-
download_handler= LogDownloadHandler(context = None, \
52-
received_progress_update = fn_wrapper, \
53-
received_unknown_entry = cast(None, FnVoid_VoidP_UByte_Long_UByteP_UByte), \
54-
received_unhandled_entry = cast(None, FnVoid_VoidP_DataP))
55-
56-
callback = FnVoid_VoidP_DataP(lambda ctx, p: print("%s -> %s" % (self.device.address, parse_value(p))))
57-
libmetawear.mbl_mw_logger_subscribe(self.logger, None, callback)
58-
libmetawear.mbl_mw_logging_download(self.device.board, 0, byref(download_handler))
59-
e.wait()
60-
6110
print("Searching for device...")
6211
d = MetaWear(sys.argv[1])
6312
d.connect()
6413
print("Connected to " + d.address)
65-
s = State(d)
6614

6715
print("Configuring device")
68-
libmetawear.mbl_mw_settings_set_connection_parameters(s.device.board, 7.5, 7.5, 0, 6000)
69-
sleep(1.0)
7016

7117
try:
72-
s.setup_logger()
18+
signal = libmetawear.mbl_mw_acc_get_acceleration_data_signal(d.board)
19+
logger = create_voidp(lambda fn: libmetawear.mbl_mw_datasignal_log(signal, None, fn), resource = "acc_logger")
20+
21+
libmetawear.mbl_mw_logging_start(d.board, 0)
22+
libmetawear.mbl_mw_acc_enable_acceleration_sampling(d.board)
23+
libmetawear.mbl_mw_acc_start(d.board)
7324

7425
print("Logging data for 15s")
7526
sleep(15.0)
7627

77-
s.download_data()
78-
79-
except RuntimeError as e:
80-
print(e)
28+
libmetawear.mbl_mw_acc_stop(d.board)
29+
libmetawear.mbl_mw_acc_disable_acceleration_sampling(d.board)
30+
libmetawear.mbl_mw_logging_stop(d.board)
8131

32+
print("Downloading data")
33+
libmetawear.mbl_mw_settings_set_connection_parameters(d.board, 7.5, 7.5, 0, 6000)
34+
sleep(1.0)
35+
36+
e = Event()
37+
def progress_update_handler(context, entries_left, total_entries):
38+
if (entries_left == 0):
39+
e.set()
40+
41+
fn_wrapper = FnVoid_VoidP_UInt_UInt(progress_update_handler)
42+
download_handler = LogDownloadHandler(context = None, \
43+
received_progress_update = fn_wrapper, \
44+
received_unknown_entry = cast(None, FnVoid_VoidP_UByte_Long_UByteP_UByte), \
45+
received_unhandled_entry = cast(None, FnVoid_VoidP_DataP))
46+
47+
callback = FnVoid_VoidP_DataP(lambda ctx, p: print("{epoch: %d, value: %s}" % (p.contents.epoch, parse_value(p))))
48+
libmetawear.mbl_mw_logger_subscribe(logger, None, callback)
49+
libmetawear.mbl_mw_logging_download(d.board, 0, byref(download_handler))
50+
e.wait()
51+
52+
except RuntimeError as err:
53+
print(err)
8254
finally:
8355
print("Resetting device")
56+
8457
e = Event()
85-
s.device.on_disconnect = lambda status: e.set()
86-
libmetawear.mbl_mw_debug_reset(s.device.board)
58+
d.on_disconnect = lambda status: e.set()
59+
libmetawear.mbl_mw_debug_reset(d.board)
8760
e.wait()

examples/log_temp.py

Lines changed: 40 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -1,124 +1,62 @@
1-
# usage: python log_temp [mac]
1+
# usage: python log_temp.py [mac]
22
from __future__ import print_function
3-
from mbientlab.metawear import MetaWear, libmetawear, parse_value
3+
from mbientlab.metawear import MetaWear, libmetawear, parse_value, create_voidp, create_voidp_int
44
from mbientlab.metawear.cbindings import *
55
from time import sleep
66
from threading import Event
77

8-
import platform
98
import sys
109

11-
if sys.version_info[0] == 2:
12-
range = xrange
13-
14-
class State:
15-
def __init__(self, device):
16-
self.device = device
17-
18-
def setup_logger(self):
19-
e = Event()
20-
result = [None]
21-
22-
def logger_handler(ctx, pointer):
23-
result[0] = RuntimeError("Could not create logger") if pointer == None else pointer
24-
e.set()
25-
fn_wrapper = FnVoid_VoidP_VoidP(logger_handler)
26-
27-
#streaming and logging
28-
signal = libmetawear.mbl_mw_multi_chnl_temp_get_temperature_data_signal(self.device.board, \
29-
MetaWearRProChannel.ON_BOARD_THERMISTOR)
30-
libmetawear.mbl_mw_datasignal_log(signal, None, fn_wrapper)
31-
e.wait()
32-
33-
if (result[0] is RuntimeError):
34-
raise result[0]
35-
36-
self.logger = result[0]
37-
self.timer = self._setup_timer()
38-
self._setup_read_event(self.timer, signal)
39-
40-
libmetawear.mbl_mw_logging_start(self.device.board, 0);
41-
libmetawear.mbl_mw_timer_start(self.timer)
42-
43-
def _setup_timer(self):
44-
e = Event()
45-
result = [None]
46-
47-
def timer_handler(ctx, pointer):
48-
result[0] = RuntimeError("Could not create timer") if pointer == None else pointer
49-
e.set()
50-
fn_wrapper = FnVoid_VoidP_VoidP(timer_handler)
51-
52-
libmetawear.mbl_mw_timer_create_indefinite(self.device.board, 1000, 0, None, fn_wrapper)
53-
e.wait()
54-
55-
if (result[0] is RuntimeError):
56-
raise result[0]
57-
58-
return result[0]
59-
60-
def _setup_read_event(self, timer, signal):
61-
e = Event()
62-
result = [None]
63-
64-
def commands_recorded(ctx, event, status):
65-
result[0] = RuntimeError("Could not create read event") if status != Const.STATUS_OK else None
66-
e.set()
67-
fn_wrapper = FnVoid_VoidP_VoidP_Int(commands_recorded)
68-
69-
libmetawear.mbl_mw_event_record_commands(timer)
70-
libmetawear.mbl_mw_datasignal_read(signal)
71-
libmetawear.mbl_mw_event_end_record(timer, None, fn_wrapper)
72-
e.wait()
73-
74-
if (result[0] is RuntimeError):
75-
raise result[0]
76-
77-
def download_data(self):
78-
libmetawear.mbl_mw_timer_remove(self.timer)
79-
libmetawear.mbl_mw_logging_stop(self.device.board)
80-
81-
e = Event()
82-
def progress_update_handler(context, entries_left, total_entries):
83-
if (entries_left == 0):
84-
e.set()
85-
86-
fn_wrapper = FnVoid_VoidP_UInt_UInt(progress_update_handler)
87-
download_handler= LogDownloadHandler(context = None, \
88-
received_progress_update = fn_wrapper, \
89-
received_unknown_entry = cast(None, FnVoid_VoidP_UByte_Long_UByteP_UByte), \
90-
received_unhandled_entry = cast(None, FnVoid_VoidP_DataP))
91-
92-
callback = FnVoid_VoidP_DataP(lambda ctx, p: print("%f" % (parse_value(p))))
93-
libmetawear.mbl_mw_logger_subscribe(self.logger, None, callback)
94-
libmetawear.mbl_mw_logging_download(self.device.board, 0, byref(download_handler))
95-
e.wait()
96-
97-
98-
9910
print("Searching for device...")
10011
d = MetaWear(sys.argv[1])
10112
d.connect()
10213
print("Connected to " + d.address)
103-
s = State(d)
104-
105-
print("Configuring device")
106-
libmetawear.mbl_mw_settings_set_connection_parameters(s.device.board, 7.5, 7.5, 0, 6000)
107-
sleep(1.0)
10814

10915
try:
16+
e = Event()
17+
18+
print("Configuring device")
11019
#logging
111-
s.setup_logger()
20+
signal = libmetawear.mbl_mw_multi_chnl_temp_get_temperature_data_signal(d.board, MetaWearRProChannel.ON_BOARD_THERMISTOR)
21+
logger = create_voidp(lambda fn: libmetawear.mbl_mw_datasignal_log(signal, None, fn), resource = "temp_logger", event = e)
22+
23+
timer = create_voidp(lambda fn: libmetawear.mbl_mw_timer_create_indefinite(d.board, 1000, 0, None, fn), resource = "timer", event = e)
24+
libmetawear.mbl_mw_event_record_commands(timer)
25+
libmetawear.mbl_mw_datasignal_read(signal)
26+
create_voidp_int(lambda fn: libmetawear.mbl_mw_event_end_record(timer, None, fn), event = e)
27+
28+
libmetawear.mbl_mw_logging_start(d.board, 0)
29+
libmetawear.mbl_mw_timer_start(timer)
11230

11331
print("Logging data for 15s")
11432
sleep(15.0)
11533

116-
s.download_data()
117-
except RuntimeError as e:
118-
print(e)
34+
libmetawear.mbl_mw_timer_remove(timer)
35+
libmetawear.mbl_mw_logging_stop(d.board)
36+
37+
print("Downloading data")
38+
libmetawear.mbl_mw_settings_set_connection_parameters(d.board, 7.5, 7.5, 0, 6000)
39+
sleep(1.0)
40+
41+
def progress_update_handler(context, entries_left, total_entries):
42+
if (entries_left == 0):
43+
e.set()
44+
45+
fn_wrapper = FnVoid_VoidP_UInt_UInt(progress_update_handler)
46+
download_handler = LogDownloadHandler(context = None, \
47+
received_progress_update = fn_wrapper, \
48+
received_unknown_entry = cast(None, FnVoid_VoidP_UByte_Long_UByteP_UByte), \
49+
received_unhandled_entry = cast(None, FnVoid_VoidP_DataP))
50+
51+
callback = FnVoid_VoidP_DataP(lambda ctx, p: print("{epoch: %d, value: %s}" % (p.contents.epoch, parse_value(p))))
52+
libmetawear.mbl_mw_logger_subscribe(logger, None, callback)
53+
libmetawear.mbl_mw_logging_download(d.board, 0, byref(download_handler))
54+
e.wait()
55+
except RuntimeError as err:
56+
print(err)
11957
finally:
12058
print("Resetting device")
12159
e = Event()
122-
s.device.on_disconnect = lambda status: e.set()
123-
libmetawear.mbl_mw_debug_reset(s.device.board)
60+
d.on_disconnect = lambda status: e.set()
61+
libmetawear.mbl_mw_debug_reset(d.board)
12462
e.wait()

0 commit comments

Comments
 (0)