pyserial庫-串口通訊模塊


 

pySerial 封裝了串口通訊模塊,支持Linux、Windows、BSD(可能支持所有支持POSIX的操作系統),支持Jython(Java)和IconPython(.NET and Mono).pyserial模塊封裝了對串口的訪問

端口號默認從0開始,程序中不需要知道端口名稱

像文件讀寫一樣的API,read、write(readline等也受支持)

支持二進制傳輸,沒有null消除,沒有cr-lf轉換
所有程序全由Python完成,除了標准庫外不依賴其他包,除了pywin32(windows)、JavaComm(Jython). POSIX(Linux, BSD) 只依賴Python標准庫

 

pyserial庫的安裝:pip install pyserial   

 

#資料  https://blog.csdn.net/u012611644/article/details/79125234
#https://www.cnblogs.com/dongxiaodong/p/9992083.html
import serial   #導入串口通訊庫
import serial.tools.list_ports

#ser=serial.Serial(4,9600,timeout=0.5)  #winsows系統使用com4口連接串行口
ser=serial.Serial("com4",9600,timeout=0.5)  #winsows系統使用com4口連接串行口--同時打開串行口
#ser=serial.Serial("com4",9600)
#參數3   連接超時--可選;None:永遠等待操作,0為立即返回請求結果,其他值為等待超時時間(單位為秒)--按照設置的時間操作一次
#參數1   端口-Arduino端口可以用米思齊查看
#參數2  波特率.#波特率,標准值之一:50,75,110,134,150,200,300,600,1200,1800,2400,4800,9600,19200,38400,57600,115200
print(ser)
#Serial<id=0xaf9979d550, open=True>(port='com4', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)
print(ser.name)   #打印設備名
#com4
print(ser.port)  #打印設備名
#com4
print(ser.baudrate)  #獲取波特率
port_list = serial.tools.list_ports.comports() #返回可用的串口信息對象列表
#[<serial.tools.list_ports_common.ListPortInfo object at 0x000000ACEB8A0390>, <serial.tools.list_ports_common.ListPortInfo object at 0x000000ACEB939470>]
 print(port_list) #[<serial.tools.list_ports_common.ListPortInfo object at 0x0000002847D5BD30>] if len(port_list) == 0: print('無可用串口') else: for i in range(0, len(port_list)): print(port_list[i]) #COM4 - USB-SERIAL CH340 (COM4)
    #
port_list[i].name 返回串口名稱

while True: data = ser.readline().decode('utf-8') #是讀一行,以/n結束,要是沒有/n就一直讀,阻塞 print(data) # 29.00 print(ser.writeTimeout) #data = ser.readlines()和ser.xreadlines()#都需要設置超時時間 #ser.readlines() #讀取多行,返回列表,必須匹配超時(timeout)使用 #ser.close() #關閉端口 #ser.write(b"hello")#向端口寫數據,並返回發送字節數[好像只能寫字節數據] #s = ser.read(10)#從端口讀10個字節 #ser.open() #打開端口 #ser.baudrate = 9600 #設置波特率 #ser.isOpen() #看看這個串口是否已經被打開 #ser.in_waiting #獲取輸入緩沖區的剩余字節數 #ser.out_waiting #獲取輸出緩沖區的字節數 #ser.timeout 返回超時設置的時間 #ser.writeTimeout #寫超時 #ser.bytesize 字節大小---8

 

 

s = serial.tools.list_ports.comports() #獲取可用的串口列表
len(s)  #返回可用串口數目
c=s[0]  返回指定串口信息--COM3 - USB-SERIAL CH340 (COM3)

 

例子:找出可用串口

 

import serial
import serial.tools.list_ports

port = serial.tools.list_ports.comports() #返回可用的串口信息對象列表
#[<serial.tools.list_ports_common.ListPortInfo object at 0x000000ACEB8A0390>, <serial.tools.list_ports_common.ListPortInfo object at 0x000000ACEB939470>]

if len(port) <= 0:
    #len(port) 返回可用串口總數
    print("找不到可用的端口")


else:
    print('可用串口總數:',len(port))
    port_0 = list(port[0]) #把可用的第0個串口以字符串列表形式返回
    #['COM3', 'USB-SERIAL CH340 (COM3)', 'USB VID:PID=1A86:7523 SER=5 LOCATION=1-1']
 port_serial_0 = port_0[0] #返回串口名稱
    #COM3

 

 

 

異常:
ValueError:參數錯誤
SerialException:找不到設備或不能配置
 
 

ser.baudrate=9600#設置波特率

ser.bytesize=8#字節大小
ser.bytesize=serial.EiGHTBITS#8位數據位

ser.parity=serial.PARITY_EVEN#偶校驗
ser.parity=serial.PARITY_NONE#無校驗
ser.parity=serial.PARITY_ODD#奇校驗

ser.stopbits=1#停止位
ser.timeout=0.5#讀超時設置
ser.writeTimeout=0.5#寫超時
ser.xonxoff#軟件流控
ser.rtscts#硬件流控
ser.dsrdtr#硬件流控
ser.interCharTimeout#字符間隔超時

 serial.inWaiting() 判斷當前接收的數據

serial.flushInput() 清除輸入緩沖區數據

serial.flushOutput() 中止當前輸出並清除輸出緩沖區數據

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM