python3-发送和接收串口数据

1,036 阅读2分钟

来自python3学习笔记,有不正确的地方大家多多指教

目的:目前在测试一款产品,需要使用串口发送指令来升级,于使联想到是否能够通过python来发送接收串口的数据,达到自动升级,这篇文章主要写了如何通过python来发送和接收串口数据。

测试环境:

  • 安装pyserial:

cmd输入:python -m pip install pyserial,安装完成后如下图所示:

image.png

  • 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()求得的结果进行遍历。
  • 要求有足够的内存存储获取到的数据,若内存不足无法使用此方法。