目錄
安裝依賴
功能包含
運行結果?
安裝依賴
pip install pyqt5 pyqtgraph pyserial?
功能包含
????????自動檢測串口設備,波特率選擇/連接斷開控制,數據發送/接收基礎框架,實時繪圖區域(需配合數據解析)
"""
PyQt5 上位機基礎框架
功能:串口通信+數據可視化+基礎控件
"""
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt, QTimer
from PyQt5.QtSerialPort import QSerialPort, QSerialPortInfo
import pyqtgraph as pgclass SerialMonitor(QMainWindow):def __init__(self):super().__init__()self.serial = QSerialPort()self.initUI()self.initSerial()def initUI(self):self.setWindowTitle("Serial Monitor")self.setGeometry(300, 300, 800, 600)# 中央控件central = QWidget()self.setCentralWidget(central)layout = QHBoxLayout(central)# 左側控制面板controlPanel = QGroupBox("串口設置")controlLayout = QVBoxLayout()self.portCombo = QComboBox()self.baudCombo = QComboBox()self.connectBtn = QPushButton("打開串口")self.sendText = QLineEdit()self.sendBtn = QPushButton("發送數據")# 填充控件self.baudCombo.addItems(['9600', '115200', '230400'])controlLayout.addWidget(QLabel("端口:"))controlLayout.addWidget(self.portCombo)controlLayout.addWidget(QLabel("波特率:"))controlLayout.addWidget(self.baudCombo)controlLayout.addWidget(self.connectBtn)controlLayout.addWidget(QLabel("發送數據:"))controlLayout.addWidget(self.sendText)controlLayout.addWidget(self.sendBtn)controlPanel.setLayout(controlLayout)# 右側繪圖區域self.plotWidget = pg.PlotWidget()self.plotWidget.setBackground('w')self.curve = self.plotWidget.plot(pen='b')layout.addWidget(controlPanel, 1)layout.addWidget(self.plotWidget, 3)# 信號連接self.connectBtn.clicked.connect(self.toggleSerial)self.sendBtn.clicked.connect(self.sendData)self.serial.readyRead.connect(self.readData)def initSerial(self):ports = QSerialPortInfo.availablePorts()self.portCombo.clear()for port in ports:self.portCombo.addItem(port.portName())def toggleSerial(self):if self.serial.isOpen():self.serial.close()self.connectBtn.setText("打開串口")else:self.serial.setPortName(self.portCombo.currentText())self.serial.setBaudRate(int(self.baudCombo.currentText()))if self.serial.open(QSerialPort.ReadWrite):self.connectBtn.setText("關閉串口")def readData(self):data = self.serial.readAll().data()# 示例:顯示原始數據(需根據協議解析)print(data.decode('ascii', errors='replace'))def sendData(self):text = self.sendText.text().encode()if self.serial.isOpen():self.serial.write(text)if __name__ == "__main__":app = QApplication(sys.argv)window = SerialMonitor()window.show()sys.exit(app.exec_())