目录
一、背景
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 = Noneself.current_port.close()self.current_port = Noneself.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 serialimport serial.tools.list_portsdef 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 = serself.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.dataself.zdhh_data += self.recive_datanow_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_dataprint(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_dataself.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命令行出现报错,会有提示建议,输入提示建议的命令即可。