在 Python 中进行串口通信的常用库是 pyserial
。这个库提供了对串口的简单而强大的操作接口,能够让我们轻松地与各种串口设备进行通信,如 Arduino、单片机、PLC 等。
安装 PySerial
首先,你需要安装 pyserial
库。可以使用以下命令通过 pip 进行安装:
pip install pyserial
基础概念
在串口通信中,通常需要设置以下参数: - 波特率(Baudrate):有效的传输速率,通常为 9600、115200 等。 - 数据位(Data bits):通常为 8 位。 - 停止位(Stop bits):通常为 1 位。 - 奇偶校验(Parity):可选项,一般设置为没有(None)。
基本使用示例
下面,我们将构建一个简单的串口通信示例,包括发送和接收数据。
发送数据
首先,我们需要打开指定的串口,并设定通信参数。在这个示例中,我们将发送一条简单的消息。
import serial
import time
# 创建串口对象
ser = serial.Serial('COM3', baudrate=9600, bytesize=8, parity=serial.PARITY_NONE, stopbits=1, timeout=1)
# 检查是否打开串口
if ser.is_open:
print("串口已经打开,开始发送数据...")
# 发送数据
message = "Hello, Serial Communication!"
ser.write(message.encode('utf-8')) # 编码为字节流并发送
print("发送的数据:", message)
# 延迟一段时间确保数据被发送
time.sleep(1)
# 关闭串口
ser.close()
print("串口已关闭。")
接收数据
接下来,我们实现一个接收数据的示例,接收数据的过程通常是循环进行的。
import serial
import time
# 创建串口对象
ser = serial.Serial('COM3', baudrate=9600, bytesize=8, parity=serial.PARITY_NONE, stopbits=1, timeout=1)
# 检查是否打开串口
if ser.is_open:
print("串口已经打开,开始接收数据...")
# 接收数据
try:
while True:
if ser.in_waiting > 0: # 检查是否有数据可读
data = ser.readline() # 读取一行数据
print("接收到的数据:", data.decode('utf-8').strip()) # 解码并去掉换行符
except KeyboardInterrupt:
print("接收中断")
# 关闭串口
ser.close()
print("串口已关闭。")
代码解析
- 串口初始化:通过
serial.Serial
创建串口对象,需要传入通信参数。 - 发送数据:使用
ser.write
方法发送字节流数据。 - 接收数据:通过
ser.in_waiting
检查是否有数据可读,使用ser.readline
读取数据,并进行解码。 - 关闭串口:操作完成后,需要关闭串口以释放资源。
注意事项
- 在使用串口通信时,首先要确保设备连接正确,并对应串口号(如
COM3
)设置正确。 - 波特率等参数需与外部设备设置一致。
- 处理异常:在实际应用中,可以考虑使用
try...except
结构来处理串口打开失败等异常情况。
通过 pyserial
库,Python 用户可以方便地实现串口数据的发送与接收,结合其他硬件平台,能够构建出丰富的应用场景。无论是简单的设备控制还是复杂的数据处理,都是一项非常有用的技能。