0、前言

  串口数据图形化调试助手,这乍一听起来貌似还挺阔以的样子。那究竟是啥子呢?且听慢慢道来。事情的缘由是当前在做的一个项目中,在调试Mag(地磁)相关的Sensor。获取Mag的原始数据之后,首先要做的就是判断原始数据的质量如何,及是否是我们想要的数据,不仅要看数据是否在相应状况下处于合理的范围内,且数据的变化是否符合规律,所以呢需要一个能将原始数据实时绘制成图的工具。OK,那么来列举一下需求:

  1. 串口通讯:串口打印是嵌入式开发时重要的调试手段,所以此处数据也通过串口传输给上位机;
  2. 实时图表:将串口输出的数据实时绘图;
  3. 至少能够同时绘制更新三组数据(x轴、y轴、z轴)数据。

1、相关库的安装

pip install pyserial     #python 串口库
pip install pyqtgraph   #安装pyqtgraph
pip install PyQt5       #安装python QT

2、实战实例

#!/usr/bin/env python
#-*-coding:utf-8 -*-
import os
import sys
import time
import signal
import string
import pyqtgraph as pg
import array
import serial
import threading
import numpy as np
from queue import Queue
import rei = 0
q_mag_x = Queue(maxsize=0)
q_mag_y = Queue(maxsize=0)
q_mag_z = Queue(maxsize=0)
curve_num = 0;def Serial():global i;global q_mag_x;global q_mag_y;global q_mag_z;ret = b''while(True):n = mSerial.inWaiting()if(n):ret = mSerial.readline()print(ret)if len(ret):data_get = ret.decode('UTF-8')pattern = re.compile(r"[+-]?\d+(?:\.\d+)?")   # find the numdata_all = pattern.findall(data_get)print(data_all)for j in range(len(data_all)):if j==0:q_mag_x.put(data_all[j])if j==1:q_mag_y.put(data_all[j])if j==2:q_mag_z.put(data_all[j])def plotData():global i;if i < historyLength:data_x[i] = q_mag_x.get()if curve_num >= 2:data_y[i] = q_mag_y.get()if curve_num >= 3:data_z[i] = q_mag_z.get()i = i+1else:data_x[:-1] = data_x[1:]data_x[i-1] = q_mag_x.get()if curve_num >= 2:data_y[:-1] = data_y[1:]data_y[i-1] = q_mag_y.get()if curve_num >= 3:data_z[:-1] = data_z[1:]data_z[i-1] = q_mag_z.get()curve1.setData(data_x)curve2.setData(data_y)curve3.setData(data_z)def sig_handler(signum, frame):sys.exit(0)if __name__ == "__main__":curve_num = 3signal.signal(signal.SIGINT, sig_handler)signal.signal(signal.SIGTERM, sig_handler)app = pg.mkQApp()           # App Setupwin = pg.GraphicsWindow()   # Window Setupwin.setWindowTitle(u'pyqtgraph chart tool')win.resize(900, 600)        #window sizedata_x = array.array('i')data_y = array.array('i')data_z = array.array('i')historyLength = 160 data_x = np.zeros(historyLength).__array__('d')data_y = np.zeros(historyLength).__array__('d')data_z = np.zeros(historyLength).__array__('d')p = win.addPlot() p.showGrid(x=True, y=True)p.setRange(xRange=[0, historyLength], yRange=[-1000, 1000], padding=0)p.setLabel(axis='left',     text='y-mag')p.setLabel(axis='bottom',   text='x-time')p.setTitle('Serial Chart')curve1 = p.plot(data_x, pen='r')curve2 = p.plot(data_y, pen='g')curve3 = p.plot(data_z, pen='b')portx = 'COM1'bps = 115200mSerial = serial.Serial(portx, int(bps))if (mSerial.isOpen()):print("open success")mSerial.flushInput()else:print("open failed")serial.close()#Serial data receive threadth1 = threading.Thread(target=Serial)th1.setDaemon(True)th1.start()#plot timer definetimer = pg.QtCore.QTimer()timer.timeout.connect(plotData)timer.start(10)app.exec_()

3、实例演示

4、后记

  之后有时间的话还是希望能够继续完善这个东东,以后也能再能把这玩意当成真正的调试工具来用!


参考传送门:

  1. pyqtgraph官网:https://www.pyqtgraph.org/
  2. 博客: 用Python串口实时显示数据并绘图

