我對python很陌生,所以我得到了幾個問題。 我有一個與SD卡接口存儲二進制文件與一些數據的arduino。我們稱之爲SAFEFILE.BIN。 我想要做的主要事情是,通過串口發送數據,並在我的電腦上用python程序創建1:1副本,以便進一步操作。在python中保存串行輸入1:1
這裏是我使用的到Arduino的串行輸出寫入一個文件(串行端口是開放的,併發送數據)的部分:
f = open('SAFEFILE.BIN, 'w+')
while aux != b'':
aux = ser.readline()
f.write(aux)
else:
print('Copy of SAFEFILE.BIN succesfully created')
f.close()
Arduino的代碼只是:
File dataFile = SD.open(datafile);
if (dataFile) {
while (dataFile.available()) {
Serial.write(dataFile.read());}
一切工作到目前爲止。該文件正在充滿我的數據。但仔細看後,我提到了一些問題。我用十六進制編輯器讀取十六進制信息進行比較的兩個文件(原上的Arduino和它的副本)
正如你所看到的write()或閱讀過程似乎將「0A」解釋爲換行並在其前面添加了一個回車「0D」。在我的情況下,0A只是意味着10. 有沒有辦法阻止python添加一些我不需要的字節?我所要做的就是保存每個字節的串行輸入字節,而無需任何解釋或編輯。
我試着用各種格式對讀取操作進行解碼和編碼,至今沒有運氣。
因爲我需要這個safefile是完全正確的下一步驟,給了我兩個選擇:
- 試圖讓saveprocess在SAVEFILE爲「0D 0A」的bytecombination右
- 搜索和用0A代替它
我肯定會更喜歡選項1!有沒有人可以幫我在這裏?
謝謝您的回答!可悲的是,即使我使用read()而不是readline(),問題仍然存在。所以它似乎是導致這個問題的write()過程。 – hoffma0901
好的嘗試'f.write(bytearray(aux))'應該傳遞一個字節對象來寫。 –
仍有相同的輸出與額外的0D ... – hoffma0901