今天咱們來聊聊怎么用Python搞定串口通信,讓你的電腦和各種設備愉快地“對話”。別擔心,跟著我,保證輕松上手!
首先,確保你的電腦有串口(通常是USB轉串口),然后安裝pyserial庫。打開終端或命令行,敲入這行命令:
pip install pyserial
安裝好了?那咱們就開始吧!
串口通信,簡單說就是設備之間通過一根線,一個字節一個字節地傳遞信息。在Python里,我們用Serial類來控制這個過程。
(1) 打開串口
import serial# 創建串口對象ser = serial.Serial('COM3', 9600, timeout=1)# 檢查是否成功打開if ser.isOpen(): print("串口已打開!")else: print("串口打開失敗,請檢查設置!")
這里,COM3是串口號,不同的電腦可能不同,9600是波特率,要和設備一致哦!
(2) 發送數據
發送數據很簡單,用write()方法就行:
# 準備發送的數據data_to_send = "Hello, Arduino!".encode()# 發送數據ser.write(data_to_send)print("數據已發送!")
記得把字符串編碼成字節哦,因為串口通信處理的是字節流。
(3) 接收數據
接收數據要用readline()或read()方法。這里我們用readline()來讀取一行:
while True: # 讀取一行數據 data_received = ser.readline().decode().strip() if data_received: print(f"收到數據:{data_received}") else: break
decode()是把接收到的字節解碼回字符串,strip()去掉末尾的換行符。
把上面的代碼整合一下,就得到一個完整的串口收發程序:
import serialdef main(): # 創建串口對象 ser = serial.Serial('COM3', 9600, timeout=1) if not ser.isOpen(): print("串口打開失敗,請檢查設置!") return print("串口已打開!") # 準備發送的數據 data_to_send = "Hello, Arduino!".encode() # 發送數據 ser.write(data_to_send) print("數據已發送!") while True: # 讀取一行數據 data_received = ser.readline().decode().strip() if data_received: print(f"收到數據:{data_received}") else: break # 關閉串口 ser.close() print("串口已關閉!")if __name__ == "__main__": main()
在實際應用中,串口通信可能會遇到各種各樣的問題,如設備未連接、波特率不匹配等。為了確保程序的健壯性,我們需要添加錯誤處理機制:
try: # 嘗試打開串口 ser = serial.Serial('COM3', 9600, timeout=1)except serial.SerialException as e: print(f"串口打開失敗: {e}")
此外,使用logging模塊可以幫助我們記錄程序運行過程中的關鍵信息,便于調試和維護:
import logginglogging.basicConfig(level=logging.DEBUG)logger = logging.getLogger(__name__)# 記錄日志logger.debug("嘗試打開串口...")
如果需要同時與多個設備通信,可以創建多個Serial實例,每個實例對應一個設備:
device1 = serial.Serial('COM3', 9600)device2 = serial.Serial('COM4', 9600)# 向兩個設備發送相同數據data_to_send = "Hello, Devices!".encode()device1.write(data_to_send)device2.write(data_to_send)
在某些場景下,你可能需要解析從設備接收到的復雜數據。Python的強大在于,你可以利用各種庫來處理這些數據,比如使用正則表達式提取特定模式的信息:
import re# 假設設備返回的數據格式為:Temperature: 23.5°Cpattern = r'Temperature: (/d+/./d+)°C'data_received = ser.readline().decode().strip()match = re.search(pattern, data_received)if match: temperature = float(match.group(1)) print(f"當前溫度為:{temperature}°C")
為了加深理解,嘗試設計一個小項目,比如一個溫度監測系統,使用Arduino作為溫度傳感器,Python作為數據處理中心。這樣不僅可以練習串口通信,還能學習數據處理和可視化。
串口通信是連接物理世界和數字世界的橋梁,掌握它將開啟無限可能。無論是DIY愛好者還是專業開發者,Python都能提供強大的工具箱,幫助你實現創意。
本文鏈接:http://www.tebozhan.com/showinfo-26-98551-0.htmlPython 串口收發使用與示例教程
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: 利用Spring Boot 3.x與消息中間件RabbitMQ實現火車購票系統實時票務信息同步與更新
下一篇: 徹底理解字符串匹配KMP算法