基于python编写一个串口数据输出程序

作者:

文章目录
  • 目录
    • 前言
      • 开发起因
      • 功能介绍
      • 开发环境
      • 项目地址
      • 目录结构
    • 使用
      • 1.配置
      • 2.运行
    • 源码
      • config.json
      • main.py (外置配置版)
      • com_loop_link.py (写死版)

    串口调试工具,在串口断开后需要重新选择进行连接,这个过程会耗费一定的时间,而我们的模块上电就开始打印各种日志,导致部分日志丢失。所以就有了这个程序

    基于python3实现监听指定端口,获取串口打印数据存入log.txt文件,并自动重连。

    • 操作系统:win10
    • 语言:python3.8.15
    • 编辑器:VS Code
    • 依赖库:pyserial (pip install pyserial)

    github gitee

    • config.json (配置文件)
    • log.txt (日志文件)
    • main.exe (编译打包好的程序)
    • main.py (程序源码)
    • package.json (程序打包的相关配置 auto-py-to-exe)

    自行修改为合适的配置即可。

    {
        // 连接的串口名
        "serial_port": "COM17",
        // 波特率
        "serial_baudrate": 115200,
        // 断开连接后的重连间隔(s),太短电脑可能会蓝屏,注意!
        "interval_time": 1
    }
    

    双击main.exe即可。或搭建环境,运行 python main.py

    {
        "serial_port": "COM17",
        "serial_baudrate": 115200,
        "interval_time": 1
    }
    

    # 开发起因:串口调试工具,在串口断开后需要重新选择进行连接,这个过程会耗费一定的时间,而我们的模块上电就开始打印各种日志,导致部分日志丢失。所以就有了这个程序
    # 开发环境 py3.8
    # 依赖库 pyserial
    import serial as pyserial
    import time
    from datetime import datetime
    import sys
    import json
    
    # 连接的串口名
    serial_port = 'COM17'
    # 波特率
    serial_baudrate = 115200
    # 断开连接后的重连间隔(s),太短电脑可能会蓝屏,注意!
    interval_time = 1
    
    # 打开本地文件
    with open('config.json', 'r', encoding='utf-8') as f:
        # 通过load方法将文件内容读入到字典中
        data = json.load(f)
    
    try:
        serial_port = data['serial_port']
        serial_baudrate = data['serial_baudrate']
        interval_time = data['interval_time']
        print("[当前配置]n串口名:{}n波特率:{}n重连间隔(s):{}".format(serial_port, serial_baudrate, interval_time))
        f.close()
    except Exception as e:
        print(e)
        print("解析config.json出错,请检查配置是否正确")
        sys.exit()
    
    def get_current_date_string(format="%Y-%m-%d"):
        """返回当前日期的字符串表示形式,格式为 YYYY-MM-DD"""
        return datetime.today().strftime(format)
    
    while True:
        try:
            ser = pyserial.Serial(serial_port, serial_baudrate)
            if ser.isOpen():
                print("串口已连接")
                break
        except pyserial.SerialException:
            print("串口连接失败,请检查串口是否正确连接")
            time.sleep(interval_time)
    
    while True:
        try:
            # 忽略无法解码的字节
            data = ser.readline().decode('utf-8', 'ignore')
            print(data)
            file_path = "log-" + get_current_date_string() + ".txt"
            # 日志写入本地
            with open(file_path, 'a') as f:
                f.write(data)
            f.close()
        except pyserial.SerialException:
            print("串口断开,正在尝试重新连接", end="")
            while True:
                try:
                    ser = pyserial.Serial(SERIAL_PORT, SERIAL_BAUDRATE)
                    if ser.isOpen():
                        print("n串口已重新连接")
                        break
                except pyserial.SerialException:
                    print(".", end="", flush=True)
                    time.sleep(interval_time)
    
    

    # 开发起因:串口调试工具,在串口断开后需要重新选择进行连接,这个过程会耗费一定的时间,而我们的模块上电就开始打印各种日志,导致部分日志丢失。所以就有了这个程序
    # 开发环境 py3.8
    # 依赖库 pyserial
    import serial as pyserial
    import time
    
    # 连接的串口名
    SERIAL_PORT = 'COM17'
    # 波特率
    SERIAL_BAUDRATE = 115200
    # 断开连接后的重连间隔,太短电脑可能会蓝屏,注意!
    sleep_time = 1
    
    while True:
        try:
            ser = pyserial.Serial(SERIAL_PORT, SERIAL_BAUDRATE)
            if ser.isOpen():
                print("串口已连接")
                break
        except pyserial.SerialException:
            print("串口连接失败,请检查串口是否正确连接")
            time.sleep(sleep_time)
    
    while True:
        try:
            # 忽略无法解码的字节
            data = ser.readline().decode('utf-8', 'ignore')
            print(data)
            # 日志写入本地
            with open('log.txt', 'a') as f:
                f.write(data)
        except pyserial.SerialException:
            print("串口断开,正在尝试重新连接", end="")
            while True:
                try:
                    ser = pyserial.Serial(SERIAL_PORT, SERIAL_BAUDRATE)
                    if ser.isOpen():
                        print("n串口已重新连接")
                        break
                except pyserial.SerialException:
                    print(".", end="", flush=True)
                    time.sleep(sleep_time)
    
    

    到此这篇关于基于python编写一个串口数据输出程序的文章就介绍到这了,更多相关python串口数据输出程序内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • 基于Python+PyQt5实现串口数据采集和显示
    • Python读取串口数据的实现方法
    • python读取串口数据有几种方法
    • python串口读取数据的实例
    • python 读取串口数据的示例
    • Python Serial串口基本操作(收发数据)
    • Python 读取串口数据,动态绘图的示例

    站内搜索