在嵌入式软件自动化测试中,串口通信是一个常用且重要的方式。通过串口,计算机可以与嵌入式设备进行实时数据交换。Python 提供了 pyserial
模块,使得串口通信变得相对简单和灵活。本文将介绍如何使用 pyserial
模块进行串口数据的读写。
环境准备
首先,确保已安装 pyserial
模块。如果尚未安装,可以通过 pip 命令进行安装:
pip install pyserial
基本概念
串口通信的基本流程是:打开串口 -> 发送数据 -> 接收数据 -> 关闭串口。在编写代码时,需要注意端口号、波特率、超时设置等参数。
代码示例
以下是一个简单的串口读写示例,将演示如何发送数据到串口并从串口接收数据。
import serial
import time
# 配置串口参数
port = 'COM3' # 串口号,根据具体情况修改
baudrate = 9600 # 波特率
timeout = 1 # 超时设置
try:
# 创建串口对象
ser = serial.Serial(port, baudrate, timeout=timeout)
print(f"打开串口: {port},波特率: {baudrate}")
# 等待串口稳定
time.sleep(2)
# 发送数据
data_to_send = "Hello, Embedded Device!"
ser.write(data_to_send.encode('utf-8')) # 发送时需要编码
print(f"发送数据: {data_to_send}")
# 接收数据
received_data = ser.readline().decode('utf-8').strip() # 按行读取
print(f"接收到的数据: {received_data}")
except serial.SerialException as e:
print(f"串口错误: {e}")
except Exception as e:
print(f"发生错误: {e}")
finally:
if ser.is_open:
ser.close() # 确保关闭串口
print("已关闭串口")
代码详解
-
导入模块:首先导入
serial
模块和time
模块。time
模块主要用于等待串口稳定。 -
配置串口参数:根据实际的开发环境配置串口号(如
COM3
)和波特率(如9600
)。 -
打开串口:使用
serial.Serial()
创建串口对象,并通过open()
方法打开它。这里需要设置超时,防止在读取数据时程序一直阻塞。 -
发送数据:通过
ser.write()
方法发送数据。在发送前,需要将字符串编码成字节格式。 -
接收数据:使用
ser.readline()
方法读取数据,读取时要注意进行解码和去除多余的空白字符。 -
异常处理:使用
try
和except
语句处理可能出现的串口异常。 -
关闭串口:最后,通过
ser.close()
确保串口被正常关闭,以释放资源。
注意事项
- 串口号在不同操作系统中有所不同,Windows 一般使用
COM
前缀,而 Linux 使用/dev/ttyUSB0
等格式。 - 在串口读写过程中的波特率和其他设置必须与嵌入式设备保持一致。
- 在实际应用中应考虑并发读写、数据完整性和错误处理等问题,以提高代码的健壮性。
总结
通过使用 pyserial
模块,Python 提供了简单而强大的串口通信能力,能够在嵌入式软件自动化测试中发挥重要作用。以上示例代码展示了串口的基本操作,用户可以根据需要进行扩展和修改,以满足特定的测试需求。