【发布时间】:2016-03-08 21:51:38
【问题描述】:
我正在为 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 位。但也注意到在带有 /dev/ttyACM0 的 Raspberry Pi 上的这种行为。我真的很想解决这个问题。我在 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
【问题讨论】:
-
我根本看不到该代码如何产生 any shell 输出。它没有打印语句。
-
@John 我认为他在谈论 Pi 上的输出,它可能连接在 COM5 上(我知道它至少可以与 Arduino 一起工作)。 @K到目前为止,您尝试了什么?快速的谷歌搜索显示了很多类似问题的结果,例如stackoverflow.com/questions/2301127/…
-
即便如此,发生的唯一输出是
s.write("#"),我看不出它如何转化为假定的给定输出。 -
@John,它连接到 COM5 的 arduino,但这无关紧要。在脚本中有很多打印语句。 arduino 使用来自传感器和 Windows 线路终端的数据回复主题标签。尽管接收到数据,但 readline() 或 read() 函数在调用时永远不会返回。
-
@whrrgarbl 我再次查看了您发布的链接...确实有很多类似的帖子,但我从未找到解决问题的帖子...我最喜欢的是“pySerial 无法在 Windows AMD64 上运行”或“计算机速度很快”我注意到在 Raspberry Pi B 上的 Raspbian Linux 上存在相同的行为。您可以了解很多关于 RPi 的信息,但它并不快.