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 相关文章推荐
使用70行Python代码实现一个递归下降解析器的教程
Apr 17 Python
在Python中处理时间之clock()方法的使用
May 22 Python
Python实现合并字典的方法
Jul 07 Python
Python中常用操作字符串的函数与方法总结
Feb 04 Python
web.py 十分钟创建简易博客实现代码
Apr 22 Python
window下eclipse安装python插件教程
Apr 24 Python
详解python里使用正则表达式的分组命名方式
Oct 24 Python
python 获取utc时间转化为本地时间的方法
Dec 31 Python
Python Numpy库安装与基本操作示例
Jan 08 Python
Python字符串格式化f-string多种功能实现
May 07 Python
解决pytorch 交叉熵损失输出为负数的问题
Jul 07 Python
python基础之模块的导入
Oct 24 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 水平的题目
2007/05/30 PHP
分割GBK中文遭遇乱码的解决方法
2013/08/09 PHP
[原创]解决wincache不支持64位PHP5.5/5.6的问题(提供64位wincache下载)
2016/06/22 PHP
Yii2 批量插入、更新数据实例
2017/03/15 PHP
PHP基于自增数据如何生成不重复的随机数示例
2017/05/19 PHP
去除链接虚线全面分析总结
2006/08/15 Javascript
解决jquery的.animate()函数在IE6下的问题
2010/12/03 Javascript
如何将一个String和多个String值进行比较思路分析
2013/04/22 Javascript
基于jquery中children()与find()的区别介绍
2013/04/26 Javascript
JavaScript中获取样式的原生方法小结
2014/10/08 Javascript
JS实现的生成随机数的4个函数分享
2015/02/11 Javascript
jquery中$each()方法的使用指南
2015/04/30 Javascript
Javascript实现计算个人所得税
2015/05/10 Javascript
JS基于VML技术实现的五角星礼花效果代码
2015/10/26 Javascript
Javascript中字符串replace方法的第二个参数探究
2016/12/05 Javascript
jQuery控制元素隐藏和显示
2017/03/03 Javascript
详谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/25 Javascript
jQuery.validate.js表单验证插件的使用代码详解
2018/10/22 jQuery
手把手带你封装一个vue component第三方库
2019/02/14 Javascript
js实现弹窗效果
2020/08/09 Javascript
在vue中配置不同的代理同时访问不同的后台操作
2020/09/11 Javascript
在vue中使用Echarts画曲线图的示例
2020/10/03 Javascript
[01:01:31]2018DOTA2亚洲邀请赛3月29日小组赛B组 Mineski VS paiN
2018/03/30 DOTA
Python中在for循环中嵌套使用if和else语句的技巧
2016/06/20 Python
jupyter notebook 中输出pyecharts图实例
2020/04/23 Python
纯css3实现走马灯效果
2014/12/26 HTML / CSS
英国网上购买门:Direct Doors
2018/06/07 全球购物
麦当劳印度网上订餐:McDelivery
2020/03/16 全球购物
品学兼优的大学生自我评价
2013/09/20 职场文书
主治医师岗位职责
2013/12/10 职场文书
铁人纪念馆观后感
2015/06/16 职场文书
“学党章、守党纪、讲党规”学习心得体会
2016/01/14 职场文书
小学体育队列队形教学反思
2016/02/16 职场文书
2019年公司卫生管理制度样本
2019/08/21 职场文书
Win10 heic文件怎么打开 ? Win10 heic文件打开教程
2022/04/06 数码科技
JS前端canvas交互实现拖拽旋转及缩放示例
2022/08/05 Javascript