开发者

python + pyqt5制作一个串口助手

开发者 https://www.devze.com 2023-04-05 09:17 出处:网络 作者: 等黄昏等你来
目录一、python背景1.1、开发流程图二、前提2.1、关于环境2.2、关于源码三、步骤3.1、使用pyqt创建一个.ui界面并生成.py文件3.2、创建两个.py文件,一个用来继承ui界面生成的.py类,一个用来实现各种功能3.3、各个功
目录
  • 一、python背景
    • 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:

                python + pyqt5制作一个串口助手

                图1

                二、前提

                2.1、关于环境

                操作系统:win 10

                编辑器:pycharm edu

                语言及版本:python 3.8

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

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

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

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

                2.2、关于源码

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

                三、步骤

                编程

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

                如下图2:

                python + pyqt5制作一个串口助手

                图2

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

                如下图3:

                python + pyqt5制作一个串口助手

                图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=www.devze.comparity,
                        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()www.devze.com

                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.isCheckePdaZAed():
                            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:

                python + pyqt5制作一个串口助手

                图4

                3.5、美化后运行的程序

                如下图5:

                python + pyqt5制作一个串口助手

                图5

                3.6、打包.py为.exe

                如下图6:

                python + pyqt5制作一个串口助手

                图6

                3.7、打包为.exe后运行

                如下图7:

                python + pyqt5制作一个串口助手

                图7

                3.8、串口测试连接图

                如下图8:

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

                python + pyqt5制作一个串口助手

                四、结果

                4.1、代码运行结果

                同图6、7:

                python + pyqt5制作一个串口助手

                4.2、打包后运行结果

                同图6、7:

                python + pyqt5制作一个串口助手

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

                4.3.1、UPX is not available

                解决办法:点这里

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

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

                到此这篇关于python + pyqt5制作一个串口助手的文章就介绍到这了,更多相关python 串口助手内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

                0

                精彩评论

                暂无评论...
                验证码 换一张
                取 消

                关注公众号