使用PySide2建立简单的串口测试工具。
1、建立界面
新建项目文件夹 serialtool,然后用VSCode打开并新建ui文件夹,右键使用 New Form 使用QtDesigner建立如下界面: 然后选择菜单 窗体->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()
|
- 效果如下:
代码仓库:https://github.com/makerinchina-iot/Monkey-Helper-Tools-py