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读取图片EXIF信息类库介绍和使用实例
Jul 10 Python
python在windows和linux下获得本机本地ip地址方法小结
Mar 20 Python
python利用matplotlib库绘制饼图的方法示例
Dec 18 Python
基于Django filter中用contains和icontains的区别(详解)
Dec 12 Python
如何用Python实现简单的Markdown转换器
Jul 16 Python
python3爬虫怎样构建请求header
Dec 23 Python
对python中return与yield的区别详解
Mar 12 Python
python3 使用openpyxl将mysql数据写入xlsx的操作
May 15 Python
Python configparser模块操作代码实例
Jun 08 Python
python线性插值解析
Jul 05 Python
python如何建立全零数组
Jul 19 Python
python编写五子棋游戏
May 25 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 Switch 语句之学习笔记
2013/09/21 PHP
php第一次无法获取cookie问题处理
2014/12/15 PHP
在WordPress中使用wp_count_posts函数来统计文章数量
2016/01/05 PHP
WordPress后台中实现图片上传功能的实例讲解
2016/01/11 PHP
php解决和避免form表单重复提交的几种方法
2016/08/31 PHP
PHP封装的page分页类定义与用法完整示例
2018/12/24 PHP
Jquery实现简单的动画效果代码
2012/03/18 Javascript
javascript预加载图片、css、js的方法示例介绍
2013/10/14 Javascript
javascript定义变量时有var和没有var的区别探讨
2014/07/21 Javascript
JS禁用页面上所有控件的实现方法(附demo源码下载)
2015/12/17 Javascript
angular.js之路由的选择方法
2016/09/24 Javascript
angularjs中的$eval方法详解
2017/04/24 Javascript
原生JS进行前后端同构
2018/04/22 Javascript
Vue.js组件通信之自定义事件详解
2019/10/19 Javascript
vue 解决computed修改data数据的问题
2019/11/06 Javascript
用Python制作简单的钢琴程序的教程
2015/04/01 Python
python针对excel的操作技巧
2018/03/13 Python
Python之批量创建文件的实例讲解
2018/05/10 Python
用Python实现将一张图片分成9宫格的示例
2019/07/05 Python
Python 微信爬虫完整实例【单线程与多线程】
2019/07/06 Python
python如何从文件读取数据及解析
2019/09/19 Python
np.newaxis 实现为 numpy.ndarray(多维数组)增加一个轴
2019/11/30 Python
通过实例解析python subprocess模块原理及用法
2020/10/10 Python
Python模拟登录和登录跳转的参考示例
2020/10/30 Python
详解pandas赋值失败问题解决
2020/11/29 Python
html5 postMessage前端跨域并前端监听的方法示例
2018/11/01 HTML / CSS
茵宝(Umbro)英国官方商店:英国足球服装生产商
2016/12/29 全球购物
英国时尚女装购物网站:Missguided
2018/08/23 全球购物
Ralph Lauren意大利官方网站:时尚界最负盛名的品牌之一
2018/10/18 全球购物
DERMAdoctor官网:美国著名皮肤护理品牌
2019/07/06 全球购物
《九寨沟》教学反思
2014/04/08 职场文书
《冬阳童年骆驼队》教学反思
2014/04/15 职场文书
学校党的群众路线教育实践活动总结报告
2014/07/03 职场文书
民主生活会意见
2015/06/05 职场文书
2015国庆节放假通知范文
2015/07/30 职场文书
python区块链实现简版工作量证明
2022/05/25 Python