【Python实战系列】串口实时接收数据并基于pyqtgraph绘图相关推荐

  1. STM32串口实时接收数据与所提前定义的比较,并作出相应的操作

    STM32串口实时接收数据与所提前定义的比较,并作出相应的操作 //typedef const uint16_t uc16; /*!< Read Only */uc16 BUF[10]={162 ...

  2. matlab 串口实时接收数据 绘图

    利用matlab实时接收串口发送的数据,并绘图. clear s=serial('com5') %选择串口号 set(s,'BaudRate',115200,'StopBits',1,'Parity' ...

  3. android 串口一直打开_实例 | 使用Python串口实时显示数据并绘图

    今天为大家分享一篇使用Python串口实时显示数据并绘图的例子,具有很好的参考价值,希望对大家有所帮助. 一.安装pyserial以及基本用法 使用pyserial进行串口传输,在cmd下输入命令pi ...

  4. python串口数据绘图_使用Python串口实时显示数据并绘图的例子

    使用pyserial进行串口传输 一.安装pyserial以及基本用法 在cmd下输入命令pip install pyserial 注:升级pip后会出现 "'E:\Anaconda3\Sc ...

  5. python串口实时读取数据画图_python串口绘图

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! (已完成)pythonapi操作tecplot做数据处理(已完成)用pyauto ...

  6. python中texttable库显示实时数据_用Python串口实时显示数据并绘图pyqtgraph

    用Python串口实时显示数据并绘图 使用pyserial进行串口传输 一.安装pyserial以及基本用法 在cmd下输入命令pip install pyserial 注:升级pip后会出现 &qu ...

  7. 用Python串口实时显示数据并绘图pyqtgraph(详细教程)

    用Python串口实时显示数据并绘图 使用pyserial进行串口传输 一.安装pyserial以及基本用法 在cmd下输入命令pip install pyserial 注:升级pip后会出现 &qu ...

  8. python读取串口数据 绘图_使用Python串口实时显示数据并绘图的例子

    使用pyserial进行串口传输 一.安装pyserial以及基本用法 在cmd下输入命令pip install pyserial 注:升级pip后会出现 "'E:Anaconda3Scri ...

  9. STM32F0系列串口DMA收发数据

    关于STM32F0系列串口DMA收发数据详解 这里用的库函数版本,芯片型号为stm32f030c8t6.在用到串口DMA时,要按以下几个步骤进行. 1.确定使用的串口号,这里,我用的是usart2,对 ...

  10. 「Python爬虫系列讲解」十四、基于开发者工具 Network 的数据抓包技术

    本专栏是以杨秀璋老师爬虫著作<Python网络数据爬取及分析「从入门到精通」>为主线.个人学习理解为主要内容,以学习笔记形式编写的. 本专栏不光是自己的一个学习分享,也希望能给您普及一些关 ...

最新文章

  1. 怎样定义最小 可遗传神经网络
  2. Eclipse AST 实现一个类信息统计小程序
  3. 第28天:js-Tab栏切换封装函数
  4. 前端学习(1763):前端调试值之性能分析的方法一
  5. matlab var std,Matlab var std cov 函数解析
  6. centos7和scientific linux7里面调出中文输入法
  7. 如何查看IOS系统APP的包名
  8. USB转串口CH340接线方法
  9. Houdini10:灯光
  10. 用matlab机器人工具箱对SCARA机器人建模
  11. Design Ware IP
  12. 虚拟机突然没网了,虚拟机突然鼠标失灵
  13. Python基础——类和对象与魔法方法
  14. scroller基础知识点
  15. [corefx注释说]-System.Collections.Generic.StackT
  16. 什么是SQL注入攻击?
  17. 在Linux系统下实现进程,在Linux2.6内核下实现进程隐藏
  18. Memcached与Redis的一些特点
  19. 【李宏毅机器学习2021】Task01 机器学习介绍
  20. Volley传入请求体不成功的解决方案

热门文章

  1. 油猴(Tampermonkey)使用教程
  2. 苹果蓝牙耳机怎么接电话_拆解报告:高仿苹果AirPods真无线蓝牙耳机
  3. java infinite or nan,java.lang.NumberFormatException: Infinite or NaN(数学运算错
  4. bscroll制作轮播图,jq和vue两种方式,带下边的点点
  5. 疲劳测试分析软件,ANSYS nCode DesignLife高级疲劳耐久性分析_ANSYS仿真工具_其他软件_工业软件_安世亚太...
  6. IP66 IP67 防护等级介绍
  7. C语言极速学习开发——51单片机入门编程之使用KeilC51进行代码编译(点亮你心中学习的精神之灯-上)
  8. ReportMachine如何导出PDF文档?
  9. 计算机怎么默认浏览器模式,电脑如何切换浏览器IE内核模式浏览网页
  10. Kubernetes API的流编解码器StreamSerializer