1. 首页
  2. 应用软件
  3. Python

PySide2示例-简单的串口工具

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

1、建立界面

新建项目文件夹 serialtool,然后用VSCode打开并新建ui文件夹,右键使用 New Form 使用QtDesigner建立如下界面:

image-20220317090240121

然后选择菜单 窗体->View Python Code,将代码复制后保存到ui文件夹下 serial_ui.py。

2、功能逻辑
  • 主文件

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

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组件进行串口操作,首先是显示当前电脑可以使用的串口号到下拉列表控件中:

    def __init__(self):
        ...
        serial_list = QSerialPortInfo.availablePorts()
                for port in serial_list:
                    self.comboSerialPort.addItem(port.portName())

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

    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('打开')

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

  • 数据发送功能

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

    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信号即可:

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)
  • 最后简单美化下界面
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

版权声明:本文为博主原创文章,转载请声明。

发表评论

邮箱地址不会被公开。 必填项已用*标注

联系我们

MakerInChina
邮箱:bally909@aliyun.com