制作一个串口助手 | python + pyqt5

2023-05-16

目录

一、背景

1.1、开发流程图

二、前提

2.1、关于环境

2.2、关于源码

三、步骤

3.1、使用pyqt创建一个.ui界面并生成.py文件

3.2、创建两个.py文件,一个用来继承ui界面生成的.py类,一个用来实现各种功能

3.3、各个功能代码

3.3.1、打开串口

3.3.2、关闭串口

3.3.3、获取串口号

3.3.4、发送数据

3.3.5、接收数据

3.3.6、数据显示

3.4、qtdersigner界面

3.5、美化后运行的程序

3.6、打包.py为.exe

3.7、打包为.exe后运行

3.8、串口测试连接图

四、结果

4.1、代码运行结果

4.2、打包后运行结果

4.3、将.py文件-->.exe文件可能遇到的问题

4.3.1、UPX is not available

4.3.2、pip命令版本不匹配,需要升级pip版本


一、背景

        串口助手是串口通信使用的工具。为整合知识,打算做个串口助手。

1.1、开发流程图

如下图1:

图1

二、前提

2.1、关于环境

操作系统:win 10

编辑器:pycharm edu

语言及版本:python 3.8

使用的库:pyqt5、sys、time等等库        

实现思路:需要实现什么功能就做什么功能,最后把功能整合在一起

前提:在pycharm 中配置好pyqt及其工具

最终实现的功能:串口选择、串口状态显示、发送数据、定时发送发送区数据(定时时间可修改)、接收数据、数据显示(ASCII)、数据显示自动换行、数据显示显示时间、清除接收区

2.2、关于源码

源码比较多,需要源码借鉴的评论区留言,私聊我,进行源码分享。

三、步骤

3.1、使用pyqt创建一个.ui界面并生成.py文件

如下图2:

 图2

3.2、创建两个.py文件,一个用来继承ui界面生成的.py类,一个用来实现各种功能

如下图3:

 图3

3.3、各个功能代码

3.3.1、打开串口

def open_port(port_name, baudrate, bytesize, stop_bit, parity):
    ser = serial.Serial(
        port = port_name,
        baudrate=baudrate,
        bytesize=bytesize,
        stopbits=stop_bit,
        parity=parity,
        rtscts=False,
        xonxoff=False,
        timeout=None,
        write_timeout=None
    )
    return ser

3.3.2、关闭串口

    def close_port(self):
        if self.current_port is not None:
            self.time.stop()
            self.serial_thread.ser = None

            self.current_port.close()

            self.current_port = None

            self.ui.port_status.setText("closed")
            self.ui.open_port.setDisabled(False)
            self.ui.send_data.setDisabled(True)
            self.ui.close_port.setDisabled(True)

3.3.3、获取串口号

import serial
import serial.tools.list_ports

def serial_port():
    port_list = []
    portlist  = list(serial.tools.list_ports.comports())
    for port in portlist:
        port_list.append(port.device)
    return port_list

3.3.4、发送数据

    def send_data(self):
        if self.ui.send_select.isChecked():
            timer = self.ui.send_time.value()
            self.time.start(timer)
        else:
            self.time.stop()
        data = self.ui.input_data.toPlainText()
        print("这是发送的数据:"+data)
        self.current_port.write(data.encode('gbk'))

3.3.5、接收数据

class SerialThread(QThread):
    data_arrive_signal = pyqtSignal()

    def __init__(self, ser=None):
        super().__init__()
        self.ser = ser
        self.data = ''

    def run(self):
        while True:
            if self.ser and self.ser.in_waiting:
                self.data += self.ser.read_all().decode('gbk')
                print(self.data)
                self.data_arrive_signal.emit()

3.3.6、数据显示

    def show_data(self):
        self.recive_data = self.serial_thread.data
        self.zdhh_data += self.recive_data
        now_time = datetime.datetime.now()

        if self.ui.zdhh.isChecked():
            self.zdhh_data += '\n'
            self.ui.show_ser_data.setText(self.zdhh_data)
            print("这里是显示的数据:"+self.zdhh_data)

        if self.ui.show_time.isChecked():
            print(self.ui.show_time.isChecked())
            time_data = str(now_time) + self.zdhh_data
            print(time_data)
            self.ui.show_ser_data.setText(time_data)

        if self.ui.zdhh.isChecked() and self.ui.show_time.isChecked():
            self.zdhh_data += '\n'
            time_data = str(now_time) + self.zdhh_data
            self.ui.show_ser_data.setText(time_data)
        else:
            self.ui.show_ser_data.setText(self.recive_data)
            print("这里是显示的数据:"+self.recive_data)

