Python中串口通信庫(kù)pyserial基礎(chǔ)知識(shí)
概要
pyserial是一個(gè)Python庫(kù),它提供了與串口通信相關(guān)的功能。它可以讓我們?cè)赑ython程序中直接與串口設(shè)備進(jìn)行通信,如讀取和寫(xiě)入串口數(shù)據(jù)。pyserial是一個(gè)跨平臺(tái)的庫(kù),可以在多個(gè)操作系統(tǒng)上使用,包括Windows、Linux和MacOS。
pip install pyserial
基礎(chǔ)知識(shí)
1初始化串口
import serial # 創(chuàng)建Serial對(duì)象,初始化串口 ser = serial.Serial('COM1', 9600, timeout=1) # Windows示例,COM1是串口號(hào),9600是波特率,timeout是讀超時(shí)時(shí)間 # 或 ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1) # Linux示例,/dev/ttyUSB0是串口號(hào)
參數(shù)解釋:
- port:串口號(hào),Windows上通常以COM開(kāi)頭,Linux上通常以/dev/tty開(kāi)頭。
- baudrate:波特率,數(shù)據(jù)傳輸?shù)乃俾省?/li>
- timeout:讀操作的超時(shí)時(shí)間,單位秒。如果在指定時(shí)間內(nèi)沒(méi)有讀取到數(shù)據(jù),將返回空。
2. 寫(xiě)入數(shù)據(jù)
ser.write(b'Hello, Serial Port!') # 向串口寫(xiě)入數(shù)據(jù)
**解釋:**write方法用于向串口發(fā)送數(shù)據(jù)。注意,發(fā)送的數(shù)據(jù)必須是字節(jié)類型(bytes),因此字符串前需要加b前綴
3. 讀取數(shù)據(jù)
data = ser.read(10) # 讀取10個(gè)字節(jié)的數(shù)據(jù)
line = ser.readline() # 讀取一行數(shù)據(jù),以換行符結(jié)束
解釋:readline方法用于讀取一行數(shù)據(jù),直到遇到換行符(\n)。如果沒(méi)有設(shè)置超時(shí),且沒(méi)有接收到換行符,則會(huì)一直等待。
4. 關(guān)閉串口
ser.close() # 關(guān)閉串口連接
解釋:close方法用于關(guān)閉串口連接,釋放系統(tǒng)資源。
5. 設(shè)置和獲取串口參數(shù)
# 設(shè)置波特率 ser.baudrate = 115200 # 獲取波特率 print(ser.baudrate) # 設(shè)置數(shù)據(jù)位、校驗(yàn)位和停止位 ser.bytesize = serial.EIGHTBITS # 8位數(shù)據(jù)位 ser.parity = serial.PARITY_NONE # 無(wú)校驗(yàn)位 ser.stopbits = serial.STOPBITS_ONE # 1位停止位 # 檢查串口是否已打開(kāi) print(ser.isOpen()) # 或使用 ser.is_open(注意:在較新版本的PySerial中,推薦使用is_open)
解釋:PySerial允許在創(chuàng)建Serial對(duì)象后,通過(guò)修改對(duì)象的屬性來(lái)設(shè)置串口參數(shù),如波特率、數(shù)據(jù)位、校驗(yàn)位和停止位。同時(shí),也提供了方法或?qū)傩詠?lái)檢查串口的狀態(tài),如是否已打開(kāi)。
6. 清除緩沖區(qū)
ser.flushInput() # 清除輸入緩沖區(qū) ser.flushOutput() # 清除輸出緩沖區(qū)
解釋:flushInput方法用于清除輸入緩沖區(qū)中的所有數(shù)據(jù),flushOutput方法用于清除輸出緩沖區(qū)中的所有待發(fā)送數(shù)據(jù)。這可以在某些情況下用于重置串口狀態(tài)或確保數(shù)據(jù)的準(zhǔn)確性。
7. 發(fā)送中斷信號(hào)
ser.sendBreak(duration=0.25) # 發(fā)送BREAK信號(hào),持續(xù)0.25秒
解釋:sendBreak方法用于向串口發(fā)送一個(gè)BREAK信號(hào),這可以用于向連接的設(shè)備發(fā)送一個(gè)中斷或重置信號(hào)。duration參數(shù)指定了BREAK信號(hào)的持續(xù)時(shí)間。
小結(jié)
1. serial.Serial(): 用于打開(kāi)、關(guān)閉和配置串行設(shè)備。
2. serial.Serial(port, baudrate=9600, timeout=0.5): 用于打開(kāi)串行設(shè)備,并指定波特率、數(shù)據(jù)位和停止位。
3. serial.CommPortIdentifier(): 用于獲取指定名稱的串行設(shè)備的標(biāo)識(shí)符。
4. serial.DataReceived(): 用于在串行設(shè)備上接收數(shù)據(jù)。
5. serial.DataAvailable(): 用于檢查串行設(shè)備上是否有數(shù)據(jù)可用。
6. serial.OpenPort(): 用于打開(kāi)指定名稱的串行設(shè)備。
7. serial.ClosePort(): 用于關(guān)閉指定名稱的串行設(shè)備。
8. serial.ParityError(): 用于檢查在讀取數(shù)據(jù)時(shí)是否出現(xiàn)了奇偶校驗(yàn)錯(cuò)誤。
9. serial.ReadTimeout(): 用于檢查在讀取數(shù)據(jù)時(shí)是否超時(shí)。
10. serial.StopIteration(): 用于終止迭代器對(duì)象。
11. serial.DataReceived(bytes): 用于在讀取數(shù)據(jù)時(shí)接收數(shù)據(jù)。
12. serial.RegisterApp(app_callable): 用于注冊(cè)一個(gè)應(yīng)用程序到串行設(shè)備上。
13. serial.UnregisterApp(app_callable): 用于從串行設(shè)備上注冊(cè)的應(yīng)用程序中移除指定的應(yīng)用程序。
14. serial.Read(size): 用于從串行設(shè)備上讀取指定數(shù)量的數(shù)據(jù)。
15. serial.Write(data[, offset[, count]]): 用于向串行設(shè)備上寫(xiě)入指定數(shù)量的數(shù)據(jù)。
16. serial.FlushInput(): 用于將輸入緩沖區(qū)中的數(shù)據(jù)立即寫(xiě)入到串行設(shè)備上。
17. serial.FlushOutput(): 用于將輸出緩沖區(qū)中的數(shù)據(jù)立即寫(xiě)入到串行設(shè)備上。
18. serial.SendBreak(): 用于發(fā)送一個(gè)破折號(hào),以便等待接收方回復(fù)。
19. serial.SetWriteHandler(handler): 用于注冊(cè)一個(gè)回調(diào)函數(shù),以便在數(shù)據(jù)寫(xiě)入時(shí)進(jìn)行處理。
20. serial.SetReadHandler(handler): 用于注冊(cè)一個(gè)回調(diào)函數(shù),以便在數(shù)據(jù)讀取時(shí)進(jìn)行處理。
總結(jié)
到此這篇關(guān)于Python中串口通信庫(kù)pyserial基礎(chǔ)知識(shí)的文章就介紹到這了,更多相關(guān)Python串口通信庫(kù)pyserial內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python集成開(kāi)發(fā)工具Pycharm的安裝和使用詳解
這篇文章主要介紹了Python集成開(kāi)發(fā)工具Pycharm的安裝和使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03libreoffice python 操作word及excel文檔的方法
這篇文章主要介紹了libreoffice python 操作word及excel文檔的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07python實(shí)現(xiàn)人臉檢測(cè)的簡(jiǎn)單實(shí)例
這篇文章主要給大家介紹了關(guān)于python實(shí)現(xiàn)人臉檢測(cè)的相關(guān)資料,OpenCV?可以使用機(jī)器學(xué)習(xí)算法搜索圖像中的人臉,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-02-02科學(xué)計(jì)算NumPy之Ndarray運(yùn)算函數(shù)操作示例匯總
這篇文章主要為大家介紹了科學(xué)計(jì)算NumPy之Ndarray運(yùn)算函數(shù)操作示例匯總,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04Python2與Python3的區(qū)別點(diǎn)整理
在本篇文章里小編給大家整理的是關(guān)于Python2與Python3的區(qū)別點(diǎn)整理內(nèi)容,需要的朋友們可以參考下。2019-12-12Python二叉搜索樹(shù)與雙向鏈表轉(zhuǎn)換實(shí)現(xiàn)方法
這篇文章主要介紹了Python二叉搜索樹(shù)與雙向鏈表轉(zhuǎn)換實(shí)現(xiàn)方法,涉及Python二叉搜索樹(shù)的定義、實(shí)現(xiàn)以及雙向鏈表的轉(zhuǎn)換技巧,需要的朋友可以參考下2016-04-04基于python編寫(xiě)的五個(gè)拿來(lái)就能用的炫酷表白代碼分享
七夕快到了,所以本文小編將給給大家介紹五種拿來(lái)就能用的炫酷表白代碼,無(wú)限彈窗表白,愛(ài)心發(fā)射,心動(dòng)表白,玫瑰花等表白代碼,需要的小伙伴快來(lái)試試吧2023-08-08