使用PySide2建立简单的串口测试工具。

1、建立界面

新建项目文件夹 serialtool,然后用VSCode打开并新建ui文件夹,右键使用 New Form 使用QtDesigner建立如下界面: image-20220317090240121 然后选择菜单 窗体->View Python Code,将代码复制后保存到ui文件夹下 serial_ui.py。

2、功能逻辑
  • 主文件

添加主文件main.py,然后编写代码调用界面:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import sys
from PySide2.QtWidgets import *
from PySide2.QtCore import *
from PySide2.QtGui import *

from ui.serial_ui import Ui_MainWindow

class MainWindow(Ui_MainWindow, QMainWindow):
def __init__(self):
super(MainWindow,self).__init__()
self.setupUi(self)


if __name__ == '__main__':
app = QApplication(sys.argv)

mwin = MainWindow()
mwin.show()

sys.exit(app.exec_())
  • 打开串口

这里使用PySide2中的QtSerialPort组件进行串口操作,首先是显示当前电脑可以使用的串口号到下拉列表控件中:

1
2
3
4
5
def __init__(self):
...
serial_list = QSerialPortInfo.availablePorts()
for port in serial_list:
self.comboSerialPort.addItem(port.portName())

然后新建串口对象并关联打开串口操作到按钮信号:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def __init__(self):
...
self.serial = QSerialPort()

self.btnConnect.setText('打开')
self.btnConnect.clicked.connect(self.open_serial)

def open_serial(self):
self.serial.setPortName(self.comboSerialPort.currentText())
if self.btnConnect.text() == '打开':
self.serial.open(QIODevice.ReadWrite)
self.serial.setBaudRate(int(self.comboBaudrate.currentText()))
self.btnConnect.setText('关闭')
else:
self.serial.close()
self.btnConnect.setText('打开')

这里有一点注意的是需要先打开串口,然后设置其波特率等参数。

  • 数据发送功能

串口打开后就可以操作串口发送数据,将发送功能关联到发送按钮信号:

1
2
3
4
5
6
7
8
9
def __init__(self):
...
self.btnSend.clicked.connect(self.send_data)

def send_data(self):
if self.serial.isOpen():
str = self.editSend.text()+'\r\n'
ba = QTextCodec.codecForLocale().fromUnicode(str)
self.serial.write(ba)

这里需要将python字符串转换为Qt的QByteArray格式进行发送。

  • 数据接收

数据接收直接关联接收函数到串口的 ReadyRead信号即可:

1
2
3
4
5
6
7
8
def __init__(self):
...
self.serial.readyRead.connect(self.read_data)

def read_data(self):
ba = self.serial.readAll()
str = QTextCodec.codecForLocale().toUnicode(ba.data())
self.editRecv.appendPlainText(str)
  • 最后简单美化下界面
1
2
3
4
5
6
7
8
if __name__ == '__main__':
...
qtmodern.styles.dark(app)

mwin = MainWindow()

win = qtmodern.windows.ModernWindow(mwin)
win.show()
  • 效果如下: image-20220317094813153

代码仓库:https://github.com/makerinchina-iot/Monkey-Helper-Tools-py