基于pyqtgraph及pyqt5的python的简易串口示波器,动态显示串口数据波形

本文介绍了一款基于Python的简易串口软件的设计与实现过程,包括遇到的问题及解决方法,如虚拟串口识别、pyqtgraph图形显示问题等。软件实现了串口通信的基本功能,并采用多线程技术提高交互流畅性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        在CSDN上学习了众多资料,调试了一个基于python的简易串口软件,作为一个学习的总结。整个软件并不复杂,汇集了不少网上找到的代码,甚至比较简陋,只是实现了预定的功能,还有很大优化的空间,希望能够给大家提供一个思路,供大家参考。

         程序虽然不大,却遇到了不少问题。(1)使用虚拟串口软件VSPD,在python中,使用serial.tools.list_ports却识别不到。后来在网上搜索一下,需要重启电脑。我先关机,再开机,似乎无效,重启后,终于了可以识别到虚拟的串口了。(2)  安装pyqtgraph后,使用pyqtgraph老是闪退,无法显示图形。在另外一台电脑却可以正常那运行。出现问题时,系统是win0,pyqtgraph版本是0.12.4,python版本3.7。使用官方自带例程

import pyqtgraph.examples

pyqtgraph.examples.run()

 打开ImageView也是闪退,后来把pyqtgraph降级到0.12.1,终于可以正常运行了。

         python程序显示界面如下:

        程序实现的主要功能有:(1)打开关闭串口 (2)显示及发送数据 (3)动态显示波形。使用主要技术包含(1)逻辑与界面相互分离 (2)多线程技术。

       程序使用的主要库:串口相关pyserial serial  绘图相关pyqtgraph 波形scipy 延迟time等。

   from scipy import signal
signal.square(2 * np.pi * f0 * t) # 产生方波
signal.sawtooth(2 * np.pi * f0 *t*0.01, 0.5) # 产生三角波

       逻辑与界面相互分离,并且重定义了关闭按钮,需要再次确认:

from SerialUI import Ui_MainWindow
from PyQt5 import QtCore,QtWidgets
import sys

class SerialTool(Ui_MainWindow,QtWidgets.QMainWindow):
    def __init__(self, parent = None):
        super(SerialTool, self).__init__(parent)
        self.setupUi(self)
        self.setupInit()

    def setupInit(self):
        pass

    def closeEvent(self,event):
        reply = QtWidgets.QMessageBox.question(self, 'Message', "确定要退出吗?",
                                     QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, QtWidgets.QMessageBox.No)
        # 判断返回值,如果点击的是Yes按钮,就关闭组件和应用,否则就忽略关闭事件
        if reply == QtWidgets.QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()

if __name__ == "__main__":
    QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
    app = QtWidgets.QApplication(sys.argv)
    myWin = SerialTool()
    myWin.show()
    sys.exit(app.exec_())

     为了避免界面卡顿,使用多个线程。(1)波形产生线程 (2)波形处理线程 (3))主页面通过timeout 接受串口数据,并且将数据发送给 接收窗口和波形处理线程。简易框架如下:

                                             

      自定义线程通过非科学方式,继承QThread的方式,定义子进程。在主函数里开启进程,并绑定槽函数。

     虚拟串口绑定串口2和串口3。在两个pycharm中分别运行程序,一个程序作为串口发送端,一个程序作为串口接收端。程序运行效果如下:

 

      正弦波显示:

       方波显示:

       三角波显示:

     程序也可以不接入串口,通过程序内部的按键显示绘图,分别显示正弦波,方波等。

      由于没有完整测试过,可能会有一些bug,主程序下载链接如下,只包含了main 函数,UI函数需要自己再整理:

https://download.csdn.net/download/wozai2513/87241727

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值