返回

玩转串口助手:QT Creator + Python实战宝典

后端

Python+PySide2+QT开发串口助手:打造你的串口通信利器

在当今科技飞速发展的时代,串口通信已经成为工业自动化、物联网等多个领域的必备技术。它为远程设备之间的数据传输提供了便捷的方式。为了帮助开发者快速上手串口开发,本文将手把手教你使用Python、PySide2和QT Creator打造一个功能强大的串口助手。

1. 安装开发环境和库

要开始串口助手之旅,你首先需要安装以下环境和库:

  • Python 3.6或更高版本
  • PySide2库(使用pip install pyside2安装)
  • QT Creator(从官方网站下载安装包)

2. 创建QT项目

安装好开发环境后,打开QT Creator,新建一个项目。选择QT Widgets Application模板,并为你的项目取个响亮的名字。

3. 添加串口库

为了在项目中使用串口功能,你需要在.pro文件中添加以下内容:

LIBS += -L$$PWD/../../PySide2/Lib -lPySide2

4. 编写代码

项目的核心代码位于main.py文件中。在文件中粘贴以下代码:

# 导入必要的模块
import sys
from PySide2 import QtCore, QtGui, QtWidgets

# 定义串口类
class SerialPort(QtCore.QObject):
    # 定义数据接收信号
    dataReceived = QtCore.Signal(bytes)

    def __init__(self, portName):
        super().__init__()
        # 创建串口对象
        self.port = QtCore.QSerialPort(self)
        # 设置串口参数
        self.port.setPortName(portName)
        self.port.setBaudRate(9600)
        self.port.setDataBits(QtCore.QSerialPort.Data8)
        self.port.setParity(QtCore.QSerialPort.NoParity)
        self.port.setStopBits(QtCore.QSerialPort.OneStop)
        self.port.setFlowControl(QtCore.QSerialPort.NoFlowControl)
        # 连接错误处理和数据接收槽函数
        self.port.errorOccurred.connect(self.handleError)
        self.port.readyRead.connect(self.readData)

    def openPort(self):
        # 打开串口
        if not self.port.isOpen():
            self.port.open(QtCore.QIODevice.ReadWrite)

    def closePort(self):
        # 关闭串口
        if self.port.isOpen():
            self.port.close()

    def writeData(self, data):
        # 写入数据到串口
        self.port.write(data)

    def readData(self):
        # 读取串口数据
        data = self.port.readAll()
        # 发射数据接收信号
        self.dataReceived.emit(data)

    def handleError(self, error):
        # 处理串口错误
        print(error)

# 定义主窗口类
class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        # 设置窗口标题和大小
        self.setWindowTitle("串口助手")
        self.resize(640, 480)

        # 创建状态栏
        self.statusBar = QtWidgets.QStatusBar()
        self.setStatusBar(self.statusBar)

        # 创建串口对象并打开串口
        self.serialPort = SerialPort("COM3")
        self.serialPort.dataReceived.connect(self.displayData)
        self.serialPort.openPort()

        # 创建中央窗口小部件
        self.centralWidget = QtWidgets.QWidget()
        self.setCentralWidget(self.centralWidget)

        # 创建网格布局
        self.gridLayout = QtWidgets.QGridLayout()
        self.centralWidget.setLayout(self.gridLayout)

        # 创建文本编辑框
        self.textEdit = QtWidgets.QTextEdit()
        self.gridLayout.addWidget(self.textEdit, 0, 0, 1, 2)

        # 创建输入行编辑器
        self.lineEdit = QtWidgets.QLineEdit()
        self.gridLayout.addWidget(self.lineEdit, 1, 0)

        # 创建发送按钮
        self.sendButton = QtWidgets.QPushButton("发送")
        self.sendButton.clicked.connect(self.sendData)
        self.gridLayout.addWidget(self.sendButton, 1, 1)

    def displayData(self, data):
        # 在文本编辑框中显示接收到的数据
        self.textEdit.append(data.decode())

    def sendData(self):
        # 获取输入的数据并发送到串口
        data = self.lineEdit.text().encode()
        self.serialPort.writeData(data)

# 主函数
if __name__ == "__main__":
    # 创建QApplication对象
    app = QtWidgets.QApplication(sys.argv)
    # 创建主窗口对象
    window = MainWindow()
    # 显示主窗口
    window.show()
    # 进入事件循环
    sys.exit(app.exec_())

5. 运行程序

现在,一切准备就绪!点击QT Creator中的运行按钮,你的串口助手将跃跃欲试地等待你探索。

  • 选择串口号: 在界面中选择你连接设备的串口号。
  • 打开串口: 点击“打开串口”按钮,开始与设备通信。
  • 发送数据: 在文本框中输入要发送的数据,然后点击“发送”按钮。
  • 接收数据: 接收到的数据将显示在文本框中。

结语

恭喜你,你已经成功打造了一个功能强大的串口助手。通过它,你可以轻松地与串口设备进行数据传输和通信。为了帮助你进一步深入了解串口助手,我们准备了以下常见问题解答:

5个常见的串口助手问题解答

1. 如何更改串口参数(例如波特率)?
在MainWindow类中,修改SerialPort对象的构造函数参数,传入新的波特率和其他参数值即可。

2. 如何处理串口错误?
在SerialPort类中,handleError方法负责处理串口错误。你可以根据需要在这个方法中添加自定义错误处理逻辑。

3. 如何在串口助手界面中添加其他功能,如保存接收到的数据?
你可以根据自己的需求扩展MainWindow类,添加菜单、工具栏或其他自定义功能。

4. 如何在不同的操作系统上使用串口助手?
PySide2支持跨平台开发,因此这个串口助手可以在Windows、macOS和Linux等操作系统上运行。

5. 如何集成其他第三方库来增强串口助手功能?
你可以使用pip安装第三方库并将其导入到main.py文件中,以扩展串口助手的功能。

现在,你已经掌握了创建和使用串口助手的全部知识。发挥你的创造力,定制你的串口助手,打造最适合你项目的工具!