Esempio n. 1
0
File: gui.py Progetto: rdmejia/tesis
    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
Esempio n. 2
0
    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)
Esempio n. 3
0
    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
Esempio n. 4
0
    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)
Esempio n. 5
0
    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()
Esempio n. 6
0
    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()
Esempio n. 7
0
    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()
Esempio n. 10
0
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)
Esempio n. 11
0
    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)
Esempio n. 12
0
    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)
Esempio n. 13
0
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)
Esempio n. 14
0
	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()	
Esempio n. 15
0
    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()
Esempio n. 16
0
    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)
Esempio n. 17
0
    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)
Esempio n. 18
0
    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()
Esempio n. 19
0
    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()
Esempio n. 20
0
    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
Esempio n. 21
0
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)
Esempio n. 23
0
    # 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
Esempio n. 24
0
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:
Esempio n. 25
0
        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)
Esempio n. 26
0
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")
Esempio n. 27
0
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)
Esempio n. 28
0
        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)
Esempio n. 29
0
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)
Esempio n. 30
0
    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)