python serial 模組使用方法 #1

一、概述
    pyserial模組封裝了對串列埠的訪問。
二、特性
    在支援的平臺上有統一的介面。
    通過python屬性訪問串列埠設定。
    支援不同的位元組大小、停止位、校驗位和流控設定。
    可以有或者沒有接收超時。 
    類似檔案的API,例如read和write,也支援readline等。
    支援二進位制傳輸,沒有null消除,沒有cr-lf轉換。
三、系統要求
    python 2.3及以上版本,包括py3k。
四、使用方法和例項
1、匯入pyserial模組
pip install pyserial (for Power shell)
import serial
2、開啟序列口
// 開啟串列埠0, 9600,8N1,連線超時0.5秒
import serial
①選擇裝置
ser=serial.Serial(“/dev/ttyUSB0”,9600,timeout=0.5) #使用USB連線序列口
ser=serial.Serial(“/dev/ttyAMA0”,9600,timeout=0.5) #使用樹莓派的GPIO口連線序列口
ser=serial.Serial(1,9600,timeout=0.5)#winsows系統使用com1口連線序列口
ser=serial.Serial(“com1”,9600,timeout=0.5)#winsows系統使用com1口連線序列口
ser=serial.Serial(“/dev/ttyS1”,9600,timeout=0.5)#Linux系統使用com1口連線序列口
print ser.name#列印裝置名稱
print ser.port#列印裝置名
ser.open()
#開啟埠
s = ser.read(10)#從埠讀10個位元組
ser.write(“hello”)#向埠寫資料
ser.close()#關閉埠
data = ser.read(20) #是讀20個字元
data = ser.readline() #是讀一行,以/n結束,要是沒有/n就一直讀,阻塞。
data = ser.readlines()和ser.xreadlines()#都需要設定超時時間
ser.baudrate = 9600 #設定波特率
ser.isOpen() #看看這個串列埠是否已經被開啟
3、獲得序列口狀態
序列口的屬性:
name:裝置名字
portstr:已廢棄,用name代替
port:讀或者寫埠
baudrate:波特率
bytesize:位元組大小
parity:校驗位
stopbits:停止位
timeout:讀超時設定
writeTimeout:寫超時
xonxoff:軟體流控
rtscts:硬體流控
dsrdtr:硬體流控
interCharTimeout:字元間隔超時
       
①屬性
屬性的使用方法:
ser=serial.Serial(“/dev/ttyAMA0”,9600,timeout=0.5)
ser.open()
print ser.name
print ser.port
print ser.baudrate#波特率
print ser.bytesize#位元組大小
print ser.parity#校驗位N-無校驗,E-偶校驗,O-奇校驗
print ser.stopbits#停止位
print ser.timeout#讀超時設定
print ser.writeTimeout#寫超時
print ser.xonxoff#軟體流控
print ser.rtscts#硬體流控
print ser.dsrdtr#硬體流控
print ser.interCharTimeout#字元間隔超時
ser.close()
4、設定序列口狀態
需要用的常量
bytesize:FIVE BITS、SIXBITS、SEVENBITS、EIGHTBITS
parity: PARITY_NONE, PARITY_EVEN, PARITY_ODD, PARITY_MARK, PARITY_SPACE
stopbits: STOPBITS_ONE, STOPBITS_ONE_POINT_FIVE, STOPBITS_TWO
異常:
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#字元間隔超時
5、Readline方法的使用
        是讀一行,以/n結束,要是沒有/n就一直讀,阻塞。
       使用readline()時應該注意:開啟串列埠時應該指定超時,否則如果串列埠沒有收到新行,則會一直等待。如果沒有超時,readline會報異常。
6、serial.Serial類——原生埠
class serial.Serial 
{
    __init__(port=None, baudrate=9600, bytesize=EIGHTBITS,parity=PARITY_NONE, stopbits=STOPBITS_ONE, timeout=None, xonxoff=False, rtscts=False, writeTimeout=None, dsrdtr=False, interCharTimeout=None)
}
    #其中:
    # bytesize:FIVEBITS、SIXBITS、SEVENBITS、EIGHTBITS
    # parity: PARITY_NONE, PARITY_EVEN, PARITY_ODD, PARITY_MARK, PARITY_SPACE
    # stopbits: STOPBITS_ONE, STOPBITS_ONE_POINT_FIVE, STOPBITS_TWO
    #異常:
    #ValueError:引數錯誤
    #SerialException:找不到裝置或不能配置
    open():開啟串列埠
    close():立即關閉串列埠
    __del__():解構函式
    read(size=1):從串列埠讀size個位元組。如果指定超時,則可能在超時後返回較少的位元組;如果沒有指定超時,則會一直等到收完指定的位元組數。
    write(data):傳送data,並返回傳送位元組數。如果bytes和bytearray可用(python 2.6以上),則接受其作為引數;否則接受str作為引數。
    #異常:SerialTimeoutException——配置了寫超時併發生超時時發生此異常。
    inWaiting():返回接收快取中的位元組數
    flush():等待所有資料寫出。
    flushInput():丟棄接收快取中的所有資料
    flushOutput():終止當前寫操作,並丟棄傳送快取中的資料。
    sendBreadk(duration=0.25):傳送BREAK條件,並於duration時間之後返回IDLE
    setBreak(level=True):根據level設定break條件。
    setRTS(level=True)
    setDTR(level=True)
    getCTS()
    getDSR()
    getRI()
    getCD()
    #只讀屬性:
    name:裝置名字
    portstr:已廢棄,用name代替
    port:讀或者寫埠
    baudrate:波特率
    bytesize:位元組大小
    parity:校驗位
    stopbits:停止位
    timeout:讀超時設定
    writeTimeout:寫超時
    xonxoff:軟體流控
    rtscts:硬體流控
    dsrdtr:硬體流控
    interCharTimeout:字元間隔超時
    #埠設定可以被讀入字典,也可從字典載入設定:
    getSettingDict():返回當前串列埠設定的字典
    applySettingDict(d):應用字典到串列埠設定
    #對提供io庫的系統(python 2.6或以上),Serial從io.RawIOBase派生。對其它系統,從FileLike派生。
    #異常:
    exception serial.SerialException
    exception serial.SerialTimeoutException
    #常量:
    serial.VERSION:pyserial版本
    #模組函式和屬性:
    serial.device(number)
    serial.serial_for_url(url, *args, **kwargs)
    serial.protocol_handler_packages()
    serial.to_bytes(sequence):接收一個字串或整數列表sequence,返回bytes例項
}

留言

這個網誌中的熱門文章

USB HID 教學 #1(轉載)

USB HID 教學 #2 (轉載)