Получите показания с 2 разных устройств, которые передают разное количество сэмплов в секунду Rpi Python - PullRequest
1 голос
/ 10 ноября 2019

У меня 2 устройства. Одно лазерное устройство для измерения расстояния, которое передает образцы через последовательный порт на частоте 20 Гц, и одно устройство IMU, которое передает несколько образцов к тому времени, когда лазер передает один. Проблема в том, что python будет держать на readline для устройства 1, пока не получит показания, в то время как в то же время я мог бы получить несколько показаний из IMU. Вот код, который у меня есть:

#import RPi.GPIO as GPIO
from datetime import datetime
import time
import serial

# Device 1, Laser
ser1=serial.Serial('/dev/ttyUSB0',115200, timeout=0.1)

# Device 2, IMU
ser2=serial.Serial('/dev/ttyUSB1',115200, timeout=0.1)

# Create file
starttime = datetime.now()                        
filename = starttime.strftime("measurement/%Y%m%d_%H%M%S.dat")
header = "Time[s]\tDistance[cm]\n"
f = open(filename, 'w+')
f.write(header)

while True:

    # Get reading from laser
    reading = ser1.readline()
    now = datetime.now()
    t = (now - starttime).total_seconds()

    # Get reading from IMU
    reading2 = ser1.readline()
    now = datetime.now()
    t2 = (now - starttime).total_seconds()    

    # Append data to .dat file
    f = open(filename, 'a+')
    f.write(str(t)+'\t'+str(reading)+'\n') # Not saving readings from IMU in this example
    print(str(t)+'\t'+str(reading))

f.close()

Я хочу получить как можно больше показаний из IMU, когда у лазера новое показание. IMU настраивается по часам, но не лазер. Я думал о реализации asyncio для обработки показаний. У кого-нибудь есть опыт работы с asyncio? Как я могу убедиться, что никакие показания не будут проигнорированы? Я также должен сделать общую временную ось для всех чтений. У Вас есть какие-то предложения? Связь с I2C также возможна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...