pySerial非常奇怪的行为...代码在shell中执行但在脚本中不能执行

时间:2016-03-08 21:51:38

标签: python pyserial

我正在与pySerial斗争。简而言之......下面的代码在Python Shell中执行时效果很好......

>>> import serial
>>> s=serial.Serial("COM5", 9600)
>>> while(1):
       s.write("#")
       s.readline()

在shell中生成以下输出:

1L
'56.73\r\n'
1L
'56.73\r\n'

当在脚本中写入相同的代码时说“readSerial.py”,脚本将不会传输触发串行设备传输数据的主题标签,或者不会接收回复的数据。

我正在使用pySerial 3,但注意到与2.7相同的行为。在Win10上使用Python 2.7.10 64位。但是也注意到Raspberry Pi上使用/ dev / ttyACM0的这种行为。我真的想解决这个问题。我不是那种Python经验,所以这可能是一种疏忽。

检查硬件并进行双重检查。

谢谢,

KK

谢谢,但我真的知道如何从Python打印数据。问题实际上是pySerial。这是完整的代码,请不要在注释掉的代码中讨论错误。这些都不用担心。

#from numpy import array
#import matplotlib.animation as animation
import time
import serial as s

#data = array([])

Arduino = s.Serial("COM5", 9600)
i = 0

while (1):
    try:
         Arduino.write("#")
         time.sleep(.1)
         inString = Arduino.readline()
         data = float(inString)

         print i, ":", data
         i += 1

         time.sleep(1)

    except KeyboardInterrupt:
        break

Arduino.close()

但是就像说这不起作用。据我所知,readline()函数不返回。并且......通过设置tx超时使其返回真的没有意义。增加谜题;当代码被调试时(即步骤槽),它确实有效。

提前致谢,

KK

1 个答案:

答案 0 :(得分:1)

来自FAQ

  

示例适用于serial.tools.miniterm但不适用于脚本。

     

打开端口时会切换RTS和DTR线。这可能   导致连接设备上的某些处理或重置。在这样的   在紧接着调用write()之后,可能不会收到   设备。

     

在第一次写入()之前打开端口后的延迟   建议在这种情况下。例如。 a time.sleep(1)