3.4、qtdersigner界面

如下图4:

图4

3.5、美化后运行的程序

如下图5:

图5

3.6、打包.py为.exe

如下图6:

图6

3.7、打包为.exe后运行

如下图7:

 图7

3.8、串口测试连接图

如下图8:

两个串口的RXD和TXD需要互接,进行数据的互传,在测试时这样使用比用单片机发数据更快。

四、结果

4.1、代码运行结果

同图6、7:

4.2、打包后运行结果

同图6、7:

4.3、将.py文件-->.exe文件可能遇到的问题

4.3.1、UPX is not available

解决办法:点这里

4.3.2、pip命令版本不匹配,需要升级pip版本

下载pyinstaller,在cmd命令行出现报错,会有提示建议,输入提示建议的命令即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

制作一个串口助手 | python + pyqt5 的相关文章

  • git分支管理开发

    1 master从来都只是最终合并的分支 xff1b 2 所有的其他分支都从master衍生 xff1b 3 在master分支直接修改 xff0c 有可能会造成所有分支的冲突 4 都是从master建立新分支 xff0c 修改测试通过后合
  • Docker的常用命令

    文章目录 目录 文章目录 前言 一 帮助命令 二 镜像命令 1 查看镜像 2 搜索镜像 3 下载镜像 4 删除镜像 三 容器命令 1 启动容器 2 查看容器 3 退出容器 4 删除容器 5 启动和停止容器 四 常用的其它命令 后台运行 查看
  • spring cloud gateway网关和链路监控

    文章目录 目录 文章目录 前言 一 网关 1 1 gateway介绍 1 2 如何使用gateway 1 3 网关优化 1 4自定义断言和过滤器 1 4 1 自定义断言 二 Sleuth 链路追踪 2 1 链路追踪介绍 2 2 Sleuth
  • sso单点登录

    文章目录 目录 文章目录 前言 一 sso结构实现 二 使用步骤 2 1 建一个spring cloud 项目 2 2 common下的core的配置 2 3 实现系统的业务微服务 2 4 sso模块的编写 总结 前言 单点登录 Singl
  • windows版 redis在同一局域网下互联

    项目场景 xff1a 同一局域网下各个主机互相连接同一个redis 问题描述 无法连接 原因分析 xff1a 没有放行对方的地址 解决方案 xff1a 修改配置文件 最重要的一步如下 然后把 redis windows conf的文件也照上
  • mysql数据库之存储过程

    文章目录 目录 文章目录 前言 一 存储引擎 1 1 InnoDB 1 2 MyISAM 二 存储过程 2 1 存储过程 2 1 1 创建存储过程 2 1 2 调用存储过程 2 1 3 查看存储过程 2 1 4 删除存储过程 2 2 语法
  • 秒杀的理解

    项目场景 xff1a 秒杀限时或者限量的处理一件商品 实现理解 xff1a 秒杀业务流程 如果使用java逻辑判断减库存的话 xff0c 会出现多个线程同时修改好库存 xff0c 然后存入相同的修改值 实际上是卖出了多个 但是数据库只扣了一
  • VUE3的setup函数

    文章目录 目录 文章目录 前言 一 setup函数是什么 xff1f 二 使用步骤 三 vue3中文文档和面向vue3的组件库 总结 前言 Vue3是一个面向数据驱动的渐进式JavaScript框架 xff0c 其的设计理念包括简洁 灵活和
  • 几种实现promise队列的方法

    第一种 xff1a 使用map实现promise队列 初始值为promise resolve 为成功状态 xff0c 每次成功都返回一个promise xff0c 依次执行 span class token keyword function
  • SD卡在烧录镜像系统之后恢复正常使用

    问题 xff1a 我们知道发现镜像系统烧录完毕以后将SD卡插入电脑 xff0c 电脑会找不到SD卡 xff0c 也无法读取SD卡显示 实际是可以的只是不能正常显示出来 xff0c 这是正常现象 如果我们的开发板 xff08 如jetson
  • 手工制作F450四旋翼无人机的工具准备以及apm调参 GPS调参等相关工作

    F450 是一款大量航模爱好者都很喜欢的一款无人机结构 xff0c 很多想动手制作无人机的同学 xff0c 都是从这一款机型开始的 xff0c 当然我也是 xff0c 在制作一款无人机 xff0c 我们需要以下部件准备 xff0c 1 xf
  • git合并分支

    前提 xff1a 所有开发在develop xff0c 最后合并到master 1 从master建立本地分支temp xff0c git checkout b temp xff0c 这个temp分支不要发布到远程仓库 xff1b 2 在t
  • Java基础笔记一

    Java基础笔记一 本文章是作者学习B站系列视频 狂神说Java 的记录笔记与心得 xff0c 创作不易 xff0c 希望能够得到您的支持 Java程序运行机制 编译型 xff1a 完整编译 Java编译器将 java 文件编译为 clas
  • 树莓派4b入门以及各种系统烧录问题分享

    文章目录 前言一 买一个树莓派二 上系统三 系统烧录故障情况1 固件问题2 验证失败3 插入主板 xff0c 报错 xff1a VFS Unable to mount root fs on unknown block 179 2 1 重新格
  • gazebo保存world时出现问题

    gazebo保存world时出现没反应 xff0c 以为卡死了 xff0c 可最小化的时候能看到保存界面弹出 可以每次最小化再放大 xff0c 以此刷新界面 xff0c 一步一步保存
  • Windows向日葵连接Ubuntu时“连接已断开”解决方案

    环境 控制端 xff1a Windows10 系统 xff0c 向日葵版本12 5 1 44969 被控端 xff1a Ubuntu20 04 系统 xff08 默认gdm3桌面 xff09 xff0c 向日葵版本11 0 0 36662
  • [调参神器]使用VOFA+上位机进行PID调参(附下位机代码)

    1 VOFA 43 是啥 简单地来说 xff0c VOFA 43 是一个超级串口助手 xff0c 除了可以实现一般串口助手的串口数据收发 xff0c 它还可以实现数据绘图 xff08 包括直方图 FFT图 xff09 xff0c 控件编辑
  • visual studio 2022 调试时如何1、打开监视窗口;2、监视窗口无法输入问题

    1 如何打开监视窗口 xff1a 注意要先点击调试 xff0c 不然没有这个窗口 2 如果窗口显灰色 xff0c 说明当前调试状态没有中断 xff0c 而只有中断的时候才可以输入或修改 3 点击调试里的 全部中断 后就可以输入了 xff01
  • 单片机学习——定时器/计数器

    单片机必学系列 单片机学习 中断系统 单片机学习 存储器详解 xff08 程序存储器 片内RAM 拓展RAM EEPROM xff09 单片机学习 定时器 计数器 单片机学习 A D转换 更新ing 单片机学习 定时器 计数器 单片机必学系
  • C++的动态多态性理解

    多态 xff1a 指允许不同类的对象对同一消息做出响应 即同一消息可以根据发送对象的不同而采用多种不同的行为方式 xff08 发送消息就是函数调用 xff09 像我们之前学的函数重载和符号重载都是多态现象 例 xff1a 使用运算符 43

