通过串行通信将数据从Arduino发送到Pi

时间:2018-04-10 08:40:23

标签: c++ arduino raspberry-pi serial-communication

问题是什么?为什么我们需要这样做?

我最近购买了一块MPU6050分线板。我用我的Arduino Uno和我的Raspberry Pi 3尝试过它。

它为Raspberry提供了这个奇怪的输出(没有任何运动/稳定状态)!

InvenSense MPU-6050
Rpi start 2018
Output range : 68, error = 0
control ratio : 0, error = 0

MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 1944, 368, 15608
temperature: 30.576 degrees Celsius
gyro x,y,z : -34, -204, -247, 

MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 1952, 364, 15304
temperature: 30.435 degrees Celsius
gyro x,y,z : -38, -216, -274, 

MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 1864, 388, 15356
temperature: 30.482 degrees Celsius
gyro x,y,z : -34, -233, -278, 

MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 1888, 324, 15260
temperature: 30.576 degrees Celsius
gyro x,y,z : -14, -220, -261, 

同样,我尝试过使用Arduino,它运行正常。

MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 1, 4, 1
temperature: 30.4 degrees Celsius
gyro x,y,z : -3, -15, -7, 

MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 1, 4, 1
temperature: 30.4 degrees Celsius
gyro x,y,z : -3, -15, -7, 

MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 1, 4, 1
temperature: 30.5 degrees Celsius
gyro x,y,z : -3, -15, -7,

现在,我从Arduino那里得到了正确的解读。这是问题!

我不知道如何将适当的数据从Arduino发送到pi(USB串行通信)。

2 个答案:

答案 0 :(得分:0)

你的Raspberry似乎比你的arduino更好。

在您的Arduino输出上,加速度计的值几乎为0,这是没有意义的,因为即使您的电路板根本不移动,您也会因地球重力拉力而产生加速度。 / p>

对于陀螺仪来说,初始位置将处于加电状态,然后如果移动它,值将会改变,稍后即使它是静态的,也会保持这些位置。

从您提供的输出中,Raspberry似乎提供了正确的数据,而Arduino似乎有问题。

看来这个问题来自你的Arduino。鉴于arduino的处理能力要低得多,我建议你研究一下你的arduino设置。

一个原因可能是I2C总线上没有上拉电阻。

答案 1 :(得分:0)

一旦您知道端口已准备好读取或写入,就可以使用read()write()方法。或者,也可以调用readLine()readAll()便利方法。

如果不是一次读取所有数据,则剩余数据将在稍后可用,因为新的输入数据被附加到QSerialPort的内部读缓冲器。您可以使用setReadBufferSize()限制读取缓冲区的大小。

创建一个信号和插槽。 //做你的东西

//这是您问题的答案。从这样的qt读取数据(如下所示)。

if(serial -> canReadLine())
{
    QString str = serial -> readAll();

    int var = str.toInt(); // convert into int

    // Read data and print or use progressBar to print data
}