我一般对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()