Я относительно новичок в 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 ()