我正在尝试编写一个非常基本的脚本,这将允许我通过串口完全控制设备。我可以发送数据(我知道设备接收数据,在设备上打开屏幕可以让我看到输入出现)。
但我无法接收数据,屏幕打开,并通过屏幕输入数据我收到错误:
回溯(最近一次呼叫最后):文件" serialRec.py",第4行,in 对于ser中的行:File" /usr/lib/python2.7/dist-packages/serial/serialposix.py" ;,第456行, 读 引发SerialException('设备报告准备读取但没有返回数据(设备已断开连接?)') serial.serialutil.SerialException:device报告准备读取 但没有返回任何数据(设备已断开连接?)
如果我打开端口等待没有屏幕的消息,则没有错误。 我说的应用程序发送数据没问题......我该怎么办?我怎么才能读到这个?我在Ubuntu 12.04安装上运行这个脚本...屏幕在Ubuntu笔记本电脑被连接到的设备上工作正常
sys参数是:argv[1] = device (/dev/ttyUSB0)
和argv[2] = braud rate (e.g. 9600)
。
import serial
import sys
import time
def enterdata():
ser = serial.Serial(sys.argv[1], sys.argv[2])
scom = raw_input("type away:" )
incli = str(scom)
time.sleep(.2)
if (incli == "exit the app"):
print ("Exiting the data send, nothing was sent from the exit command")
else:
while True:
print ser.readline()
enterdata()
print ("Welcome to the serial CLI")
enterdata()
更新
我现在已经有了它的工作,但有限和丑陋的是它通过发送一个命令在多行上打印返回。虽然为此我会尝试一些事情。一旦我把它带到一个好地方,我会发布并分享一些不错的工作代码。
import serial
import sys
import time
def enterdata():
ser = serial.Serial(sys.argv[1], sys.argv[2])
scom = raw_input()
incli = str(scom)
if (incli == "exit the app"):
print ("Exiting the data send, nothing was sent from the exit command")
else:
ser.write(incli+"\r\n")
time.sleep(0.5)
while True:
data = ser.read(ser.inWaiting())
if (len(data) > 0):
for i in range(len(data)):
sys.stdout.write(data[i])
break
ser.close()
enterdata()
print ("Welcome to the serial CLI, hit enter to activate:")
enterdata()
这是我所做的改变,它有效。虽然它似乎总是打印双倍或可能发送额外的字符
答案 0 :(得分:1)
您可能希望先尝试使用侦听器,但必须确保设备以正确的波特率将数据发送到串行端口。
import serial, sys
port = your_port_name
baudrate = 9600
ser = serial.Serial(port,baudrate,timeout=0.001)
while True:
data = ser.read(1)
data+= ser.read(ser.inWaiting())
sys.stdout.write(data)
sys.stdout.flush()