随机推荐

  • Hadoop伪分布集群配置(我用的是VMwareWorkstation)

    1 虚拟机环境准备 xff1a 1 0 xff09 首先准备好一台已经安装好了的虚拟机 我这里用的是Centos 2 0 xff09 安装 vim 编辑器 使用 yum y install vim 也可以直接用vi 注意 xff1a 安装好
  • fork函数的用法

    1 头文件 include lt sys types h gt inlcude lt unistd h gt 2 函数原型 pid t fork void 函数参数 xff1a void 3 fork函数功能 fork xff08 xff0
  • gitee配置流水线实现自动打包vue

    1 任务编排 xff1a 第1步 xff1a 创建一个构建任务 xff0c 选择nodejs xff1b 第2步 xff1a 编写构建命令 设置NPM源 xff0c 提升安装速度 npm config set registry https
  • Linux操作系统:Firewalld防火墙

    Linux操作系统 xff1a Firewalld 防火墙 课堂引入 xff1a Linux防火墙是通过netfilter来处理的 xff0c 它是内核级别的框架 iptables被作为netfilter的用户态抽象层 xff0c ipta
  • 全景图拼接

    目录 一 图像拼接基本流程 二 RANSAC 随机一致性采样 2 1 RANSAC基本思想 xff1a 数据中包含正确的点和噪声点 xff0c 合理的模型应该能够在描述正确数据点的同时摒弃噪声点 2 2 RANSAC基本流程 xff1a 2
  • 11. JS操作节点续(2) + DOM 重点核心

    关于dom操作 xff0c 我们主要针对于元素的操作 主要有创建 增 删 改 查 属性操作 事件操作 DOM xff1a 我们获取过来的DOM元素是一个对象 xff08 object xff09 xff0c 所以称为 文档对象模型 创建 d
  • Docker-使用篇

    文章目录 一 Docker镜像和容器 镜像命令镜像下载 xff08 pull xff09 查看镜像 xff08 images xff09 镜像搜索 xff08 search xff09 删除镜像 xff08 rmi xff09 容器命令新建
  • Rviz上发布的点位信息机器人不执行(网络配置原因)已解决

    在调试机器人时发现Rviz上发布的点位信息机器人没有执行 xff0c 经检查是由于网络配置原因 xff0c 本文记录解决方法 使用ssh将笔记本与实物机器人连接 xff0c 机器人中控使用的工控机 xff0c 机器人作为显示器和键盘输入 p
  • gazebo小车自主路径规划导航仿真

    gazebo小车自主路径规划仿真 在之前的文章中完成了对地图的构建 xff0c 接下来使用 Ros navgition完成机器人自主导航 首先是Ros navigation的下载安装 ros功能包 xff1a Navigation ros
  • 关于结构体对齐

    首先我们先了解一下各数据类型所占的字节数 x64系统 xff08 64位 xff09 x86系统 xff08 32位 xff09 在这里有一个很有意思的点 xff0c 我使用VS在x86与x64系统下运行出来的long类型所占据的空间都是4
  • 安装docker报出的错误及解决方案

    1 错误一 xff1a 解决方案 xff1a yum erase podman buildan yum install y docker ce allowerasing 重启服务 systemtl restart docker yum源的安
  • make、makefile的使用解释(Linux项目自动化构建工具)

    本文所使用系统为Linux centos 7 makefile是一个文件 里面包含了 xff1a 1 文件与文件的依赖关系 2 文件与文件的依赖方法 为什么需要包含文件与文件的依赖方法和依赖方法呢 xff1f 一个工程中的源文件不计数 xf
  • elementUI中neditor第一次加载无法正常赋值的解决方法

    1 lt neditor v if 61 34 neditorLoad 34 v model 61 34 formFields content 34 class 61 34 wd editor 34 gt 加上v if 61 34 nedi
  • Gazebo仿真中光源的设置

    目录 写在前面官方文档链接point类型directional类型spot类型 写在前面 最近研究在Gazebo中仿真px4 xff0c 使用Apriltag ros包对Apriltag二维码检测的时候发现光源对检测影响非常大 xff0c
  • 使用Java操作Hbase

    目录 修改hosts文件 导入jar包 配置hbase信息 xff0c 连接hbase数据库 创建表 删除表 获取namespace 获取tables 添加数据 查询表中的数据 查询表中所有数据 关闭流 修改hosts文件 位置 xff1a
  • CAN协议国际标准化协议部分总结(一)

    前言 xff1a 本文主要是对CAN协议中ISO11898做一个简短的总结 ISO11898 ISO11519 ISO15765 CAN协议在OSI模型中包含三层 xff0c 物理层 数据链路层和传输层 各层中CAN定义内容可参考下图 其协
  • STM32 串口 DMA 数据读取(详细代码)

    最近重新开始学32 xff0c 搞到串口 DMA 的时候 xff0c 数据读取卡了很长一段时间 xff0c 最终 xff0c 功夫不负有心人终于搞出来了 在此以记录一下 xff0c 方便以后查询使用 在调试的过程中也遇到了很多bug xff
  • 在阿里云购买Linux服务器,配置宝塔环境,全图文,最最详细图解,保姆级教学

    在阿里云购买Linux服务器 xff08 CentOs 7 xff09 xff0c 配置宝塔环境 一 在阿里云购买CentOs服务器 Linux系统 CentOS是免费的 开源的 可以重新分发的开源操作系统 xff0c CentOS xff
  • (Linux)FreeRTOS(任务)

    任务调度器 调度器就是使用相关的调度算法来决定当前需要执行的任务 xff0c 调度器总是在所有处于就绪列表的任务中 xff0c 选择具有最高优先级的任务来执行 抢占式调度 xff1a 主要是针对优先级不同的任务 xff0c 每个任务都有一个
  • 制作一个串口助手 | python + pyqt5

    目录 一 背景 1 1 开发流程图 二 前提 2 1 关于环境 2 2 关于源码 三 步骤 3 1 使用pyqt创建一个 ui界面并生成 py文件 3 2 创建两个 py文件 xff0c 一个用来继承ui界面生成的 py类 xff0c 一个