使用Python和Windows检查蓝牙设备状态

时间:2019-07-10 14:31:00

标签: python-3.x bluetooth windows-8.1 sensor pybluez

我一般对python和编码都比较陌生,所以请耐心等待。

我正在运行python脚本以从加速度计(MPU6050)接收数据并保存。我有一个while循环中的接收/保存代码,以确保它由于某种原因断开连接时可以重新连接到传感器,但是我遇到了一个问题,其中代码主体打印/保存的数据不正确当传感器断开连接时会进行更新,因此无论传感器何时处于关闭状态,所有这些信息都将无用。

有一段代码可以每5分钟重置一次传感器会话,因为如果传感器不移动这么长时间,它将进入睡眠状态并停止提供数据。

有没有一种方法可以在Windows上使用Python间歇性地检查蓝牙设备的连接状态?如果可以的话,我可以确定避免任何垃圾数据,并且知道传感器关闭了多长时间。

我一直在寻找有关此的任何信息,但似乎所有这些信息都集中在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

如果名称 ==“ 主要”:     main()

0 个答案:

没有答案