Python串口通信的接收与发送
引言
随着物联网和嵌入式系统的普及,串口通信成为了一种常见的通信方式。Python作为一种简单易用的编程语言,也提供了与串口进行通信的功能。本文将详细介绍如何使用Python来进行串口通信的接收与发送。
什么是串口通信
串口通信(Serial Communication)是指通过串行端口进行的数据传输。它与并行接口相对,在通信过程中只需要一根数据线和一根时钟线。串口通信常用于连接计算机与外部设备,比如鼠标、键盘、打印机、传感器等。
串口通信的特点包括简单、可靠、传输距离远、干扰相对较小等。因此,它被广泛应用于嵌入式系统、物联网、工业控制等领域。
Python中的串口通信
Python提供了多种用于串口通信的库,其中最常用的是pyserial
库。pyserial
库可以帮助我们轻松地进行串口通信的编程。
安装pyserial库
在开始之前,我们需要先安装pyserial
库。可以使用以下命令来安装:
pip install pyserial
打开串口
在Python中,我们首先需要打开串口才能进行通信。使用pyserial
库的Serial
类可以实现打开串口的功能。
import serial
# 打开串口
ser = serial.Serial('COM1', 9600)
在上面的代码中,我们通过指定串口号和波特率,创建了一个Serial
对象ser
,并打开了串口。其中,COM1
是串口号,9600
是波特率,具体串口号和波特率需要根据实际情况进行修改。
串口参数设置
在使用串口进行通信之前,我们通常需要设置一些参数,比如波特率、数据位、停止位等。pyserial
库提供了Serial
类的一些方法,可以用来设置串口的参数。
import serial
# 设置串口参数
ser = serial.Serial('COM1', 9600)
ser.baudrate = 115200 # 设置波特率为115200
ser.bytesize = serial.EIGHTBITS # 设置数据位为8位
ser.parity = serial.PARITY_NONE # 设置校验位为无校验
ser.stopbits = serial.STOPBITS_ONE # 设置停止位为1位
在上面的代码中,我们通过设置Serial
对象的属性来设置串口的一些参数。比如,baudrate
属性用于设置波特率,bytesize
属性用于设置数据位,parity
属性用于设置校验位,stopbits
属性用于设置停止位。
串口接收数据
在打开串口之后,我们可以使用Serial
类的read()
方法来接收串口发送过来的数据。
import serial
# 打开串口
ser = serial.Serial('COM1', 9600)
# 从串口接收数据
data = ser.read()
print(data)
在上面的代码中,read()
方法返回的是一个字节对象,可以通过print()
函数将其打印出来。
串口发送数据
除了接收数据外,我们也可以使用Serial
类的write()
方法来向串口发送数据。
import serial
# 打开串口
ser = serial.Serial('COM1', 9600)
# 向串口发送数据
ser.write(b'Hello, World!\n')
在上面的代码中,write()
方法需要传入一个字节对象作为发送的数据。在本例中,我们发送了一个字符串"Hello, World!\n"
。
关闭串口
当我们完成串口通信之后,需要关闭串口以释放系统资源。
import serial
# 打开串口
ser = serial.Serial('COM1', 9600)
# 关闭串口
ser.close()
在上面的代码中,close()
方法用于关闭串口。关闭串口后,我们就不能再进行数据的发送和接收了。
示例代码
下面是一个完整的示例代码,展示了如何通过串口进行数据的接收和发送。
import serial
# 打开串口
ser = serial.Serial('COM1', 9600)
print("串口已打开")
# 设置串口参数
ser.baudrate = 115200
ser.bytesize = serial.EIGHTBITS
ser.parity = serial.PARITY_NONE
ser.stopbits = serial.STOPBITS_ONE
print("串口参数已设置")
# 循环接收数据
while True:
data = ser.read()
if data:
print("接收到数据:", data.decode())
# 从键盘读取输入
input_data = input("请输入要发送的数据:")
# 如果输入q,则退出循环
if input_data == 'q':
break
# 向串口发送数据
ser.write(input_data.encode())
# 关闭串口
ser.close()
print("串口已关闭")
在上面的示例代码中,我们使用串口进行数据的接收和发送。首先,通过Serial
类打开串口,并设置了一些串口参数。然后,在一个无限循环中,我们不断接收串口发送的数据,并将其打印出来。同时,我们也可以通过键盘输入的方式向串口发送数据。当输入q
时,程序退出循环,并关闭串口。
运行结果
以下是示例代码在接收到串口数据后的运行输出示例:
串口已打开
串口参数已设置
接收到数据: Hello, World!
接收到数据: Testing
请输入要发送的数据:Hello, Serial
请输入要发送的数据:q
串口已关闭
在示例代码的运行结果中,我们首先打开了串口,并设置了串口的参数。然后,不断接收串口发送的数据,并将其打印出来。同时,我们也可以通过键盘输入的方式向串口发送数据。最后,当输入q
时,程序退出循环,并关闭串口。
总结
本文详细介绍了如何使用Python进行串口通信的接收与发送。通过pyserial
库,我们可以方便地打开串口并设置串口的参数,然后进行接收和发送数据。通过串口通信,我们可以与外部设备进行数据的交互,实现各种功能。
在实际应用中,我们还可以根据需求,进一步扩展和优化串口通信的功能。比如,可以添加异常处理、数据解析等功能,以满足实际的通信需求。同时,也可以结合其他模块和库,实现更复杂的功能,如串口通信与GUI界面的结合,串口通信与数据库的交互等。
同时,需要注意的是,在进行串口通信时,需要确保串口的连接正确并且串口参数的设置与外部设备的要求相匹配。此外,还需注意数据的解析和处理,避免数据的丢失或错误。