通过串行通信将数据从 Arduino 发送到 Pi
Send data from Arduino to Pi over 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 串行通信)。
实际上它在 Raspberry 上的效果似乎比在 arduino 上更好。
在你的 Arduino 输出上,加速度计的值实际上是 0,这没有意义,因为你总是有一个由于地球引力拉动的加速度,即使你的板子根本没有移动。
陀螺仪也一样,开机时初始位置,然后如果你移动它,值会改变,以后即使它是静止的,它也会保持这些位置。
从您提供的输出来看,Raspberry 似乎提供了正确的数据,而 Arduino 似乎有问题。
看来问题出在你的Arduino上。鉴于 arduino 的处理能力要低得多,我建议查看您的 arduino 设置。
一个原因可能是 I2C 总线上缺少上拉电阻。
一旦知道端口已准备好读取或写入,就可以使用 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
}
问题是什么,为什么我们需要这样做?
我最近购买了一块 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 串行通信)。
实际上它在 Raspberry 上的效果似乎比在 arduino 上更好。
在你的 Arduino 输出上,加速度计的值实际上是 0,这没有意义,因为你总是有一个由于地球引力拉动的加速度,即使你的板子根本没有移动。
陀螺仪也一样,开机时初始位置,然后如果你移动它,值会改变,以后即使它是静止的,它也会保持这些位置。
从您提供的输出来看,Raspberry 似乎提供了正确的数据,而 Arduino 似乎有问题。
看来问题出在你的Arduino上。鉴于 arduino 的处理能力要低得多,我建议查看您的 arduino 设置。
一个原因可能是 I2C 总线上缺少上拉电阻。
一旦知道端口已准备好读取或写入,就可以使用 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
}