因此,較大項目的一部分需要使用樹莓派從串口接收長十六進制字符串。我想我已經全部工作了,但後來發現它正在丟失字符串中間的大量數據。丟失收到的串行字符串中的數據
def BUTTON_Clicked(self, widget, data= None):
ser = serial.Serial("/dev/ex_device", 115200, timeout=3)
RECEIVEDfile = open("RECIEVED.txt", "r+", 0) #unbuffered
#Commands sent out
ser.write("*n\r")
time.sleep(1)
ser.flush()
ser.write("*E")
ser.write("\r")
#Read back string rx'd
RECEIVED= ser.read()
RECEIVED= re.sub(r'[\W_]+', '', RECEIVED) #remove non-alphanumeric characters (caused by noise maybe?)
RECEIVEDfile.write(re.sub("(.{4})", "\\1\n", RECEIVED, 0, re.DOTALL)) #new line every 4 characters
RECEIVEDfile.close
ser.write("*i\r")
ser.close
這是用來檢索數據的腳本,波特率和串行命令設置權限和運行腳本的「緩衝」(-u),但還沒有完整的字符串不會被保存。該字符串大約16384個字符長,但只有大約9520個字符(它變化)正在保存(不能提供用於分析的字符串)。任何人都知道我錯過了什麼?歡呼你可以給我的任何幫助。
你在'刪除非字母數字字符'步驟中輸了什麼?可能值得使用相同的正則表達式來計算刪除的字符數,並查看它是否與缺失的數據匹配。 – mfitzp 2013-04-30 19:03:26
是否有3秒的超時時間來獲取數據?你可以用timeout = None來試試嗎? – mfitzp 2013-04-30 19:08:33
我完全刪除了解析,看看它是否是問題,但唉,沒有成功。 – CaramelElectron 2013-04-30 19:12:46