基于python的 串口数据输出程序(自动重连,快速获取)

Posted Love丶伊卡洛斯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于python的 串口数据输出程序(自动重连,快速获取)相关的知识,希望对你有一定的参考价值。

前言

开发起因:串口调试工具,在串口断开后需要重新选择进行连接,这个过程会耗费一定的时间,而我们的模块上电就开始打印各种日志,导致部分日志丢失。所以就有了这个程序
开发环境: py3.8, VS Code,win10
依赖库: pyserial
功能:指定连接的串口和波特率,接收串口数据(utf8),如果断连,则会按照设置的重连间隔循环连接,直至连上后恢复正常工作。
使用: python com_loop_link.py

源码

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的 串口数据输出程序(自动重连,快速获取)的主要内容,如果未能解决你的问题,请参考以下文章

ESP8266 /ESP32 连接到自己的MQTT服务器并实现自动重连 基于micropython

STM32F103VE基于标准库下DHT11数据串口打印输出

基于JMS实现activemq订阅的断线自动重连示例

用python编写与mysql数据库连接并实现断线重连的问题

小熊派开发笔记-串口读取RS485输出的土壤七合一传感器数据(基于STM32CubeMX)

基于LabVIEW和Python的USB串口数据传输