關於python讀取Arduino發送的串口數據將bytes轉換爲str問題

關於python讀取Arduino發送的串口數據將bytes轉換爲str問題

Arduino作爲一款非常好的開源軟件,在控制領域十分受歡迎。最近在做一件事就是將Arduino的數據通過串口傳輸到電腦,然後電腦端使用python讀取數據,進而用於控制。但是python3的串口讀取數據爲bytes類型,因此一般都需要將bytes類型轉換爲字符串類型,編碼格式通常使用utf-8。 不幸的是,Arduino傳輸開啓後,python進行讀取,在讀取的前三個字節串是隨機的,但是utf-8又不支持一部分的字節串轉換。因此我想出一種解決辦法是:
讀取到串口數據後,先使用strip()函數去掉數據後面的"\r\n",然後使用decode()函數將bytes轉換爲str,decode()函數內必須有一個‘’ignor參數。具體代碼如下:

一、Arduino端

簡單向串口發送一個數字

void setup(){
	Serial.begin(9600);
}
void loop(){
	Serial.println(100)
}

二、python端

import serial
serialPort = "COM3"
baudRate = 9600
myser = serial.Serial(serialPort,baudRate,timeout = 0.5)
print("參數設置:串口=%s ,波特率=%d" % (serialPort, baudRate))
while(1):	
	#從串口讀取數據
    data = myser.readline()  
    print(data)    
    print(type(data))
      
    #去掉串口讀取的"\r\n"    
    data = data.strip()
    #將字節串變成字符串並且忽略不合法字符串,,因爲部分字符串不能轉換爲utf-8    
    data = data.decode('utf-8','ignore')    
    print(data)    
    print(type(data))
ser.close()

運行結果
運行結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章