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中for循环的使用
Apr 14 Python
Python画图学习入门教程
Jul 01 Python
python 使用get_argument获取url query参数
Apr 28 Python
关于pip的安装,更新,卸载模块以及使用方法(详解)
May 19 Python
linux环境下的python安装过程图解(含setuptools)
Nov 22 Python
flask中主动抛出异常及统一异常处理代码示例
Jan 18 Python
python之matplotlib学习绘制动态更新图实例代码
Jan 23 Python
程序员的七夕用30行代码让Python化身表白神器
Aug 07 Python
关于django 1.10 CSRF验证失败的解决方法
Aug 31 Python
结束运行python的方法
Jun 16 Python
利用python批量爬取百度任意类别的图片的实现方法
Oct 07 Python
深入理解python多线程编程
Apr 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
怎样在UNIX系统下安装php3
2006/10/09 PHP
elgg 获取文件图标地址的方法
2010/03/20 PHP
PHP中CURL的CURLOPT_POSTFIELDS参数使用细节
2014/03/17 PHP
Yii使用smsto短信接口的函数demo示例
2016/07/13 PHP
PDO::getAttribute讲解
2019/01/28 PHP
Stop SQL Server
2007/06/21 Javascript
javascript 日期时间函数(经典+完善+实用)
2009/05/27 Javascript
Ruffy javascript 学习笔记
2009/11/30 Javascript
jquery入门—编写一个导航条(可伸缩)
2013/01/07 Javascript
nodejs调用cmd命令实现复制目录
2015/05/04 NodeJs
信息页文内画中画广告js实现代码(文中加载广告方式)
2016/01/03 Javascript
详解基于React.js和Node.js的SSR实现方案
2019/03/21 Javascript
vue 使用element-ui中的Notification自定义按钮并实现关闭功能及如何处理多个通知
2019/08/17 Javascript
node.js中stream流中可读流和可写流的实现与使用方法实例分析
2020/02/13 Javascript
[52:08]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第一局
2016/03/05 DOTA
[53:15]Newbee vs Pain 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[50:24]VGJ.S vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python正则匹配查询港澳通行证办理进度示例分享
2013/12/27 Python
Python导出数据到Excel可读取的CSV文件的方法
2015/05/12 Python
用python生成1000个txt文件的方法
2018/10/25 Python
python提取包含关键字的整行数据方法
2018/12/11 Python
Python IDE Pycharm中的快捷键列表用法
2019/08/08 Python
在python中利用try..except来代替if..else的用法
2019/12/19 Python
用pytorch的nn.Module构造简单全链接层实例
2020/01/14 Python
keras获得某一层或者某层权重的输出实例
2020/01/24 Python
python入门之井字棋小游戏
2020/03/05 Python
pytorch使用horovod多gpu训练的实现
2020/09/09 Python
4款Python 类型检查工具,你选择哪个呢?
2020/10/30 Python
HTML5 Geolocation API的正确使用方法
2018/12/04 HTML / CSS
用HTML5的canvas实现一个炫酷时钟效果
2016/05/20 HTML / CSS
Spartoo瑞典:鞋子、包包和衣服
2018/09/15 全球购物
励志演讲稿800字
2014/08/21 职场文书
华山导游词
2015/02/03 职场文书
计划生育工作总结2015
2015/04/03 职场文书
上帝为你开了一扇窗之Tkinter常用函数详解
2021/06/02 Python
redis缓存存储Session原理机制
2021/11/20 Redis