首页 > 解决方案 > 从传输不同数量的样本/秒 Rpi python 的 2 个不同设备获取读数

问题描述

我有 2 台设备。一台激光测距仪以 20Hz 串行传输样本,一台 IMU 在激光传输一个样本时传输多个样本。问题是 python 将保持在设备 1 的 readline 直到它获得读数,同时我可以从 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 来处理读数。有没有人有异步的经验?我怎样才能确保没有读数被忽略?我还必须为所有读数制作一个共同的时间轴。你有什么建议吗?与 I2C 通信也是一种可能。

标签: pythonraspberry-pi3

解决方案


推荐阅读