我正在尝试从Arduino打印串行数据,但我无法这样做。我试过的代码是这样的:
import serial
import time
s = serial.Serial('/dev/tty.usbmodemfd141',9600)
while 1:
if s.inWaiting():
val = s.readline(s.inWaiting())
print val
然而,在大约30行左右吐出后,我收到以下错误消息:
Traceback (most recent call last):
File "py_test.py", line 7, in <module>
val = s.readline(s.inWaiting())
File "build/bdist.macosx-10.8-intel/egg/serial/serialposix.py", line 460, in read
serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected?)
我想我正在使用inWaiting错误,但我不知道如何以任何其他方式使用它。
答案 0 :(得分:1)
您是否尝试在tryException块中包装readline?然后你可以传递SerialException。串行驱动程序报告接收缓冲区中的数据时可能会出现问题,在这种情况下,您的代码将继续运行。不是一个很好的解决方案,但它可能会引导您找到正确的解决方案。
try:
s.read(s.inWaiting())
except serial.serialutil.SerialException:
pass # or maybe print s.inWaiting() to identify out how many chars the driver thinks there is
答案 1 :(得分:0)
我相信你想使用函数read(),而不是readline()。您正在检索缓冲区中的字符数,它们不一定以换行符结尾
你的循环变为:
while 1:
if s.inWaiting():
val = s.read(s.inWaiting())
print val
答案 2 :(得分:0)
如果您只想打印来自串行设备的数据,您可以 只需使用 readline()即可。 首先使用打开()打开端口,然后您需要使用 readline()。
注意: / dev / ttyUSB0是linux的端口号,com0是windows
这是代码
import serial
BAUDRATE = 115200
device_name = "ttyUSB0"
tty = device_name
s = serial.Serial("/dev/" + tty, baudrate=BAUDRATE)
s.open()
print s
try:
while True:
line = s.readline() //after this you can give the sleep time also as time.sleep(1) before that import time module.
print line
finally:
s.close()