Created
August 26, 2016 14:06
-
-
Save hbldh/d1c8513eb15611a488f6b6c423be2839 to your computer and use it in GitHub Desktop.
MetaWear-CppAPI tests
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
""" | |
accelerometer_generic | |
===================== | |
Created by hbldh <henrik.blidh@nedomkull.com> | |
Created on 2016-08-26 | |
""" | |
from __future__ import division | |
from __future__ import print_function | |
from __future__ import unicode_literals | |
from __future__ import absolute_import | |
import time | |
import platform | |
from ctypes import cast, POINTER, c_float, c_long | |
from pymetawear.client import discover_devices, MetaWearClient, libmetawear | |
from pymetawear.exceptions import PyMetaWearException | |
from pymetawear.mbientlab.metawear.core import CartesianFloat, DataTypeId, Fn_DataPtr | |
from pymetawear.client import MetaWearClient | |
def scan_and_select_le_device(timeout=3): | |
print("Discovering nearby Bluetooth Low Energy devices...") | |
ble_devices = discover_devices(timeout=timeout) | |
if len(ble_devices) > 1: | |
for i, d in enumerate(ble_devices): | |
print("[{0}] - {1}: {2}".format(i+1, *d)) | |
s = input("Which device do you want to connect to? ") | |
if int(s) <= (i + 1): | |
address = ble_devices[int(s) - 1][0] | |
else: | |
raise ValueError("Incorrect selection. Aborting...") | |
elif len(ble_devices) == 1: | |
address = ble_devices[0][0] | |
else: | |
raise ValueError("Did not detect any BLE devices.") | |
return address | |
address = scan_and_select_le_device() | |
c = MetaWearClient(str(address), 'pygatt', debug=True) | |
print("New client created: {0}".format(c)) | |
def acc_callback(data): | |
"""Handle a (x,y,z) accelerometer tuple.""" | |
if data.contents.type_id == DataTypeId.CARTESIAN_FLOAT: | |
data_ptr = cast(data.contents.value, POINTER(CartesianFloat)) | |
print("X: {0}, Y: {1}, Z: {2}".format(*(data_ptr.contents.x, | |
data_ptr.contents.y, | |
data_ptr.contents.z))) | |
else: | |
raise PyMetaWearException('Incorrect data type id: ' + | |
str(data.contents.type_id)) | |
_acc_callback = Fn_DataPtr(acc_callback) | |
print("Write accelerometer settings...") | |
libmetawear.mbl_mw_acc_set_odr(c.board, c_float(50.0)) | |
libmetawear.mbl_mw_acc_set_range(c.board, c_float(4.0)) | |
print("Write accelerometer config....") | |
libmetawear.mbl_mw_acc_write_acceleration_config(c.board) | |
print("Subscribing to accelerometer signal...") | |
if platform.architecture()[0] == '64bit': | |
libmetawear.mbl_mw_acc_get_acceleration_data_signal.restype = c_long | |
data_signal = c_long(libmetawear.mbl_mw_acc_get_acceleration_data_signal(c.board)) | |
else: | |
data_signal = libmetawear.mbl_mw_acc_get_acceleration_data_signal(c.board) | |
libmetawear.mbl_mw_datasignal_subscribe(data_signal, _acc_callback) | |
print("Enable acc sampling on board...") | |
libmetawear.mbl_mw_acc_enable_acceleration_sampling(c.board) | |
print("Start acc on board...") | |
libmetawear.mbl_mw_acc_start(c.board) | |
time.sleep(10.0) | |
print("Stop accelerometer...") | |
libmetawear.mbl_mw_acc_stop(c.board) | |
print("Disable accelerometer sampling...") | |
libmetawear.mbl_mw_acc_disable_acceleration_sampling(c.board) | |
print("Unsubscribe to notification...") | |
libmetawear.mbl_mw_datasignal_unsubscribe(data_signal) | |
time.sleep(5.0) | |
c.disconnect() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
""" | |
accelerometer_mma8452q | |
====================== | |
Created by hbldh <henrik.blidh@nedomkull.com> | |
Created on 2016-04-10 | |
""" | |
from __future__ import division | |
from __future__ import print_function | |
from __future__ import unicode_literals | |
from __future__ import absolute_import | |
import time | |
import platform | |
from ctypes import cast, POINTER, c_float, c_long | |
from pymetawear.client import discover_devices, MetaWearClient, libmetawear | |
from pymetawear.exceptions import PyMetaWearException | |
from pymetawear.mbientlab.metawear.core import CartesianFloat, DataTypeId, Fn_DataPtr | |
from pymetawear.client import MetaWearClient | |
def scan_and_select_le_device(timeout=3): | |
print("Discovering nearby Bluetooth Low Energy devices...") | |
ble_devices = discover_devices(timeout=timeout) | |
if len(ble_devices) > 1: | |
for i, d in enumerate(ble_devices): | |
print("[{0}] - {1}: {2}".format(i+1, *d)) | |
s = input("Which device do you want to connect to? ") | |
if int(s) <= (i + 1): | |
address = ble_devices[int(s) - 1][0] | |
else: | |
raise ValueError("Incorrect selection. Aborting...") | |
elif len(ble_devices) == 1: | |
address = ble_devices[0][0] | |
else: | |
raise ValueError("Did not detect any BLE devices.") | |
return address | |
address = scan_and_select_le_device() | |
c = MetaWearClient(str(address), 'pygatt', debug=True) | |
print("New client created: {0}".format(c)) | |
def acc_callback(data): | |
"""Handle a (x,y,z) accelerometer tuple.""" | |
if data.contents.type_id == DataTypeId.CARTESIAN_FLOAT: | |
data_ptr = cast(data.contents.value, POINTER(CartesianFloat)) | |
print("X: {0}, Y: {1}, Z: {2}".format(*(data_ptr.contents.x, | |
data_ptr.contents.y, | |
data_ptr.contents.z))) | |
else: | |
raise PyMetaWearException('Incorrect data type id: ' + | |
str(data.contents.type_id)) | |
_acc_callback = Fn_DataPtr(acc_callback) | |
print("Write accelerometer settings...") | |
libmetawear.mbl_mw_acc_mma8452q_set_odr(c.board, 4) | |
libmetawear.mbl_mw_acc_mma8452q_set_range(c.board, 1) | |
print("Write accelerometer config....") | |
libmetawear.mbl_mw_acc_mma8452q_write_acceleration_config(c.board) | |
print("Subscribing to accelerometer signal...") | |
if platform.architecture()[0] == '64bit': | |
libmetawear.mbl_mw_acc_get_acceleration_data_signal.restype = c_long | |
data_signal = c_long(libmetawear.mbl_mw_acc_mma8452q_get_acceleration_data_signal(c.board)) | |
else: | |
data_signal = libmetawear.mbl_mw_acc_mma8452q_get_acceleration_data_signal(c.board) | |
libmetawear.mbl_mw_datasignal_subscribe(data_signal, _acc_callback) | |
print("Enable acc sampling on board...") | |
libmetawear.mbl_mw_acc_mma8452q_enable_acceleration_sampling(c.board) | |
print("Start acc on board...") | |
libmetawear.mbl_mw_acc_mma8452q_start(c.board) | |
time.sleep(10.0) | |
print("Stop accelerometer...") | |
libmetawear.mbl_mw_acc_mma8452q_stop(c.board) | |
print("Disable accelerometer sampling...") | |
libmetawear.mbl_mw_acc_mma8452q_disable_acceleration_sampling(c.board) | |
print("Unsubscribe to notification...") | |
libmetawear.mbl_mw_datasignal_unsubscribe(data_signal) | |
time.sleep(5.0) | |
c.disconnect() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment