def btn_start_shot_click(self): self.mw_states = [] self.xyz_shots = [] for device in self.mw_devices: # try: # device.connect() # except: # print 'connection to %s failed (the device might be already connected)' % device.address self.mw_states.append( MetaWearState(device, self.mw_positions[device.address], self)) for s in self.mw_states: libmetawear.mbl_mw_settings_set_connection_parameters( s.device.board, 7.5, 7.5, 0, 6000) sleep(1.5) libmetawear.mbl_mw_acc_set_odr(s.device.board, 100.0) libmetawear.mbl_mw_acc_set_range(s.device.board, 16.0) libmetawear.mbl_mw_acc_write_acceleration_config(s.device.board) signal = libmetawear.mbl_mw_acc_get_acceleration_data_signal( s.device.board) libmetawear.mbl_mw_datasignal_subscribe(signal, None, s.callback) libmetawear.mbl_mw_acc_enable_acceleration_sampling(s.device.board) libmetawear.mbl_mw_acc_start(s.device.board) # t = Timer(15, self.time_elapsed) # t.start() print 'shot has started' return
def setup(self): # setup ble libmetawear.mbl_mw_settings_set_connection_parameters( self.device.board, 7.5, 7.5, 0, 6000) sleep(1.5) # setup event e = Event() # processor callback fxn def processor_created(context, pointer): self.processor = pointer e.set() fn_wrapper = cbindings.FnVoid_VoidP_VoidP(processor_created) # get acc signal acc = libmetawear.mbl_mw_acc_get_acceleration_data_signal( self.device.board) # create acc averager (averages 4 consecutive acc data entriess) libmetawear.mbl_mw_dataprocessor_average_create( acc, 4, None, fn_wrapper) # wait for averager to be created e.wait() # subscribe to signal libmetawear.mbl_mw_datasignal_subscribe(self.processor, None, self.callback)
def start(self): if self.device == None: self.log("ERROR", "Device not available") return False dev_board = self.device.board self.log("INFO", "Configuring device") lmw.mbl_mw_settings_set_connection_parameters(dev_board, 7.5, 7.5, 0, 6000) time.sleep(1.5) # Subscribe to accelerometer data acc = lmw.mbl_mw_acc_get_acceleration_data_signal(dev_board) lmw.mbl_mw_datasignal_subscribe(acc, None, self.callback_acc) # Subscribe to gyro data gyro = lmw.mbl_mw_gyro_bmi160_get_rotation_data_signal(dev_board) lmw.mbl_mw_datasignal_subscribe(gyro, None, self.callback_gyr) self.log("INFO", "Starting device...") # Enable accelerometer sampling lmw.mbl_mw_acc_enable_acceleration_sampling(dev_board) lmw.mbl_mw_acc_start(dev_board) # Enable gyrp sampling lmw.mbl_mw_gyro_bmi160_enable_rotation_sampling(dev_board) lmw.mbl_mw_gyro_bmi160_start(dev_board) self.log("INFO", "Device started.") return True
def setup(self): libmetawear.mbl_mw_settings_set_connection_parameters(self.device.board, 7.5, 7.5, 0, 600) sleep(1.5) e = Event() def processor_created(context, pointer): self.processor = pointer e.set() fn_wrapper = cbindings.FnVoid_VoidP_VoidP(processor_created) # set accelerometer to 100Hz sampling rate and range to +/- 16 g's libmetawear.mbl_mw_acc_set_odr(s.device.board, 100.0) libmetawear.mbl_mw_acc_set_range(s.device.board, 16.0) libmetawear.mbl_mw_acc_write_acceleration_config(s.device.board) # set gyro to 100Hz sampling rate and +/- 1000 deg/sec. libmetawear.mbl_mw_gyro_bmi160_set_odr(s.device.board, MBL_MW_GYRO_BMI160_ODR_100Hz) libmetawear.mbl_mw_gyro_bmi160_set_range(s.device.board, MBL_MW_GYRO_BMI160_RANGE_1000dps) libmetawear.mbl_mw_gyro_bmi160_write_config(s.device.board) acc = libmetawear.mbl_mw_acc_get_acceleration_data_signal(self.device.board) gyro = libmetawear.mbl_mw_gyro_bmi160_get_rotation_data_signal(self.device.board) signals = (c_void_p * 1)() signals[0] = gyro # libmetawear.mbl_mw_dataprocessor_accounter_create(signals, None, fn_wrapper) fuser = create_voidp(lambda fn: libmetawear.mbl_mw_dataprocessor_fuser_create(acc, signals, 1, None, fn), resource = "fuser", event = e) accounter = create_voidp(lambda fn: libmetawear.mbl_mw_dataprocessor_accounter_create(fuser, None, fn), resource = "accounter", event = e) # libmetawear.mbl_mw_datasignal_subscribe(self.processor, None, self.callback) libmetawear.mbl_mw_datasignal_subscribe(accounter, None, self.callback)
def DevRun(self): try: ## Get data and print to console ## self.euler_signal = libmetawear.mbl_mw_sensor_fusion_get_data_signal( self.board, SensorFusionData.EULER_ANGLE) self.euler_callback = FnVoid_VoidP_DataP( lambda context, data: print("epoch: %s, euler %s\n" % ( data.contents.epoch, parse_value(data)))) ## Required for data extraction ## libmetawear.mbl_mw_datasignal_subscribe(self.euler_signal, None, self.euler_callback) libmetawear.mbl_mw_sensor_fusion_enable_data( self.board, SensorFusionData.EULER_ANGLE) libmetawear.mbl_mw_sensor_fusion_set_mode(self.board, SensorFusionMode.NDOF) libmetawear.mbl_mw_sensor_fusion_write_config(self.board) libmetawear.mbl_mw_sensor_fusion_start(self.board) #input('') # Don't seem to need this ? ? except OSError as err: print("OS ERROR {}".format(err)) self.DevClose() print("Device closed properly...") sys.exit() except ValueError: print("Error with variable...") self.DevClose() print("Device closed properly...") sys.exit() except: print("Unexpected Error:", sys.exc_info()[0]) self.DevClose() print("Device closed properly...") sys.exit()
def start_test(self, time_tests): for device in self.device_list: logger.info_log(f"Start device: {device.device.address}") signal = libmetawear.mbl_mw_acc_get_acceleration_data_signal( device.device.board) libmetawear.mbl_mw_datasignal_subscribe(signal, None, device.callback) libmetawear.mbl_mw_acc_enable_acceleration_sampling( device.device.board) libmetawear.mbl_mw_acc_start(device.device.board) sleep(5.0) sleep(time_tests) for device in self.device_list: libmetawear.mbl_mw_acc_stop(device.device.board) libmetawear.mbl_mw_acc_disable_acceleration_sampling( device.device.board) signal = libmetawear.mbl_mw_acc_get_acceleration_data_signal( device.device.board) libmetawear.mbl_mw_datasignal_unsubscribe(signal) libmetawear.mbl_mw_debug_disconnect(device.device.board) logger.info_log(f"Stop device: {device.device.address}") if DEBUG_STREAM_ACC: start_debug() for s in self.device_list: if BATCH_STORE: self.strage.store(s.data) print("%s -> %d" % (s.device.address, s.samples)) end_debug()
def setup(self): libmetawear.mbl_mw_settings_set_connection_parameters( self.device.board, 7.5, 7.5, 0, 6000) sleep(1.5) e = Event() def processor_created(context, pointer): self.processor = pointer e.set() fn_wrapper = cbindings.FnVoid_VoidP_VoidP(processor_created) acc = libmetawear.mbl_mw_acc_get_acceleration_data_signal( self.device.board) gyro = libmetawear.mbl_mw_gyro_bmi160_get_rotation_data_signal( self.device.board) signals = (c_void_p * 1)() signals[0] = gyro libmetawear.mbl_mw_dataprocessor_fuser_create(acc, signals, 1, None, fn_wrapper) e.wait() libmetawear.mbl_mw_datasignal_subscribe(self.processor, None, self.callback)
def setup(self): # ble settings libmetawear.mbl_mw_settings_set_connection_parameters( self.device.board, 7.5, 7.5, 0, 6000) sleep(1.5) # events e = Event() # processor callback fxn def processor_created(context, pointer): self.processor = pointer e.set() # processor fxn ptr fn_wrapper = cbindings.FnVoid_VoidP_VoidP(processor_created) # get acc signal acc = libmetawear.mbl_mw_acc_get_acceleration_data_signal( self.device.board) # get gyro signal - MMRl, MMR, MMc ONLY #gyro = libmetawear.mbl_mw_gyro_bmi160_get_rotation_data_signal(self.device.board) # get gyro signal - MMRS ONLY gyro = libmetawear.mbl_mw_gyro_bmi270_get_rotation_data_signal( self.device.board) # create signals variable signals = (c_void_p * 1)() signals[0] = gyro # create acc + gyro signal fuser libmetawear.mbl_mw_dataprocessor_fuser_create(acc, signals, 1, None, fn_wrapper) # wait for fuser to be created e.wait() # subscribe to the fused signal libmetawear.mbl_mw_datasignal_subscribe(self.processor, None, self.callback)
def passthrough_created(self, context, signal): # stream passthrough data print(signal) print(context) self.passthrough_proc = signal libmetawear.mbl_mw_datasignal_subscribe(signal, None, self.callback) print("stream passthrough data") e.set()
def timer_created(timer): global bsignal bsignal = libmetawear.mbl_mw_settings_get_battery_state_data_signal(device.board) libmetawear.mbl_mw_datasignal_subscribe(bsignal, batt_handler_fn) libmetawear.mbl_mw_event_record_commands(timer) libmetawear.mbl_mw_datasignal_read(bsignal) libmetawear.mbl_mw_event_end_record(timer, getStatusFn_handler_fn) libmetawear.mbl_mw_timer_start(timer)
def setup(self): # set BLE connection params (min connect interval, max interval, # latency, timeout) all in milliseconds libmetawear.mbl_mw_settings_set_connection_parameters( self.device.board, 7.5, 7.5, 0, 6000) # set BLE advertising strength (higher strength = higher power consumption # but theoretically better connectivity) libmetawear.mbl_mw_settings_set_tx_power(self.device.board, 4) sleep(1.5) e = Event() def processor_created(context, pointer): self.processor = pointer e.set() fn_wrapper = metacbindings.FnVoid_VoidP_VoidP(processor_created) # set accelerometer to 100Hz sampling rate and range to +/- 16 g's libmetawear.mbl_mw_acc_set_odr(s.device.board, 100.0) libmetawear.mbl_mw_acc_set_range(s.device.board, 16.0) libmetawear.mbl_mw_acc_write_acceleration_config(s.device.board) # set gyro to 100Hz sampling rate and +/- 1000 deg/sec. libmetawear.mbl_mw_gyro_bmi160_set_odr(s.device.board, MBL_MW_GYRO_BMI160_ODR_100Hz) libmetawear.mbl_mw_gyro_bmi160_set_range( s.device.board, MBL_MW_GYRO_BMI160_RANGE_1000dps) libmetawear.mbl_mw_gyro_bmi160_write_config(s.device.board) # get pointers referencing the acc and gyro data signals acc = libmetawear.mbl_mw_acc_get_acceleration_data_signal( self.device.board) gyro = libmetawear.mbl_mw_gyro_bmi160_get_rotation_data_signal( self.device.board) signals = (c_void_p * 1)() signals[0] = gyro # //libmetawear.mbl_mw_dataprocessor_accounter_create(signals, None, fn_wrapper) # chain two processors together (fuser and accounter) to get timestamped acc+gyro data # create a fuser "data processor" which packages the acc and gyro signals into same packets before sending fuser = create_voidp( lambda fn: libmetawear.mbl_mw_dataprocessor_fuser_create( acc, signals, 1, None, fn), resource="fuser", event=e) # accounter processor adds correct epoch data to BLE packets, necessary for timestamping stream-mode data accounter = create_voidp( lambda fn: libmetawear.mbl_mw_dataprocessor_accounter_create( fuser, None, fn), resource="accounter", event=e) # //libmetawear.mbl_mw_datasignal_subscribe(self.processor, None, self.callback) libmetawear.mbl_mw_datasignal_subscribe(accounter, None, self.callback)
def setup(self): #Set up file self.file.write( "Time, Time from start (s), Acc x, Acc y, Acc z, Gyro x, Gyro y, Gyro z, Mag x, Mag y, Mag z \n" ) #Set up board libmetawear.mbl_mw_settings_set_connection_parameters( self.device.board, 7.5, 7.5, 0, 6000) #Acceleration sampling frequency libmetawear.mbl_mw_acc_set_odr(s.device.board, 100.0) #fastest frequency is 400 Hz #range of acceleration libmetawear.mbl_mw_acc_set_range(s.device.board, 16.0) #write acceleration config libmetawear.mbl_mw_acc_write_acceleration_config(s.device.board) #Gyro sampling frequency libmetawear.mbl_mw_gyro_bmi160_set_odr(self.device.board, 8) #9 = 200Hz, 8 = 100Hz #Gyro range libmetawear.mbl_mw_gyro_bmi160_set_range( self.device.board, 0) #0 = 2000 dps, 1 = 1000 dps #Write gyro config libmetawear.mbl_mw_gyro_bmi160_write_config(self.device.board) libmetawear.mbl_mw_mag_bmm150_set_preset(self.device.board, 3) sleep(1.5) e = Event() def processor_created(context, pointer): self.processor = pointer e.set() fn_wrapper = cbindings.FnVoid_VoidP_VoidP(processor_created) acc = libmetawear.mbl_mw_acc_get_acceleration_data_signal( self.device.board) gyro = libmetawear.mbl_mw_gyro_bmi160_get_rotation_data_signal( self.device.board) mag = libmetawear.mbl_mw_mag_bmm150_get_b_field_data_signal( self.device.board) signals = (c_void_p * 2)() signals[0] = gyro signals[1] = mag libmetawear.mbl_mw_dataprocessor_fuser_create(acc, signals, 2, None, fn_wrapper) e.wait() libmetawear.mbl_mw_datasignal_subscribe(self.processor, None, self.callback)
def setDevice(mmr): libmetawear.mbl_mw_settings_set_connection_parameters( mmr.device.board, 7.5, 7.5, 0, 6000) sleep(1.5) # Get the signal from i2c communication # (device.board address, the size of data(byte), id : Numerical value identifying the data) mmr.i2c_signal = libmetawear.mbl_mw_i2c_get_data_signal( mmr.device.board, 3, 0xa) # Get the signal from Acceleration acc_signal = libmetawear.mbl_mw_acc_get_acceleration_data_signal( mmr.device.board) # get the signal from Gyro gyro_signal = libmetawear.mbl_mw_gyro_bmi160_get_rotation_data_signal( mmr.device.board) # Subscribe the i2c signal # (i2c signal value, context(Pointer to additional data for the call back function # , Callback function to handle data received from the signal)) libmetawear.mbl_mw_datasignal_subscribe(mmr.i2c_signal, None, mmr.callback_i2c) # Subscribe the acc acc_signal # libmetawear.mbl_mw_datasignal_subscribe(acc_signal, None, mmr.callback_acc) # Subscribe the gyro gyro acc_signal # libmetawear.mbl_mw_datasignal_subscribe(gyro_signal, None, mmr.callback_gyro) # device_addr = 7bit(the slave device address) + 1bit(W : 0 / R : 1) # Parameter : (device address, register address : CAP DATA REGISTER(0x01)) # libmetawear.mbl_mw_i2c_write(mmr.device.board, AD7745_ADDR_WRITE, RESET_ADDR, value, 1) # Setup the configuration for I2C Communication libmetawear.mbl_mw_i2c_write(mmr.device.board, AD7745_ADDR, REG_CAP_SETUP, c_uint8(CAP_SETUP_PROP), 1) sleep(0.5) libmetawear.mbl_mw_i2c_write(mmr.device.board, AD7745_ADDR, REG_EXC_SETUP, c_uint8(EXC_SETUP_PROP), 1) sleep(0.5) libmetawear.mbl_mw_i2c_write(mmr.device.board, AD7745_ADDR, REG_CONFIGURATION, c_uint8(CONFIGURATION_PROP), 1) sleep(0.5) libmetawear.mbl_mw_i2c_write(mmr.device.board, AD7745_ADDR, REG_CAP_DAC_A, c_uint8(CAP_DAC_A_PROP), 1) sleep(0.5)
def run(self): try: self.euler_signal = libmetawear.mbl_mw_sensor_fusion_get_data_signal(self.board, SensorFusionData.EULER_ANGLE) libmetawear.mbl_mw_datasignal_subscribe(self.euler_signal, None, self.euler_callback) libmetawear.mbl_mw_sensor_fusion_enable_data(self.board, SensorFusionData.EULER_ANGLE) libmetawear.mbl_mw_sensor_fusion_set_mode(self.board, SensorFusionMode.NDOF) libmetawear.mbl_mw_sensor_fusion_write_config(self.board) libmetawear.mbl_mw_sensor_fusion_start(self.board) self.e.wait() input("") except KeyboardInterrupt as e: print (e) self.close() sys.exit()
def calibrate(self): e = Event() def calibration_data_handler(ctx, board, pointer): print("calibration data: %s" % (pointer.contents)) libmetawear.mbl_mw_sensor_fusion_write_calibration_data( board, pointer) libmetawear.mbl_mw_memory_free(pointer) e.set() def calibration_handler(ctx, pointer): value = parse_value(pointer) print("state: %s" % (value)) if (value.accelrometer >= Const.SENSOR_FUSION_CALIBRATION_ACCURACY_HIGH and value.gyroscope >= Const.SENSOR_FUSION_CALIBRATION_ACCURACY_HIGH and value.magnetometer >= Const.SENSOR_FUSION_CALIBRATION_ACCURACY_HIGH): libmetawear.mbl_mw_sensor_fusion_read_calibration_data( self.device.board, None, fn_wrapper_01) else: sleep(1.0) libmetawear.mbl_mw_datasignal_read(signal) fn_wrapper_01 = FnVoid_VoidP_VoidP_CalibrationDataP( calibration_data_handler) fn_wrapper_02 = FnVoid_VoidP_DataP(calibration_handler) signal = libmetawear.mbl_mw_sensor_fusion_calibration_state_data_signal( self.device.board) libmetawear.mbl_mw_sensor_fusion_set_mode(self.device.board, SensorFusionMode.NDOF) libmetawear.mbl_mw_sensor_fusion_write_config(self.device.board) libmetawear.mbl_mw_datasignal_subscribe(signal, None, fn_wrapper_02) libmetawear.mbl_mw_sensor_fusion_start(self.device.board) libmetawear.mbl_mw_datasignal_read(signal) e.wait() sleep(1.0) libmetawear.mbl_mw_sensor_fusion_stop(self.device.board) libmetawear.mbl_mw_datasignal_unsubscribe(signal) e.clear()
def setup(self): libmetawear.mbl_mw_settings_set_connection_parameters( self.device.board, 7.5, 7.5, 0, 6000) sleep(1.5) e = Event() def processor_created(context, pointer): self.processor = pointer e.set() fn_wrapper = cbindings.FnVoid_VoidP_VoidP(processor_created) acc = libmetawear.mbl_mw_acc_get_acceleration_data_signal( self.device.board) libmetawear.mbl_mw_dataprocessor_average_create( acc, 4, None, fn_wrapper) e.wait() libmetawear.mbl_mw_datasignal_subscribe(self.processor, None, self.callback)
def setup(self): libmetawear.mbl_mw_sensor_fusion_set_mode(self.device.board, SensorFusionMode.IMU_PLUS) libmetawear.mbl_mw_sensor_fusion_set_acc_range( self.device.board, SensorFusionAccRange._4G) libmetawear.mbl_mw_sensor_fusion_set_gyro_range( self.device.board, SensorFusionGyroRange._1000DPS) libmetawear.mbl_mw_sensor_fusion_write_config(self.device.board) AccSignal = libmetawear.mbl_mw_sensor_fusion_get_data_signal( self.device.board, SensorFusionData.LINEAR_ACC) gpioSignal = libmetawear.mbl_mw_gpio_get_pin_monitor_data_signal( self.device.board, 0) resetSignal = libmetawear.mbl_mw_gpio_get_pin_monitor_data_signal( self.device.board, 1) libmetawear.mbl_mw_datasignal_subscribe(AccSignal, None, self.callback) libmetawear.mbl_mw_datasignal_subscribe(gpioSignal, None, self.gpioCallback) libmetawear.mbl_mw_datasignal_subscribe(resetSignal, None, self.resetCallback) libmetawear.mbl_mw_gpio_set_pull_mode(self.device.board, 0, GpioPullMode.UP) libmetawear.mbl_mw_gpio_set_pull_mode(self.device.board, 1, GpioPullMode.UP) libmetawear.mbl_mw_gpio_set_pin_change_type(self.device.board, 0, GpioPinChangeType.ANY) libmetawear.mbl_mw_gpio_set_pin_change_type(self.device.board, 1, GpioPinChangeType.FALLING)
def DevRun(self): try: ## Retrieve Sensor Data? ## self.euler_signal = libmetawear.mbl_mw_sensor_fusion_get_data_signal( self.board, SensorFusionData.EULER_ANGLE) ## View Data Directly - Removed ## #self.euler_callback = FnVoid_VoidP_DataP(lambda context,data:print("epoch: %s, euler %s\n" % (data.contents.epoch, parse_value(data)))) ## From initi function ## self.euler_callback = FnVoid_VoidP_DataP(self.data_handler) ## All required for Data Extraction? ## libmetawear.mbl_mw_datasignal_subscribe(self.euler_signal, None, self.euler_callback) libmetawear.mbl_mw_sensor_fusion_enable_data( self.board, SensorFusionData.EULER_ANGLE) libmetawear.mbl_mw_sensor_fusion_set_mode(self.board, SensorFusionMode.NDOF) libmetawear.mbl_mw_sensor_fusion_write_config(self.board) libmetawear.mbl_mw_sensor_fusion_start(self.board) #self.e.wait() # what is this for ? ? - removed #input('') # what is this for ? ? - Does nothing ## Catch ANY errors ## except OSError as err: print("OS ERROR {}".format(err)) self.DevClose() print("Device closed properly...") sys.exit() except ValueError: print("Error with variable...") self.DevClose() print("Device closed properly...") sys.exit() except: print("Unexpected Error:", sys.exc_info()[0]) self.DevClose() print("Device closed properly...") sys.exit()
def run(self): try: self.euler_signal = libmetawear.mbl_mw_sensor_fusion_get_data_signal( self.board, SensorFusionData.EULER_ANGLE) self.euler_callback = FnVoid_VoidP_DataP( lambda context, data: print("epoch: %s, euler %s\n" % ( data.contents.epoch, parse_value(data)))) libmetawear.mbl_mw_datasignal_subscribe(self.euler_signal, None, self.euler_callback) libmetawear.mbl_mw_sensor_fusion_enable_data( self.board, SensorFusionData.EULER_ANGLE) libmetawear.mbl_mw_sensor_fusion_set_mode(self.board, SensorFusionMode.NDOF) libmetawear.mbl_mw_sensor_fusion_write_config(self.board) libmetawear.mbl_mw_sensor_fusion_start(self.board) input('') except Exception as e: print("RUN ERROR - {}".format(e)) self.close() sys.exit()
def setup(self): # s represents a device's MAC address for s in self.states: # Device configuration print("Configuring device...") # Not sure what these parameters are for, but they're synchronized with the rest of the settings. libmetawear.mbl_mw_settings_set_connection_parameters( s.device.board, 7.5, 7.5, 0, 6000) # Acceleration libmetawear.mbl_mw_acc_set_odr(s.device.board, 25.0) # 25 Hz data collection rate libmetawear.mbl_mw_acc_set_range(s.device.board, 16.0) # Unsure libmetawear.mbl_mw_acc_write_acceleration_config( s.device.board) # Save to the board's configuration signal_acceleration = libmetawear.mbl_mw_acc_get_acceleration_data_signal( s.device.board) libmetawear.mbl_mw_datasignal_subscribe(signal_acceleration, s.callback_accel) libmetawear.mbl_mw_acc_enable_acceleration_sampling(s.device.board) # Gyrometer libmetawear.mbl_mw_gyro_bmi160_set_odr(s.device.board, 6) # 6 is index for 25 Hz libmetawear.mbl_mw_gyro_bmi160_write_config(s.device.board) signal_gyro = libmetawear.mbl_mw_gyro_bmi160_get_rotation_data_signal( s.device.board) libmetawear.mbl_mw_datasignal_subscribe(signal_gyro, s.callback_gyro) libmetawear.mbl_mw_gyro_bmi160_enable_rotation_sampling( s.device.board) # Magnometer libmetawear.mbl_mw_mag_bmm150_configure(s.device.board, 1, 1, 6) # 6 is index for 25 Hz signal_mag = libmetawear.mbl_mw_mag_bmm150_get_b_field_data_signal( s.device.board) libmetawear.mbl_mw_datasignal_subscribe(signal_mag, s.callback_mag) # Run LED - Stays green until IMUs / system starts with a pulse pattern = LedPattern(repeat_count=Const.LED_REPEAT_INDEFINITELY) libmetawear.mbl_mw_led_load_preset_pattern(byref(pattern), LedPreset.SOLID) libmetawear.mbl_mw_led_write_pattern(s.device.board, byref(pattern), LedColor.GREEN) libmetawear.mbl_mw_led_play(s.device.board) return
import sys device = MetaWear('FB:81:71:31:92:7A') device.connect() # Callback function to process/parse the battery data def data_handler(self, ctx, data): print("%s -> %s" % (self.device.address, parse_value(data))) callback = FnVoid_VoidP_DataP(data_handler) print("Configuring device") libmetawear.mbl_mw_settings_set_connection_parameters(device.board, 7.5, 7.5, 0, 6000) battery_signal = libmetawear.mbl_mw_settings_get_battery_state_data_signal( device.board) libmetawear.mbl_mw_datasignal_subscribe(battery_signal, None, callback) sleep(1.0) libmetawear.mbl_mw_datasignal_read(battery_signal) sleep(5.0) libmetawear.mbl_mw_datasignal_unsubscribe(battery_signal) libmetawear.mbl_mw_debug_disconnect(device.board) device.on_disconnect = lambda status: print("we are disconnected!") device.disconnect()
d.connect() print("Connected to " + d.address) states.append(State(d)) for s in states: print("Configuring device") libmetawear.mbl_mw_settings_set_connection_parameters( s.device.board, 1.5, 1.5, 0, 6000) libmetawear.mbl_mw_gyro_bmi160_set_odr(s.device.board, AccBmi160Odr._50Hz) libmetawear.mbl_mw_gyro_bmi160_set_range(s.device.board, AccBoschRange._125dps) libmetawear.mbl_mw_gyro_bmi160_write_config(s.device.board) signal = libmetawear.mbl_mw_gyro_bmi160_get_rotation_data_signal( s.device.board) libmetawear.mbl_mw_datasignal_subscribe(signal, None, s.callback) libmetawear.mbl_mw_gyro_bmi160_enable_rotation_sampling(s.device.board) libmetawear.mbl_mw_gyro_bmi160_start(s.device.board) sleep(10.0) for s in states: libmetawear.mbl_mw_gyro_bmi160_stop(s.device.board) libmetawear.libmetawear.mbl_mw_gyro_bmi160_disable_rotation_sampling( s.device.board) signal = libmetawear.mbl_mw_gyro_bmi160_get_rotation_data_signal( s.device.board) libmetawear.mbl_mw_datasignal_unsubscribe(signal) libmetawear.mbl_mw_debug_disconnect(s.device.board)
# setup acc #libmetawear.mbl_mw_acc_set_odr(s.device.board, 50.0) # Generic call libmetawear.mbl_mw_acc_bmi270_set_odr( s.device.board, AccBmi270Odr._50Hz) # BMI 270 specific call libmetawear.mbl_mw_acc_bosch_set_range(s.device.board, AccBoschRange._4G) libmetawear.mbl_mw_acc_write_acceleration_config(s.device.board) # setup gyro libmetawear.mbl_mw_gyro_bmi270_set_range(s.device.board, GyroBoschRange._1000dps) libmetawear.mbl_mw_gyro_bmi270_set_odr(s.device.board, GyroBoschOdr._50Hz) libmetawear.mbl_mw_gyro_bmi270_write_config(s.device.board) # get acc and subscribe acc = libmetawear.mbl_mw_acc_get_acceleration_data_signal(s.device.board) libmetawear.mbl_mw_datasignal_subscribe(acc, None, s.accCallback) # get gyro and subscribe gyro = libmetawear.mbl_mw_gyro_bmi270_get_rotation_data_signal( s.device.board) libmetawear.mbl_mw_datasignal_subscribe(gyro, None, s.gyroCallback) # start acc libmetawear.mbl_mw_acc_enable_acceleration_sampling(s.device.board) libmetawear.mbl_mw_acc_start(s.device.board) # start gyro libmetawear.mbl_mw_gyro_bmi270_enable_rotation_sampling(s.device.board) libmetawear.mbl_mw_gyro_bmi270_start(s.device.board) # sleep
print("\nConnected") libmetawear.mbl_mw_gpio_set_pull_mode(device.board, 0, 1) #0 = pull up libmetawear.mbl_mw_gpio_set_pull_mode(device.board, 1, 1) #1 = pull down libmetawear.mbl_mw_gpio_set_pull_mode(device.board, 2, 1) #2 = float libmetawear.mbl_mw_gpio_set_pull_mode(device.board, 3, 1) libmetawear.mbl_mw_gpio_set_pull_mode(device.board, 4, 0) libmetawear.mbl_mw_gpio_set_pull_mode(device.board, 5, 0) clear_outputs() #cleans ungraceful shutdown print("configured pins") #subscribe to gpio inputs signal1 = libmetawear.mbl_mw_gpio_get_digital_input_data_signal(device.board, 4) libmetawear.mbl_mw_datasignal_subscribe(signal1, None, libmetawear.callback1) signal2 = libmetawear.mbl_mw_gpio_get_digital_input_data_signal(device.board, 5) libmetawear.mbl_mw_datasignal_subscribe(signal2, None, libmetawear.callback2) print("subscribed listener\n") #starting reaction testing while len(motorArray): #global motorArray sleep(random.randrange(1,10)) #random delay vibration j = random.randrange(0,len(motorArray)) #select random motor if motorArray[j] == 4: reaction_trick(motorArray[j]) else:
e.set() # while(s.processor is None): print("Trying to create processor...") e = Event() fn_wrapper = FnVoid_VoidP_VoidP(processor_created) libmetawear.mbl_mw_dataprocessor_accounter_create(signal, None, fn_wrapper) e.wait() input("Press enter to start streaming...") # libmetawear.mbl_mw_datasignal_subscribe(signal, None, s.callback) try: libmetawear.mbl_mw_datasignal_subscribe(s.processor, None, s.callback) except OSError: raise OSError("Processor pointer unassignable...reconnect") except: raise ValueError("Unexpected Error...") libmetawear.mbl_mw_gyro_bmi160_enable_rotation_sampling(s.device.board) libmetawear.mbl_mw_gyro_bmi160_start(s.device.board) input("Press enter to stop streaming...") # for s in states: # libmetawear.mbl_mw_acc_stop(s.device.board) # libmetawear.mbl_mw_acc_disable_acceleration_sampling(s.device.board) # signal = libmetawear.mbl_mw_acc_get_acceleration_data_signal(s.device.board)
d = MetaWear(address) d.connect() print("Connected") print("Setting up Device") libmetawear.mbl_mw_settings_set_connection_parameters(d.board, 7.5, 7.5, 0, 6000) Long = LedPattern(pulse_duration_ms=1000, high_time_ms=500, high_intensity=16, low_intensity=16, repeat_count=Const.LED_REPEAT_INDEFINITELY) sleep(1.0) # Collecting GPIO and Switch Data switch = libmetawear.mbl_mw_switch_get_state_data_signal(d.board) GPIO = libmetawear.mbl_mw_gpio_get_analog_input_data_signal(d.board, 1, 0) GPIO_logger = create_voidp(lambda fn: libmetawear.mbl_mw_datasignal_log(GPIO, None, fn), resource = "logger") libmetawear.mbl_mw_datasignal_subscribe(switch, None, switch_callback) timer = create_voidp(lambda fn: libmetawear.mbl_mw_timer_create_indefinite(d.board, 1000, 0, None, fn), resource = "timer", event = e) #sampling (ms) libmetawear.mbl_mw_event_record_commands(timer) libmetawear.mbl_mw_datasignal_read(GPIO) libmetawear.mbl_mw_datasignal_read(switch) create_voidp_int(lambda fn: libmetawear.mbl_mw_event_end_record(timer, None, fn), event = e) # Logging Sensor Data try: libmetawear.mbl_mw_led_write_pattern(d.board, byref(Long), LedColor.GREEN) libmetawear.mbl_mw_led_play(d.board) sleep(1.0) libmetawear.mbl_mw_led_stop_and_clear(d.board) print("Start Logging")
d = MetaWear(maclist[1]) d.connect() print("Connected to GYO device at MAC:" + d.address) g=gState(d) sleep(0.5) print("configuring device..........") libmetawear.mbl_mw_settings_set_connection_parameters(a.device.board, 7.5, 7.5, 0, 6000) libmetawear.mbl_mw_acc_set_odr(a.device.board, 25.0); libmetawear.mbl_mw_acc_set_range(a.device.board, 16.0); libmetawear.mbl_mw_acc_write_acceleration_config(a.device.board); asignal = libmetawear.mbl_mw_acc_get_acceleration_data_signal(a.device.board) libmetawear.mbl_mw_datasignal_subscribe(asignal, a.callback) libmetawear.mbl_mw_acc_enable_acceleration_sampling(a.device.board); libmetawear.mbl_mw_acc_start(a.device.board); print("ACC config finished") libmetawear.mbl_mw_settings_set_connection_parameters(g.device.board, 7.5, 7.5, 0, 6000) libmetawear.mbl_mw_gyro_bmi160_set_odr(g.device.board, GyroBmi160Odr._25Hz); libmetawear.mbl_mw_gyro_bmi160_set_range(g.device.board, GyroBmi160Range._500dps) libmetawear.mbl_mw_gyro_bmi160_write_config(g.device.board) gsignal = libmetawear.mbl_mw_gyro_bmi160_get_rotation_data_signal(g.device.board) libmetawear.mbl_mw_datasignal_subscribe(gsignal, g.callback) libmetawear.mbl_mw_gyro_bmi160_enable_rotation_sampling(g.device.board) libmetawear.mbl_mw_gyro_bmi160_start(g.device.board)
libmetawear.mbl_mw_sensor_fusion_read_calibration_data( device.board, None, fn_wrapper_01) else: sleep(1.0) libmetawear.mbl_mw_datasignal_read(signal) # calbration handle fxn ptr fn_wrapper_02 = FnVoid_VoidP_DataP(calibration_handler) # setup sensor fusion config libmetawear.mbl_mw_sensor_fusion_set_mode(device.board, SensorFusionMode.NDOF) libmetawear.mbl_mw_sensor_fusion_write_config(device.board) # subscribe to the calibration sensor fusion signal libmetawear.mbl_mw_datasignal_subscribe(signal, None, fn_wrapper_02) # start libmetawear.mbl_mw_sensor_fusion_start(device.board) # read libmetawear.mbl_mw_datasignal_read(signal) # wait for event e.wait() print("Disconnecting") e.clear() device.on_disconnect = lambda s: e.set() # stop libmetawear.mbl_mw_sensor_fusion_stop(device.board)
libmetawear.mbl_mw_settings_set_connection_parameters(mmr.device.board, 7.5, 7.5, 0, 6000) sleep(1.5) #Get the signal from i2c communication #(device.board address, the size of data(byte), id : Numerical value identifying the data) i2c_signal = libmetawear.mbl_mw_i2c_get_data_signal(mmr.device.board, 3, 0xa) #Get the signal from Acceleration acc_signal = libmetawear.mbl_mw_acc_get_acceleration_data_signal(mmr.device.board) #get the signal from Gyro gyro_signal = libmetawear.mbl_mw_gyro_bmi160_get_rotation_data_signal(mmr.device.board) #Subscribe the i2c signal #(i2c signal value, context(Pointer to additional data for the call back function # , Callback function to handle data received from the signal)) libmetawear.mbl_mw_datasignal_subscribe(i2c_signal, None, mmr.callback_i2c) #libmetawear.mbl_mw_datasignal_subscribe(acc_signal, None, mmr.callback_acc) #libmetawear.mbl_mw_datasignal_subscribe(gyro_signal, None, mmr.callback_gyro) #Subscribe the acc acc_signal #libmetawear.mbl_mw_datasignal_subscribe(acc_signal, None, mmr.callback_acc) #Subscribe the gyro gyro acc_signal #libmetawear.mbl_mw_datasignal_subscribe(gyro_signal, None, mmr.callback_gyro) #device_addr = 7bit(the slave device address) + 1bit(W : 0 / R : 1) #Parameter : (device address, register address : CAP DATA REGISTER(0x01)) #libmetawear.mbl_mw_i2c_write(mmr.device.board, AD7745_ADDR_WRITE, RESET_ADDR, value, 1)
libmetawear.mbl_mw_settings_set_connection_parameters( device.board, 7.5, 7.5, 0, 6000) raw = libmetawear.mbl_mw_metawearboard_get_model_name(device.board) sleep(1.0) model_name = cast(raw, c_char_p).value.decode("ascii") print("model=" + model_name) # Stream data at 12.5Hz libmetawear.mbl_mw_acc_set_range(device.board, 16.0) libmetawear.mbl_mw_acc_set_odr(device.board, 12.5) libmetawear.mbl_mw_acc_write_acceleration_config(device.board) msignal = libmetawear.mbl_mw_acc_get_acceleration_data_signal(device.board) libmetawear.mbl_mw_datasignal_subscribe(msignal, data_handler_fn) libmetawear.mbl_mw_acc_enable_acceleration_sampling(device.board) libmetawear.mbl_mw_acc_start(device.board) print("Stream started") wdvar = Watchdog(timeout, mywatchdog) sleep(float(difftime)) wdvar.stop() # Stop the stream libmetawear.mbl_mw_acc_stop(device.board) libmetawear.mbl_mw_acc_disable_acceleration_sampling(device.board) libmetawear.mbl_mw_datasignal_unsubscribe(msignal) sleep(1.0) conn.close() sleep(1.0)