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. WebLogic 数据源密码加密
  2. 【javascript 动态添加数据到 HTML 页面】
  3. 【初级】String str= ac,42,123,sd Fa,c df,4,acdf,5ewRRre ;1.把字符串按,进行分割
  4. postfix 部署ssl后还是25_宝塔面板的邮局管理器Postfix无法启动解决办法
  5. python爬携程酒店评论_python爬虫爬取携程网的酒店评论数据时,有个请求参数不知道是怎么生成的?...
  6. 一种通用的动作解决方案
  7. [bzoj2648]SJY摆棋子(带插入kd-tree)
  8. WebService应用:音乐站图片上传
  9. c语言extern_【零基础C语言】- static和extern关键字 - 对变量的作用!
  10. 文本编辑器——VI/VIM
  11. dnf mysql密码多少_CentOS7 使用 dnf 安装 mysql
  12. java steam的缓冲区_SSM框架完结篇 SpringMVC与Steam前后台功能模块开发
  13. win10c盘扩容_Win10中无损分区扩容调整大小
  14. 3d游戏的总体设计框架
  15. 语音识别—声学模型训练(Viterbi-EM)
  16. mysql中排名次_mysql:名次排名 (并列与不并列)
  17. JPA与Hibernate的区别
  18. 高能手办团显示服务器,高能手办团下架了 游戏下架原因介绍[多图]
  19. ajax怎样替换文本,JavaScript Document.Write在使用AJAX时替换所有正文内容
  20. Microsoft Teams Voice语音落地系列-4 实战:Teams语音路由规划与配置

热门文章

  1. 【AR】DroidCam笔记本调用手机摄像头(smartphone's camera as pc webcam)
  2. RS485接口上的PTC
  3. mp2555sp文件服务器,理光mp2555sp驱动
  4. 处于停机等非正常状态_汽轮机运行最重要的启动与停机阶段,你得了解这些实际经验...
  5. 倒立摆系统的多种控制器设计
  6. vue使用contenteditable 实现光标处插入自定义图片
  7. 给移动硬盘装上LINUX全攻略
  8. 扫描域名和扫描IP的区别
  9. 下载firebug网站
  10. Oracle(7)——Oracle修改国家字符集