pySerial程序无法正确读取串口数据

3

我在使用pySerial时遇到了问题,不知道从哪里开始寻找解决方法。 我的操作系统是64位的Windows Seven,使用的是Python 2.7.5(32位),已经安装了pySerial和Arduino(Arduino正常工作)。

我的Arduino代码如下:

// the setup routine runs once when you press reset:
void setup() {                
  // initialize the serial in 19200 baud rate
  Serial.begin(19200);     
}

// the loop routine runs over and over again forever:
void loop() {
  delay(1000);               // wait for a second
  Serial.print("hello");
}

我可以看到Arduino连接在COM8,当使用串口监视器时,我可以看到它的问候。

而我的PySerial代码如下:

import serial
import time

arduino = serial.Serial("COM8", 19200)
time.sleep(2)  

while True:
    print arduino.readline()

当我开始运行这个脚本时,程序正在运行,但我无法看到串行输出(我认为Python脚本中的配置是正确的,因为如果有错误 - 例如端口 - 它会崩溃)。
我不知道该怎么做才能找到解决方案。你可以帮助我吗?

1
我认为pySerial工作正常...这属于操作员错误... - Joran Beasley
是的,我也这么认为。但我不知道从哪里开始寻找答案 :( - mekoda
1个回答

6
你可以尝试在Arduino/C端使用println而不是print,或在Python端设置串口读取的超时时间。由于serial.readline()等待一个\n,而你从未使用print发送过这个字符,所以串口读取将一直等待超时。(但情况比这更复杂,值得阅读关于readline和EOL的文档)。如果这样做不起作用,至少将readline切换到read,并打印出您可能(或可能不)读取的每个字符,但不要通过等待readline需要的\n使它变得更加复杂。从演示文档中可以看到:在打开串口时请务必指定超时时间,否则如果没有接收到换行符,它可能会永远阻塞。此外,请注意,readlines()仅适用于超时。readlines()依赖于有超时并将其解释为EOF(文件结尾)。如果串口未正确打开,则会引发异常。

非常感谢您的帮助。我使用了另一个已经验证过的Arduino代码,但是我也没有得到预期的结果。我认为我的系统出了问题,但是我找不到原因在哪里... - mekoda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接