Python 读取串口数据,动态绘图的示例


Posted in Python onJuly 02, 2019

最近工作需要把单片机读取的传感器电压数据实时在PC上通过曲线显示出来,刚好在看python, 就试着用了python 与uart端口通讯,并且通过matplotlib.pyplot 模块实时绘制图形出来。

1. 废话少说,上图

Python 读取串口数据,动态绘图的示例

因为没有UI,运行时需要在提示符下输入串口相关参数,com端口,波特率...

Python 读取串口数据,动态绘图的示例

代码如下:

#-*- coding: utf-8 -*-
 
# 串口测试程序
import serial
import matplotlib.pyplot as plt
import numpy as np
import time
import re
 
 
# User input comport and bundrate
comport = input('Please input comport (like COM3) for your connected device: ')
baudrate = input('Please input baudrate (like 9600) for your connected device: ')
bytes = input('Please input bytes type of uart data (1->1 byte, 2->2 bytes): ')
bytes = int(bytes)
print('You selected %s, baudrate %d, %d byte.' % (comport, int(baudrate), bytes))
 
serialport = serial.Serial(comport, int(baudrate), timeout=1, parity=serial.PARITY_EVEN, rtscts=1)
if serialport.isOpen():
	print("open success")
else:
	print("open failed")
 
plt.grid(True) # 添加网格
plt.ion()	# interactive mode
plt.figure(1)
plt.xlabel('times')
plt.ylabel('data')
plt.title('Diagram of UART data by Python')
t = [0]
m = [0]
i = 0
intdata = 0
data = ''
count = 0
 
while True:
	if i > 300:  # 300次数据后,清除画布,重新开始,避免数据量过大导致卡顿。
		t = [0]
		m = [0]
		i = 0
		plt.cla()
	count = serialport.inWaiting()
	if count > 0 :
		if (bytes == 1):
			data = serialport.read(1)
		elif (bytes == 2):
			data = serialport.read(2)
		if data !='':
			intdata = int.from_bytes(data, byteorder='big', signed = False)
			print('%d byte data %d' % (bytes, intdata))
			i = i+1
			t.append(i)
			m.append(intdata)
			plt.plot(t, m, '-r')   
			# plt.scatter(i, intdata)
			plt.draw()
 
	plt.pause(0.002)

目前功能比较简单,但是发现一个问题,但单片机送出数据速度很快时, python plot 绘图会明显卡顿。

为解决此问题,已经用C# 重新做了个winform UI, 使用chart控件来绘图。

以上这篇Python 读取串口数据,动态绘图的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python Web开发模板引擎优缺点总结
May 06 Python
python读取浮点数和读取文本文件示例
May 06 Python
python中bisect模块用法实例
Sep 25 Python
Python实现的飞速中文网小说下载脚本
Apr 23 Python
Python2.x利用commands模块执行Linux shell命令
Mar 11 Python
在pycharm中python切换解释器失败的解决方法
Oct 29 Python
Python XlsxWriter模块Chart类用法实例分析
Mar 11 Python
Python如何使用argparse模块处理命令行参数
Dec 11 Python
python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法
Feb 26 Python
哈工大自然语言处理工具箱之ltp在windows10下的安装使用教程
May 07 Python
Tensorflow与Keras自适应使用显存方式
Jun 22 Python
java关于string最常出现的面试题整理
Jan 18 Python
python中对数据进行各种排序的方法
Jul 02 #Python
Python虚拟环境的原理及使用详解
Jul 02 #Python
python输出电脑上所有的串口名的方法
Jul 02 #Python
如何更优雅地写python代码
Jul 02 #Python
Python pip替换为阿里源的方法步骤
Jul 02 #Python
python set内置函数的具体使用
Jul 02 #Python
ZABBIX3.2使用python脚本实现监控报表的方法
Jul 02 #Python
You might like
PHP设计模式 注册表模式(多个类的注册)
2012/02/05 PHP
php数组相加 array(“a”)+array(“b”)结果还是array(“a”)
2012/09/19 PHP
PHP扩展模块Pecl、Pear以及Perl的区别
2014/04/09 PHP
使用ltrace工具跟踪PHP库函数调用的方法
2016/04/25 PHP
yii2.0框架实现上传excel文件后导入到数据库的方法示例
2020/04/13 PHP
JQuery AJAX实现目录浏览与编辑的代码
2008/10/21 Javascript
循环 vs 递归浅谈
2013/02/28 Javascript
简单实用的反馈表单无刷新提交带验证
2013/11/15 Javascript
整理一下常见的IE错误
2016/11/18 Javascript
js实现三级联动效果(简单易懂)
2017/03/27 Javascript
react实现一个优雅的图片占位模块组件详解
2017/10/30 Javascript
vue-cli项目优化方法- 缩短首屏加载时间
2018/04/01 Javascript
SVG实现时钟效果
2018/07/17 Javascript
JavaScript 高性能数组去重的方法
2018/09/20 Javascript
Vue 页面权限控制和登陆验证功能的实例代码
2019/06/20 Javascript
JavaScript实现文件下载并重命名代码实例
2019/12/12 Javascript
[45:14]Optic vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
简介Python中用于处理字符串的center()方法
2015/05/18 Python
Linux 下 Python 实现按任意键退出的实现方法
2016/09/25 Python
Python实现的多进程拷贝文件并显示百分比功能示例
2019/04/09 Python
如何在VSCode上轻松舒适的配置Python的方法步骤
2019/10/28 Python
Python统计文本词汇出现次数的实例代码
2020/02/27 Python
Python中使用threading.Event协调线程的运行详解
2020/05/02 Python
如何把python项目部署到linux服务器
2020/08/26 Python
如何基于Python爬虫爬取美团酒店信息
2020/11/03 Python
HTML5文档结构标签
2017/04/21 HTML / CSS
阿里健康大药房:阿里自营网上药店
2017/08/01 全球购物
Expedia英国:全球最大的在线旅游公司
2017/09/07 全球购物
2013年高中生自我评价
2013/10/23 职场文书
应届毕业生应聘自荐信
2013/12/07 职场文书
一体化教学实施方案
2014/05/10 职场文书
项目投资建议书
2014/05/16 职场文书
2015公务员试用期工作总结
2014/12/12 职场文书
民主评议教师党员自我评价
2015/03/04 职场文书
证券公司客户经理岗位职责
2015/04/09 职场文书
vue实现无缝轮播效果(跑马灯)
2021/05/14 Vue.js