【Python实战系列】串口实时接收数据并基于pyqtgraph绘图
0、前言
串口数据图形化调试助手,这乍一听起来貌似还挺阔以的样子。那究竟是啥子呢?且听慢慢道来。事情的缘由是当前在做的一个项目中,在调试Mag(地磁)相关的Sensor。获取Mag的原始数据之后,首先要做的就是判断原始数据的质量如何,及是否是我们想要的数据,不仅要看数据是否在相应状况下处于合理的范围内,且数据的变化是否符合规律,所以呢需要一个能将原始数据实时绘制成图的工具。OK,那么来列举一下需求:
- 串口通讯:串口打印是嵌入式开发时重要的调试手段,所以此处数据也通过串口传输给上位机;
- 实时图表:将串口输出的数据实时绘图;
- 至少能够同时绘制更新三组数据(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、后记
之后有时间的话还是希望能够继续完善这个东东,以后也能再能把这玩意当成真正的调试工具来用!
参考传送门:
- pyqtgraph官网:https://www.pyqtgraph.org/
- 博客: 用Python串口实时显示数据并绘图
【Python实战系列】串口实时接收数据并基于pyqtgraph绘图相关推荐
- STM32串口实时接收数据与所提前定义的比较,并作出相应的操作
STM32串口实时接收数据与所提前定义的比较,并作出相应的操作 //typedef const uint16_t uc16; /*!< Read Only */uc16 BUF[10]={162 ...
- matlab 串口实时接收数据 绘图
利用matlab实时接收串口发送的数据,并绘图. clear s=serial('com5') %选择串口号 set(s,'BaudRate',115200,'StopBits',1,'Parity' ...
- android 串口一直打开_实例 | 使用Python串口实时显示数据并绘图
今天为大家分享一篇使用Python串口实时显示数据并绘图的例子,具有很好的参考价值,希望对大家有所帮助. 一.安装pyserial以及基本用法 使用pyserial进行串口传输,在cmd下输入命令pi ...
- python串口数据绘图_使用Python串口实时显示数据并绘图的例子
使用pyserial进行串口传输 一.安装pyserial以及基本用法 在cmd下输入命令pip install pyserial 注:升级pip后会出现 "'E:\Anaconda3\Sc ...
- python串口实时读取数据画图_python串口绘图
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! (已完成)pythonapi操作tecplot做数据处理(已完成)用pyauto ...
- python中texttable库显示实时数据_用Python串口实时显示数据并绘图pyqtgraph
用Python串口实时显示数据并绘图 使用pyserial进行串口传输 一.安装pyserial以及基本用法 在cmd下输入命令pip install pyserial 注:升级pip后会出现 &qu ...
- 用Python串口实时显示数据并绘图pyqtgraph(详细教程)
用Python串口实时显示数据并绘图 使用pyserial进行串口传输 一.安装pyserial以及基本用法 在cmd下输入命令pip install pyserial 注:升级pip后会出现 &qu ...
- python读取串口数据 绘图_使用Python串口实时显示数据并绘图的例子
使用pyserial进行串口传输 一.安装pyserial以及基本用法 在cmd下输入命令pip install pyserial 注:升级pip后会出现 "'E:Anaconda3Scri ...
- STM32F0系列串口DMA收发数据
关于STM32F0系列串口DMA收发数据详解 这里用的库函数版本,芯片型号为stm32f030c8t6.在用到串口DMA时,要按以下几个步骤进行. 1.确定使用的串口号,这里,我用的是usart2,对 ...
- 「Python爬虫系列讲解」十四、基于开发者工具 Network 的数据抓包技术
本专栏是以杨秀璋老师爬虫著作<Python网络数据爬取及分析「从入门到精通」>为主线.个人学习理解为主要内容,以学习笔记形式编写的. 本专栏不光是自己的一个学习分享,也希望能给您普及一些关 ...
最新文章
- WebLogic 数据源密码加密
- 【javascript 动态添加数据到 HTML 页面】
- 【初级】String str= ac,42,123,sd Fa,c df,4,acdf,5ewRRre ;1.把字符串按,进行分割
- postfix 部署ssl后还是25_宝塔面板的邮局管理器Postfix无法启动解决办法
- python爬携程酒店评论_python爬虫爬取携程网的酒店评论数据时,有个请求参数不知道是怎么生成的?...
- 一种通用的动作解决方案
- [bzoj2648]SJY摆棋子(带插入kd-tree)
- WebService应用:音乐站图片上传
- c语言extern_【零基础C语言】- static和extern关键字 - 对变量的作用!
- 文本编辑器——VI/VIM
- dnf mysql密码多少_CentOS7 使用 dnf 安装 mysql
- java steam的缓冲区_SSM框架完结篇 SpringMVC与Steam前后台功能模块开发
- win10c盘扩容_Win10中无损分区扩容调整大小
- 3d游戏的总体设计框架
- 语音识别—声学模型训练(Viterbi-EM)
- mysql中排名次_mysql:名次排名 (并列与不并列)
- JPA与Hibernate的区别
- 高能手办团显示服务器,高能手办团下架了 游戏下架原因介绍[多图]
- ajax怎样替换文本,JavaScript Document.Write在使用AJAX时替换所有正文内容
- Microsoft Teams Voice语音落地系列-4 实战:Teams语音路由规划与配置