使用Python+PyQt5实现串口调试助手
本文将介绍如何使用Python和PyQt5提供的GUI工具包,快速搞定串口调试的问题。通过GUI界面,可以通过指定COM口、波特率等信息,方便地对串口设备进行通信和数据调试。
步骤一:安装PyQt5
在本地安装PyQt5是实现GUI编程的前提,可以使用pip或conda轻松安装 PyQt5:
pip install PyQt5 # pip的方式
conda install pyqt #conda的方式
步骤二:创建GUI窗口
基于PyQt5创建的界面,需要通过Qt Designer创建以及PyUIC转换。Qt Designer可以根据具体需求快速创建GUI界面,并通过UIC编译器将QT设计师设计的界面转换成PyQt5代码。或者直接使用Code生成面板代码。这里为了方便,直接使用纯粹的PyQt5创建界面。
# 导入PyQt5模块
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QTextEdit, QHBoxLayout, QVBoxLayout, QComboBox
from PyQt5.QtGui import QIcon
import sys
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.uiInit() # 初始化UI界面
def uiInit(self):
self.setWindowTitle('串口调试助手')
# main layout
mainLayout = QVBoxLayout()
# serial port selector
hLayoutPort = QHBoxLayout()
lbPort = QLabel('串口号:')
hLayoutPort.addWidget(lbPort)
cbbPortList = QComboBox()
for i in range(10):
cbbPortList.addItem("COM"+str(i+1))
hLayoutPort.addWidget(cbbPortList)
mainLayout.addLayout(hLayoutPort)
# baud selector
hLayoutBaud = QHBoxLayout()
lbBaud = QLabel('波特率:')
hLayoutBaud.addWidget(lbBaud)
self.cbbBaud = QComboBox()
self.cbbBaud.addItem("9600")
self.cbbBaud.addItem("115200")
hLayoutBaud.addWidget(self.cbbBaud)
mainLayout.addLayout(hLayoutBaud)
# control buttons
hLayoutCtrl = QHBoxLayout()
btnOpen = QPushButton('打开串口')
btnOpen.clicked.connect(self.openSerialPort)
hLayoutCtrl.addWidget(btnOpen)
btnClose = QPushButton('关闭串口')
btnClose.clicked.connect(self.closeSerialPort)
hLayoutCtrl.addWidget(btnClose)
mainLayout.addLayout(hLayoutCtrl)
# message display area
lbMsg = QLabel('串口数据:')
mainLayout.addWidget(lbMsg)
self.teRecv = QTextEdit()
mainLayout.addWidget(self.teRecv)
self.setLayout(mainLayout)
self.show()
def openSerialPort(self):
self.cbbBaud.setDisabled(True)
def closeSerialPort(self):
self.cbbBaud.setDisabled(False)
if __name__ == '__main__':
app = QApplication(sys.argv)
app.setWindowIcon(QIcon('serial.png'))
mw = MainWindow()
sys.exit(app.exec_())
步骤三:打开、关闭串口
实现串口打开功能需要用到Python + PySerial模块,PySerial是Python serial通信库,主要用于串口通信。可以通过以下命令安装PySerial:
pip install pyserial
打开串口的方式:
import serial
ser = serial.Serial(port='COM1', baudrate=9600)
ser.open()
其中,port和baudrate为参数,port用于指定串口号,baudrate用于指定波特率。除了常见的参数外,serial.Serial还支持其他控制串口的参数,如timeouts、stopbits、parity等。
关闭串口:
ser.close()
易错点:当发现串口无法正常关闭时,可以使用serial.Serial.close()命令来缓解此问题。
参考示例
这里提供一个涉及读写串口的示例,需要读者先安装好PySerial库:
import serial
ser = serial.Serial(port='COM1', baudrate=9600)
# 发送消息
ser.write("Message to Arduino".encode())
# 接收消息
while True:
if ser.in_waiting:
data = ser.readline()
print('Received:', data)
ser.close()
这个示例主要涉及到如何接收、发送消息,其中,"Message to Arduino".encode()用于将发送的消息转换成bytes格式。需要注意的是读取串口数据时需要使用非阻塞IO,否则会进入无限等待状态。
结语
本文已经详细介绍了如何使用Python + PyQt5创建GUI窗口,实现串口调试助手的开发过程。通过这个教程,你可以轻松地创建出一个串口调试助手,使调试更加方便快捷。如果你还没有尝试使用GUI工具,那么现在就是一个绝佳的机会!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用python+Pyqt5实现串口调试助手 - Python技术站