Проверка состояния устройства Bluetooth с Python и Windows - PullRequest
0 голосов
/ 10 июля 2019

Я относительно новичок в python и в целом в кодировании, так что терпите меня.

Я запускаю скрипт на python для получения данных от акселерометра (MPU6050) и их сохранения.У меня есть код приема / сохранения в цикле while, чтобы убедиться, что он может повторно подключиться к датчику, если по какой-то причине он отключается, но я столкнулся с проблемой, когда данные, напечатанные / сохраненные основной частью кода, не являютсяобновляется, когда датчик отключен, и поэтому вся эта информация бесполезна в течение всего времени, в течение которого датчик не работает.

Существует блок кода для сброса сеанса датчика каждые 5 минут, потому что если датчик не двигается в течение этого временидолго он переходит в спящий режим и перестает предоставлять данные.

Есть ли способ периодически проверять состояние подключения устройства Bluetooth с помощью Python с Windows?Если бы я мог это сделать, я мог бы быть уверен, что смогу избежать ненужных данных, и я бы знал, как долго сенсор не работал.

Я искал какую-либо информацию об этом, но, похоже, всесфокусируйтесь на Linux, а не на windows.

Любая помощь приветствуется, спасибо.

Код:

def main ():

while True:
    try:
        try:
            # Initialize data read sessions
            session = MotionTracker(bd_addr="20:19:03:12:18:36")
            session.start_read_data()
            session2 = MotionTracker(bd_addr="20:19:03:12:18:51")
            session2.start_read_data()

            # Define filenames of files to save and open for writing
            filename = 'data_S1.txt'
            save = open(filename,'a')
            filename2 = 'data_S2.txt'
            save2 = open(filename2,'a')

            # Initialize time
            time_start = dt.now()
            print("\n")
            while True:
                print("Sensor 1:",'{:^5}'.format(dt.now().strftime('%H:%M:%S.%f')))
                print("Angle: roll",'{:^5}'.format(int(session.ang_x)),"pitch:",'{:^5}'.format(int(session.ang_y)),"yaw:", '{:^5}'.format(int(session.ang_z)))
                print("AngVel: w_x:",'{:^5}'.format(int(session.angv_x)),"w_y:",'{:^5}'.format(int(session.angv_y)),"w_z:", '{:^5}'.format(int(session.angv_z)))
                print("Accel: a_x:",'{:^5}'.format(round(session.acc_x,2)),"a_y:",'{:^5}'.format(round(session.acc_y,2)),"a_z:",'{:^5}'.format(round(session.acc_z,2)))
                print("\n")
                print("Sensor 2:",'{:^5}'.format(dt.now().strftime('%H:%M:%S.%f')))
                print("Angle: roll",'{:^5}'.format(int(session2.ang_x)),"pitch:",'{:^5}'.format(int(session2.ang_y)),"yaw:", '{:^5}'.format(int(session2.ang_z)))
                print("AngVel: w_x:",'{:^5}'.format(int(session2.angv_x)),"w_y:",'{:^5}'.format(int(session2.angv_y)),"w_z:", '{:^5}'.format(int(session2.angv_z)))
                print("Accel: a_x:",'{:^5}'.format(round(session2.acc_x,2)),"a_y:",'{:^5}'.format(round(session2.acc_y,2)),"a_z:",'{:^5}'.format(round(session2.acc_z,2)))
                save.write("{}, {}, {}, {}, {}, {}, {}, {}, {}, {}\n".format(dt.now().strftime('%d:%m:%Y %H:%M:%S.%f'),session.ang_x,session.ang_y,session.ang_z,session.angv_x,session.angv_y,session.angv_z,session.acc_x,session.acc_y,session.acc_z))
                save2.write("{}, {}, {}, {}, {}, {}, {}, {}, {}, {}\n".format(dt.now().strftime('%d:%m:%Y %H:%M:%S.%f'),session2.ang_x,session2.ang_y,session2.ang_z,session2.angv_x,session2.angv_y,session2.angv_z,session2.acc_x,session2.acc_y,session2.acc_z))

                # Reset sessions if recording for greater than 5 minutes
                rec_dur = dt.now() - time_start
                if rec_dur.seconds > 300.:  #5 min in seconds
                    session.stop_read_data()
                    session2.stop_read_data()
                    time.sleep(0.2)
                    session = MotionTracker(bd_addr="20:19:03:12:18:36")
                    session.start_read_data()
                    session2 = MotionTracker(bd_addr="20:19:03:12:18:51")
                    session2.start_read_data()
                    time_start=dt.now()

                # Delay loop for 0.05  seconds (yields 20 Hz sampling)
                time.sleep(0.05)
                #os.system('clear')
        except OSError:
            save.close()
            pass

    except KeyboardInterrupt:
        session.stop_read_data()
        session2.stop_read_data()
        save.close()
        break

if name ==" main ": main ()

...