Python使用Serial进行串口通信的详细范例
下面是一个更详细的serial模块使用范例,包括了串口打开、读取、写入、关闭等操作,以及一些常用的串口属性设置:
import serial # 打开串口,使用with语句可以自动关闭串口 with serial.Serial('/dev/ttyUSB0', 9600, timeout=1) as ser: # 设置串口属性 ser.baudrate = 9600 # 波特率 ser.bytesize = serial.EIGHTBITS # 数据位 ser.parity = serial.PARITY_NONE # 校验位 ser.stopbits = serial.STOPBITS_ONE # 停止位 # 读取数据 while True: line = ser.readline().decode('utf-8').strip() # 读取一行数据 if line: # 如果读取到数据 print(line) # 向串口写入数据 ser.write('Received: {}'.format(line).encode())
在上面的代码中,首先使用serial.Serial()打开一个串口,并使用with语句来自动关闭串口。接着通过设置ser对象的属性来配置串口的一些参数,例如波特率、数据位、校验位、停止位等。如果需要设置其他属性,可以参考serial.Serial()的文档。
然后进入一个无限循环,不断从串口读取数据,并使用decode()方法将二进制数据转换为字符串。如果读取到了数据,则打印出来,并使用encode()方法将字符串转换为二进制数据,然后使用ser.write()方法向串口写入数据。
需要注意的是,在使用readline()方法读取数据时,如果没有读取到完整的一行数据,该方法会一直阻塞等待。可以通过设置timeout参数来控制阻塞时间,如果超过了指定的时间仍然没有读取到完整的一行数据,则该方法会返回空字符串。
另外,在使用write()方法向串口写入数据时,需要将字符串先转换为二进制数据再发送。在上面的代码中,使用了'Received: {}'.format(line)来构造要发送的字符串,其中{}会被替换为line变量的值。最后使用encode()方法将字符串转换为二进制数据。
相关文章