当前位置:   article > 正文

制作一个串口助手 | python + pyqt5_怎么用python做出串口调试助手

怎么用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:

图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、打开串口

  1. def open_port(port_name, baudrate, bytesize, stop_bit, parity):
  2. ser = serial.Serial(
  3. port = port_name,
  4. baudrate=baudrate,
  5. bytesize=bytesize,
  6. stopbits=stop_bit,
  7. parity=parity,
  8. rtscts=False,
  9. xonxoff=False,
  10. timeout=None,
  11. write_timeout=None
  12. )
  13. return ser

3.3.2、关闭串口

  1. def close_port(self):
  2. if self.current_port is not None:
  3. self.time.stop()
  4. self.serial_thread.ser = None
  5. self.current_port.close()
  6. self.current_port = None
  7. self.ui.port_status.setText("closed")
  8. self.ui.open_port.setDisabled(False)
  9. self.ui.send_data.setDisabled(True)
  10. self.ui.close_port.setDisabled(True)

3.3.3、获取串口号

  1. import serial
  2. import serial.tools.list_ports
  3. def serial_port():
  4. port_list = []
  5. portlist = list(serial.tools.list_ports.comports())
  6. for port in portlist:
  7. port_list.append(port.device)
  8. return port_list

3.3.4、发送数据

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

3.3.5、接收数据

  1. class SerialThread(QThread):
  2. data_arrive_signal = pyqtSignal()
  3. def __init__(self, ser=None):
  4. super().__init__()
  5. self.ser = ser
  6. self.data = ''
  7. def run(self):
  8. while True:
  9. if self.ser and self.ser.in_waiting:
  10. self.data += self.ser.read_all().decode('gbk')
  11. print(self.data)
  12. self.data_arrive_signal.emit()

3.3.6、数据显示

  1. def show_data(self):
  2. self.recive_data = self.serial_thread.data
  3. self.zdhh_data += self.recive_data
  4. now_time = datetime.datetime.now()
  5. if self.ui.zdhh.isChecked():
  6. self.zdhh_data += '\n'
  7. self.ui.show_ser_data.setText(self.zdhh_data)
  8. print("这里是显示的数据:"+self.zdhh_data)
  9. if self.ui.show_time.isChecked():
  10. print(self.ui.show_time.isChecked())
  11. time_data = str(now_time) + self.zdhh_data
  12. print(time_data)
  13. self.ui.show_ser_data.setText(time_data)
  14. if self.ui.zdhh.isChecked() and self.ui.show_time.isChecked():
  15. self.zdhh_data += '\n'
  16. time_data = str(now_time) + self.zdhh_data
  17. self.ui.show_ser_data.setText(time_data)
  18. else:
  19. self.ui.show_ser_data.setText(self.recive_data)
  20. 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命令行出现报错,会有提示建议,输入提示建议的命令即可。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/325333
推荐阅读
相关标签
  

闽ICP备14008679号