gpt4 book ai didi

python - 从 Arduino 到 Python 的连续数据流(读取线失败)

转载 作者:太空狗 更新时间:2023-10-30 03:05:41 25 4
gpt4 key购买 nike

我正在尝试不断地从我的 Arduino Nano 中读取数据通过 Python 脚本。但大多数时候,readline 要么会失败并抛出异常,要么会返回损坏的数据,例如丢失一个数字。

这是连接部分:

Arduino 代码:

void loop() {
// Send data only when you receive data:
if (Serial.available() > 0) {

// Check if it's the right signal.
if (Serial.read()=='S') {
// Send a string containing the rows and cols number.
send_rows_cols();

} // if(Serial.read()=='S')
else {
send_data();
} // END: else if( Serial.read()=='Y')
}// if(Serial.available() > 0)
}

send_rows_cols() 中,我使用的是 Serial.write,因为它可以工作,但在 send_data() 中我不得不使用Serial.println() 发送回数据。

Python 部分。这是在返回合法值之前我不得不使用的荒谬的绕过方法。

import serial
import time

locations=['/dev/ttyUSB0','/dev/ttyUSB1','/dev/ttyUSB2','/dev/ttyUSB3',
'/dev/ttyS0','/dev/ttyS1','/dev/ttyS2','/dev/ttyS3']

for device in locations:
try:
print "Trying...",device
arduino = serial.Serial(device, 9600)
break
except:
print "Failed to connect on",device

rows_cols =''

try:

while True:
arduino.write('S')
rows_cols = str(arduino.readline())
print len(rows_cols)
print rows_cols
if ( len(rows_cols)>3 ):
break

except:
print "Failed to send!"

到目前为止,它在一两个阅读行之后工作。这是负担得起的。不过后来,我不得不使用更疯狂的代码。从 Python 向 Arduino 发送一个字符,这样连接就不会中断,然后正如您所见,Arduino 必须等待该字符。在 Arduino 收到该字符后,它会发回我想要的数据(一串用逗号分隔的数字)。

最后一个 Python 部分是它从 Arduino 发送“Y”字符和读取行,一次又一次,直到没有异常或损坏的数据。这么多循环都是徒劳的。

我想要的是一种从我的 Arduino 连续获取数据的方法,而无需一直进行“握手”,并且数据不会一直是垃圾。

有这样的方法吗?也许是串行的超时选项?

最佳答案

您也没有打开 Arduino IDE 串行监视器,是吗?我花了一个“快乐”的晚上来调试我的“Python 到 Arduino 接口(interface)代码”,然后我才意识到我把它打开了并且它偶尔会吃掉字符:)

我当然使用了非常简单的 Serial.write()Serial.println() 代码以及 readline() 来运行一次持续数十分钟的连续“命令/响应”测试(数千行发送和接收)

关于python - 从 Arduino 到 Python 的连续数据流(读取线失败),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11303396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com