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 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): # 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 init_device(self, device): print(f"Configuring device: {device.device.address}") # reset(device.device) libmetawear.mbl_mw_settings_set_connection_parameters( device.device.board, 7.5, 7.5, 0, 6000) sleep(1.5) libmetawear.mbl_mw_acc_set_odr(device.device.board, 25.0) libmetawear.mbl_mw_acc_set_range(device.device.board, 8.0) libmetawear.mbl_mw_acc_write_acceleration_config(device.device.board)
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 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
def setup(self): self.device.connect() 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) libmetawear.mbl_mw_acc_set_odr(self.device.board, self.freq) libmetawear.mbl_mw_acc_write_acceleration_config(self.device.board) 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)
print("Configuring device") try: print("Get and log acc signal") signal = libmetawear.mbl_mw_acc_get_acceleration_data_signal(d.board) logger = create_voidp( lambda fn: libmetawear.mbl_mw_datasignal_log(signal, None, fn), resource="acc_logger") print("Start logging") libmetawear.mbl_mw_logging_start(d.board, 0) print("Start acc") libmetawear.mbl_mw_acc_set_odr(d.board, 400.) libmetawear.mbl_mw_acc_write_acceleration_config(d.board) libmetawear.mbl_mw_acc_enable_acceleration_sampling(d.board) libmetawear.mbl_mw_acc_start(d.board) print("Logging data for 10s") time.sleep(10.0) print("Setop acc") libmetawear.mbl_mw_acc_stop(d.board) libmetawear.mbl_mw_acc_disable_acceleration_sampling(d.board) print("Stop logging") libmetawear.mbl_mw_logging_stop(d.board) print("Flush cache if MMS") libmetawear.mbl_mw_logging_flush_page(d.board)
print("Connected to ACC device at MAC:" + d.address) a=aState(d) sleep(0.5) 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)
# connect to device d = MetaWear("FC:A3:80:92:67:06") d.connect() print("Connected to " + d.address) states.append(State(d)) print("Configuring device") libmetawear.mbl_mw_settings_set_connection_parameters(states[0].device.board, 7.5, 7.5, 0, 6000) sleep(1.5) # start reading in acc data libmetawear.mbl_mw_acc_set_odr(states[0].device.board, 100.0) libmetawear.mbl_mw_acc_set_range(states[0].device.board, 16.0) libmetawear.mbl_mw_acc_write_acceleration_config(states[0].device.board) signal = libmetawear.mbl_mw_acc_get_acceleration_data_signal( states[0].device.board) libmetawear.mbl_mw_datasignal_subscribe(signal, None, states[0].callback) libmetawear.mbl_mw_acc_enable_acceleration_sampling(states[0].device.board) libmetawear.mbl_mw_acc_start(states[0].device.board) # continue running for number of seconds defined by user when running script sleep(int(sys.argv[1])) libmetawear.mbl_mw_acc_stop(states[0].device.board) libmetawear.mbl_mw_acc_disable_acceleration_sampling(states[0].device.board) # unsubscribe from stream and disconnect from device
#___________________________________________ ''' Configuring the device ''' #Starts the measures for s in states: #for each device print("\nConfiguring device...") libmetawear.mbl_mw_settings_set_connection_parameters( s.device.board, 7.5, 7.5, 0, 6000) sleep(1.5) #set the parameters for the measure libmetawear.mbl_mw_acc_set_odr( s.device.board, 50.0) #sets the output data rate (frequency, in Hz) libmetawear.mbl_mw_acc_set_range(s.device.board, 8.0) #sets the full scale range libmetawear.mbl_mw_acc_write_acceleration_config( s.device.board) #writes the acceleration settings to the board dataSignal = libmetawear.mbl_mw_acc_get_acceleration_data_signal( s.device.board ) #retrieves the data signal representing acceleration data libmetawear.mbl_mw_datasignal_subscribe( dataSignal, None, s.callback ) #subscribes to a data stream, processing messages with the given handler libmetawear.mbl_mw_acc_enable_acceleration_sampling( s.device.board) #enables acceleration sampling libmetawear.mbl_mw_acc_start( s.device.board) #switches the accelerometer to active mode print('Device ready') print('\nConfiguring the software...')