Python讀取串口數據的實現方法
更新時間:2024年02月29日 15:45:00 作者:怎么才能看名字
本文主要介紹了Python讀取串口數據的實現方法,可以使用pySerial庫來讀取串口數據,具有一定的參考價值,感興趣的可以了解一下
1.編程流程
串口數據流程為,
1.實例化串口連接,
2.初始化設置連接屬性,
3.連接串口硬件,
4.讀取傳輸緩存區(qū)的串口數據。
使用Python的serial庫進行讀寫串口數據。
pip3 install serial
技巧:重復運行上述pip指令,可輸出當前serial依賴庫的存放位置。
參考教程:http://www.dbjr.com.cn/article/170801.htm.
2.應用serial庫
分析1中功能流程,進行如下匯總:
- 串口連接配置1:實例化串口連接
- 串口連接配置2:配置串口參數,并連接串口
- 串口連接配置3:讀取串口數據
- 加上功能:核驗接收數據
3.編碼設計
將上面的功能,進行如下進行設計:
- 串口參數配置設為變量,初始化串口連接時進行調用
- 讀取串口數據,寫入文件
- 判斷:串口數據數據格式,每包數據長度
4.編程實現
編寫函數,實現讀取串口操作
def msg_list(): # 新建一個列表,返回該串口數據,做后續(xù)數據處理使用 msg_list = list() # 準備一個文件,保存數據 r = r'E:\py\0.txt' write_file = open(r, 'wb') # 配置串口名稱、比特率、超時時間 port = 'COM3' bps = 1152000 timex = 1 # 連接串口 ser = serial.Serial(port, bps, timeout=timex) print(ser) # 等下時間,去啟動串口發(fā)送程序。不然,程序會直接進入判斷串口數據直接結束 time.sleep(3) # 進入讀寫過程 while True: # 判斷當前寫入區(qū)有沒有串口數據 if ser.in_waiting: # 讀數據 msg = ser.readall() # 寫入數據到文件里 write_file.write(msg) # 將數據轉成16進制數,存入列表中 msg_list = list(msg.hex) else: # 當串口寫入緩存區(qū)沒數據,關閉串口和文件,結束讀寫操作 ser.close() write_file.close() break # 保存的串口數據列表做這次函數的返回值 return msg_list
有了一組串口數據,后續(xù)就可以自定義發(fā)揮了。
if __name__ == '__main__': a = msg_list() # 由于我的發(fā)串口程序是發(fā)16進制的固定長度為160的數據包,所以進行按固定長度分割列表。列表里的索引就為每一個數據包的次序。 # 補充,串口配置默認是按每8bit位讀?。膳渲茫?,所以在數據里,一包總長度為160 * 2 = 320 a1 = [a[i:i+162*2]] for i in range(0, len(items), 162*2) # 判斷下,每幀串口數據頭是否正確 # 由于緩存區(qū)存在內存大小限制。預估在結尾容易發(fā)生丟包,所以加個長度判斷 for i in range(0, len(a1)): if a1[i][0:4] = ['a', 'b', 'c', 'd'] and len(a[i]) == 160*2: pass else: # 輸出第一次不正確的上下行數據 print('到了', i) print(a1[i-1]) print(a1[i]) break
到此這篇關于Python讀取串口數據的實現方法的文章就介紹到這了,更多相關Python讀取串口數據內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!