我想寫一個非常基本的腳本,這將允許我通過串行完全控制一個設備。我可以發送數據(並且我知道設備收到它,讓設備上的屏幕打開讓我看到輸入顯示)。Python串行,可以寫但不能讀
但我不能接收數據,與屏幕上打開,並通過屏幕輸入數據出現錯誤:
Traceback (most recent call last): File "serialRec.py", line 4, in for line in ser: File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 456, in read raise SerialException('device reports readiness to read but returned no data (device disconnected?)') serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected?)
有沒有錯誤,如果我打開端口等待消息沒有屏幕。 我說的應用程序發送數據沒有問題...我能做什麼?我怎樣才能得到這個閱讀?我正在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()
UPDATE:
我現在有工作,但有限的和醜陋它打印從發送一個命令以多行的回報。雖然爲此我將嘗試一些事情。一旦我把它帶到一個好的地方,我會發布並分享一些很好的工作代碼。
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()
這是我所做的改變,它的工作原理。雖然它總是打印雙倍或可能發送一個額外的字符
我有類似的問題。你正在使用哪個版本?你應該在Pypi上安裝新的v3.0:https://pypi.python.org/pypi/pyserial – CoMartel
@HarryPotfleur我正在使用2.7 – TheHidden
你在哪裏閱讀?數據何時發送/接收?對我有效的是'data = port.read(1); data + = port.read(puerto.inWaiting())'在一個循環中並且如果有數據的話就打印它。 – tglaria