Python-使用pyserial與控制板溝通

最近在研究個專案,從sensor即時讀取資料透過USB傳到電腦進訓練好的分類模型進行損壞類別判斷並用GUI呈現,而板子與電腦傳輸使用到python的pyserial實作。

一開始先到裝置管理員確認COM PORT若讀不到記得刪除然後更新驅動,並確認板子的傳輸速率。

這邊我採用一發一收,我發個訊號給板子,板子才會把讀到的電壓值給我。
這範例他一次發送就是18筆bytes,扣除頭尾作為一次發送的判斷,其餘每兩筆可轉換成一組電壓值。
因此我兩組資料要一起做個計算還原電壓值,公式可參考註解(高位元加上低位元*3.3伏特/4095 2的16次方位元)
每個人板子寫的邏輯跟資料都不一樣,所以可單純參考對板子發送資料與接收資料。
   
import serial
import time

COM_PORT = 'COM15'    # 指定通訊埠名稱
BAUD_RATES = 19200    # 設定傳輸速率
ser = serial.Serial(COM_PORT, BAUD_RATES)   # 初始化序列通訊埠
try:
    while True:
        values = bytearray([3]) #板子收到3會對電腦傳一組資料
        ser.write(values) #發送資料跟FPGA要值
        i = 0
        high = 0.0
        total = 0.0
        while ser.in_waiting:          # 若收到序列資料…
            data_raw = ser.read(1)  # 讀取一筆 共18筆扣掉1跟18 每兩筆可轉換成一組電壓值
            data = int.from_bytes(data_raw, "big")     # byte to int
            print('接收到的資料:', data)
            i = i + 1
            print(str(i))
            if(i == 1): #去頭
                continue
            if(i == 18 ): #去尾
                high = 0.0
                total = 0.0
                i = 0
                break
            if i % 2 == 0:
                high = data * 256 #高位元*256  2的八次方
            if i % 2 == 1:
                total = (high + data) * 3.3 / 4095  #高位元加上低位元*3.3伏特/4095 2的16次方位元
                print("電壓值:"+str(total))  #電壓值
                high = 0.0
                total = 0.0        
 
except KeyboardInterrupt:
    ser.close()    # 清除序列通訊物件
    print('結束!')

留言

這個網誌中的熱門文章

Python-相關係數矩陣實作(python-correlation matrix )

ASP.NET-後端將值傳給javascript

ASP.NET-FileUpload上傳後自動觸發button click(FileUpload upload auto trigger button click)