来自python3学习笔记,有不正确的地方大家多多指教
目的:目前在测试一款产品,需要使用串口发送指令来升级,于使联想到是否能够通过python来发送接收串口的数据,达到自动升级,这篇文章主要写了如何通过python来发送和接收串口数据。
测试环境:
- 安装pyserial:
cmd输入:python -m pip install pyserial,安装完成后如下图所示:
- python3环境
代码如下:
import time
import serial as serial
class DevicesUpgrade:
def __init__(self, serial_port: '', baud_rate: ''):
self.serial_port = serial_port
self.baud_rate = baud_rate
# 台灯强制升级
def constraint_upgrade(self):
# 设置打开的串口和波特率
ser = serial.Serial(self.serial_port, self.baud_rate, timeout=0.5)
print("打开的串口是:${0}" .format(ser.name))
# 发送指令————具体的指令内容这边不写出来
ser.write(('......').encode('utf-8'))
while is_found is True:
# 输出全部log
full_data = ser.readall()
# 将输出的log根据换行符切割
split_data = full_data.splitlines()
# 将切割好的log循环遍历输出到文件中
for data in split_data:
print(data)
if __name__ == '__main__':
devices_upgrade = DevicesUpgrade("COM14", str(115200))
for i in range(3):
devices_upgrade.constraint_upgrade()
知识点:
以上内容中涉及到方法readall(),还有两种方法也可以读到串口的数据,分别是readline()、readlines()
readall():
- 读取整个文件,返回的是一个字符串,字符串包括文件中的所有内容。
- 想要分离每行的数据的话,可以使用标志性的字符串进行切割(以上内容就运用了该方法)。
- 要求有足够的内存存储获取到的数据,若内存不足无法使用此方法。
readline():
- 每次读取下一行文件。
- 可将每一行数据分离。
- 主要使用场景是当内存不足时,使用readline()可以每次读取一行数据,只需要很少的内存。
readlines():
- 一次性读取所有行文件。
- 可将每一行数据分离,从代码中可以看出,若需要对每一行数据进行处理,可以对readlines()求得的结果进行遍历。
- 要求有足够的内存存储获取到的数据,若内存不足无法使用此方法。