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统计文本文件内单词数量的方法
May 30 Python
python实现中文分词FMM算法实例
Jul 10 Python
Python打包文件夹的方法小结(zip,tar,tar.gz等)
Sep 18 Python
python 3.5实现检测路由器流量并写入txt的方法实例
Dec 17 Python
Windows下的Jupyter Notebook 安装与自定义启动(图文详解)
Feb 21 Python
如何用Python破解wifi密码过程详解
Jul 12 Python
python用线性回归预测股票价格的实现代码
Sep 04 Python
Python类反射机制使用实例解析
Dec 30 Python
python3 实现口罩抽签的功能
Mar 11 Python
为什么是 Python -m
Jun 19 Python
python如何提升爬虫效率
Sep 27 Python
Django 实现图片上传和下载功能
Dec 31 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
点评山进PR-D3L三波段收音机
2021/03/02 无线电
PHPThumb图片处理实例
2014/05/03 PHP
PHP哈希表实现算法原理解析
2020/12/11 PHP
基于jQuery的js分页代码
2010/06/10 Javascript
jquery实现奇偶行赋值不同css值
2012/02/17 Javascript
用Jquery.load载入页面实现局部刷新
2014/01/22 Javascript
JS清空多文本框、文本域示例代码
2014/02/24 Javascript
详解javascript实现自定义事件
2016/01/19 Javascript
js读取本地文件的实例
2017/12/22 Javascript
JS实现计算小于非负数n的素数的数量算法示例
2019/02/26 Javascript
JS中实现一个下载进度条及播放进度条的代码
2019/06/10 Javascript
微信小程序云函数使用mysql数据库过程详解
2019/08/07 Javascript
nodejs的安装使用与npm的介绍
2019/09/11 NodeJs
layui动态绑定事件的方法
2019/09/20 Javascript
jQuery实现的分页插件完整示例
2020/05/26 jQuery
微信小程序换肤功能实现代码(思路详解)
2020/08/25 Javascript
vue 获取元素额外生成的data-v-xxx操作
2020/09/09 Javascript
JavaScript 中判断变量是否为数字的示例代码
2020/10/22 Javascript
jupyter安装小结
2016/03/13 Python
详解python如何调用C/C++底层库与互相传值
2016/08/10 Python
Python单例模式的两种实现方法
2017/08/14 Python
Python函数返回不定数量的值方法
2019/01/22 Python
python matplotlib库绘制条形图练习题
2019/08/10 Python
Python调用scp向服务器上传文件示例
2019/12/22 Python
CSS3制作精致的照片墙特效
2016/06/07 HTML / CSS
美国网上鞋子零售商:Dr. Scholl’s Shoes
2017/11/17 全球购物
JSF的标签库有哪些
2012/04/27 面试题
恐龙的灭绝教学反思
2014/02/12 职场文书
专项法律服务方案
2014/06/11 职场文书
全国优秀教师事迹材料
2014/08/26 职场文书
乡村教师党员四风问题对照检查材料思想汇报
2014/10/08 职场文书
2015年食品安全工作总结
2015/05/15 职场文书
导游词之无锡梅园
2019/11/28 职场文书
Redis遍历所有key的两个命令(KEYS 和 SCAN)
2021/04/12 Redis
MongoDB误操作后使用oplog恢复数据
2022/04/11 MongoDB
使用ICOM IC-R9500接收机同时测评十台收音机中波接收性能
2022/05/10 无线电