一、串口通訊基礎概念
串口通訊是在計算機內部和外界設備通信時,利用串口(serial port)進行數據傳輸的一種通訊方式。串口是計算機通訊接口之一,在計算機硬件中一般指常見的RS232串口(其他類型如RS485、RS422等串口較為少用)。
串口通訊涉及到的概念包括波特率、數據位、停止位、奇偶校驗位。波特率用於表示傳輸速率,也就是每秒鐘發送的數據字節數。數據位指的是每個數據字節所包含的二進制位數,常見的有7位、8位。停止位用於表示每個數據字節之間的停止時間,常見的有1位和2位。奇偶校驗位用於識別數據傳輸中的錯誤。
二、Python通過PySerial實現串口通訊
Python中有許多第三方庫可用於串口通訊,其中最常用的就是PySerial。PySerial是Python下操作串口通訊的模塊,安裝方法為:
pip install pyserial
使用PySerial模塊,需要從serial模塊中導入Serial類,通過該類的實例化對象來完成串口的打開、讀寫和關閉等操作。具體操作方法如下:
import serial # 打開串口 ser = serial.Serial('COM1', 9600) # 向串口發送數據 ser.write(b'hello') # 讀取串口數據 data = ser.read(10) # 關閉串口 ser.close()
三、利用Python實現串口通訊
接下來,我們可以基於PySerial模塊,來實現一個簡單的串口通訊程序。具體代碼如下:
import serial ser = serial.Serial('COM1', 9600) # 打開串口 print('串口已打開') try: while True: data = ser.readline().decode() # 讀入串口數據 if data: print('接收到數據:', data.strip()) # 顯示串口數據 except KeyboardInterrupt: pass ser.close() # 關閉串口 print('串口已關閉')
在這個示例代碼中,我們通過循環可以不斷從串口中讀取數據,並將其進行實時顯示。如果要向串口中發送數據,也可以通過調用Serial類的write()方法實現。
四、應用實例:串口控制LED燈
最後,我們來嘗試將Python串口通訊運用到具體項目中,通過串口控制LED燈的開關。
步驟如下:
- 硬件連接:將串口的TX連接到控制板的RX,RX連接到TX。將控制板的高電平與LED正極相連接,負極與GND相接。
- 編寫控制板程序:編寫控制板程序,解析接收到的串口指令,控制LED的開關。
- 編寫Python程序:在PC上使用Python編寫串口發送程序,向控制板發送開關指令。
控制板程序代碼如下(Arduino):
int ledPin = 13; void setup() { Serial.begin(9600); // 串口初始化 pinMode(ledPin, OUTPUT); // 將LED接口設為輸出 } void loop() { while (Serial.available()) { // 判斷串口是否有數據 char command = Serial.read(); // 讀入數據 if (command == '1') { // 控制開關 digitalWrite(ledPin, HIGH); Serial.write("LED已打開\n"); } else if (command == '0') { digitalWrite(ledPin, LOW); Serial.write("LED已關閉\n"); } } }
Python程序代碼如下:
import serial import time ser = serial.Serial('COM1', 9600) # 打開串口 print('串口已打開') try: while True: command = input('請輸入指令:') ser.write(command.encode()) # 發送控制指令 time.sleep(1) # 等待設備響應 except KeyboardInterrupt: pass ser.close() # 關閉串口 print('串口已關閉')
在執行完上述兩個程序後,即可通過Python程序向控制板發送指令,從而控制LED的開關狀態。
原創文章,作者:RHHZS,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/360859.html