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

 更新时间:2025年10月24日 10:14:05   作者:Love丶伊卡洛斯  
这篇文章主要为大家详细介绍了如何基于python编写一个串口数据输出程序,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以了解下

前言

开发起因

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

功能介绍

基于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)

使用

1.配置

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

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

2.运行

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

源码

config.json

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

main.py (外置配置版)

# 开发起因:串口调试工具,在串口断开后需要重新选择进行连接,这个过程会耗费一定的时间,而我们的模块上电就开始打印各种日志,导致部分日志丢失。所以就有了这个程序
# 开发环境 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)

com_loop_link.py (写死版)

# 开发起因:串口调试工具,在串口断开后需要重新选择进行连接,这个过程会耗费一定的时间,而我们的模块上电就开始打印各种日志,导致部分日志丢失。所以就有了这个程序
# 开发环境 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 中开发pattern的string模板(template) 实例详解

    Python 中开发pattern的string模板(template) 实例详解

    这篇文章主要介绍了Python 中开发pattern的string模板(template) 实例详解的相关资料,需要的朋友可以参考下
    2017-04-04
  • Python利用多线程优化for循环的技巧分享

    Python利用多线程优化for循环的技巧分享

    多线程可以让程序同时执行多个任务,从而提高整体运行效率,这篇文章将详细介绍如何在Python中使用多线程来优化for循环,感兴趣的可以了解下
    2025-02-02
  • Python实现调用jar或执行java代码的方法详解

    Python实现调用jar或执行java代码的方法详解

    这篇文章主要介绍了Python实现调用jar或执行java代码的方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • python pymysql peewee关于时区问题分析

    python pymysql peewee关于时区问题分析

    这篇文章主要为大家介绍了python pymysql peewee关于时区问题分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Python判断远程服务器上Excel文件是否被人打开的方法

    Python判断远程服务器上Excel文件是否被人打开的方法

    这篇文章主要介绍了Python如何判断远程服务器上Excel文件是否被人打开,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • Python绘制茎叶图的示例代码

    Python绘制茎叶图的示例代码

    这篇文章主要为大家信息介绍了Python绘制茎叶图的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-01-01
  • Python使用lxml库实现高效处理XML和HTML

    Python使用lxml库实现高效处理XML和HTML

    lxml 是一个功能强大且高效的库,它基于 libxml2 和 libxslt 库,提供了简洁易用的 API 来处理 XML 和 HTML 文档,下面小编就来和大家详细讲讲它的具体使用吧
    2025-02-02
  • python 从csv读数据到mysql的实例

    python 从csv读数据到mysql的实例

    今天小编就为大家分享一篇python 从csv读数据到mysql的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • conda配置python虚拟环境的实现步骤

    conda配置python虚拟环境的实现步骤

    本文主要介绍了conda配置python虚拟环境的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Python入门教程(十一)Python中的运算符

    Python入门教程(十一)Python中的运算符

    这篇文章主要介绍了Python入门教程(十一)Python中的运算符,Python是一门非常强大好用的语言,也有着易上手的特性,本文为入门教程,需要的朋友可以参考下
    2023-04-04

最新评论