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 ElementTree 基本读操作示例
Apr 09 Python
玩转python爬虫之爬取糗事百科段子
Feb 17 Python
为Python的Tornado框架配置使用Jinja2模板引擎的方法
Jun 30 Python
python opencv 直方图反向投影的方法
Feb 24 Python
python spyder中读取txt为图片的方法
Apr 27 Python
对pycharm代码整体左移和右移缩进快捷键的介绍
Jul 16 Python
搞清楚 Python traceback的具体使用方法
May 13 Python
Python列表(list)所有元素的同一操作解析
Aug 01 Python
Numpy将二维数组添加到空数组的实现
Dec 05 Python
python实现加密的方式总结
Jan 19 Python
Python基于模块Paramiko实现SSHv2协议
Apr 28 Python
Python虚拟环境virtualenv创建及使用过程图解
Dec 08 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分页显示制作详细讲解
2008/11/19 PHP
php+webSoket实现聊天室示例代码(附源码)
2017/02/17 PHP
php获取网站根目录物理路径的几种方法(推荐)
2017/03/04 PHP
php处理多图上传压缩代码功能
2018/06/13 PHP
PHP中str_split()函数的用法讲解
2019/04/11 PHP
ext for eclipse插件安装方法
2008/04/27 Javascript
js post方式传递提交的实现代码
2010/05/31 Javascript
jquery中this的使用说明
2010/09/06 Javascript
jquery实现倒计时代码分享
2014/06/13 Javascript
javascript获取dom的下一个节点方法
2014/09/05 Javascript
jquery中live()方法和bind()方法区别分析
2016/06/23 Javascript
工作中比较实用的JavaScript验证和数据处理的干货(经典)
2016/08/03 Javascript
JavaScript兼容浏览器FF/IE技巧
2016/08/14 Javascript
JS只能输入正整数的简单实例
2016/10/07 Javascript
Avalonjs双向数据绑定与监听的实例代码
2017/06/23 Javascript
Node.js  事件循环详解及实例
2017/08/06 Javascript
js实现轮播图的两种方式(构造函数、面向对象)
2017/09/30 Javascript
JS实现换肤功能的方法实例详解
2019/01/30 Javascript
Vue.extend实现挂载到实例上的方法
2019/05/01 Javascript
微信小程序实现用table显示数据库反馈的多条数据功能示例
2019/05/07 Javascript
Vue2.x通用条件搜索组件的封装及应用详解
2019/05/28 Javascript
浅谈在vue-cli3项目中解决动态引入图片img404的问题
2020/08/04 Javascript
针对Vue路由history模式下Nginx后台配置操作
2020/10/22 Javascript
在Python的Django框架中创建和使用模版
2015/07/15 Python
Python中类的初始化特殊方法
2017/12/01 Python
Python enumerate索引迭代代码解析
2018/01/19 Python
Python 如何调试程序崩溃错误
2020/08/03 Python
css3圆角边框和边框阴影示例
2014/05/05 HTML / CSS
德国传统玻璃制造商:Cristalica
2018/04/23 全球购物
简历中求职的个人自我评价
2013/12/03 职场文书
超市开学活动方案
2014/03/01 职场文书
团结演讲稿范文
2014/05/23 职场文书
2014大学生中国梦主题教育学习思想汇报
2014/09/10 职场文书
捐资助学感谢信
2015/01/21 职场文书
幼儿园开学温馨提示
2015/07/15 职场文书
2016年教师师德师风承诺书
2016/03/25 职场文书