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显示天气预报
Mar 02 Python
浅析Python的Django框架中的Memcached
Jul 23 Python
python杀死一个线程的方法
Sep 06 Python
横向对比分析Python解析XML的四种方式
Mar 30 Python
Python编写一个闹钟功能
Jul 11 Python
Python变量赋值的秘密分享
Apr 03 Python
python实现集中式的病毒扫描功能详解
Jul 09 Python
Python3 执行Linux Bash命令的方法
Jul 12 Python
python内置函数sorted()用法深入分析
Oct 08 Python
简单了解Python读取大文件代码实例
Dec 18 Python
如何用用Python将地址标记在地图上
Feb 07 Python
python 解决微分方程的操作(数值解法)
May 26 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
地摊中国 - 珍藏老照片
2020/08/18 杂记
php实现从ftp服务器上下载文件树到本地电脑的程序
2009/02/10 PHP
PHP加速 eAccelerator配置和使用指南
2009/06/05 PHP
PHP中常用的字符串格式化函数总结
2014/11/19 PHP
PHP简单预防sql注入的方法
2016/09/27 PHP
PHP如何搭建百度Ueditor富文本编辑器
2018/09/21 PHP
JavaScript实现的内存数据库LokiJS介绍和入门实例
2014/11/17 Javascript
node.js中的fs.lstatSync方法使用说明
2014/12/16 Javascript
AngularJS国际化详解及示例代码
2016/08/18 Javascript
vue多页面开发和打包正确处理方法
2018/04/20 Javascript
webpack手动配置React开发环境的步骤
2018/07/02 Javascript
利用Angular2的Observables实现交互控制的方法
2018/12/27 Javascript
微信小程序实现带参数的分享功能(两种方法)
2019/05/17 Javascript
koa2 从入门到精通(小结)
2019/07/23 Javascript
vue v-for 使用问题整理小结
2019/08/04 Javascript
javascript简单实现深浅拷贝过程详解
2019/10/08 Javascript
three.js欧拉角和四元数的使用方法
2020/07/26 Javascript
Python中反射和描述器总结
2018/09/23 Python
pandas的排序和排名的具体使用
2019/07/31 Python
Python如何基于selenium实现自动登录博客园
2019/12/16 Python
pytorch sampler对数据进行采样的实现
2019/12/31 Python
Centos7下源码安装Python3 及shell 脚本自动安装Python3的教程
2020/03/07 Python
Python进程的通信Queue、Pipe实例分析
2020/03/30 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
2020/06/08 Python
Python3爬虫中关于中文分词的详解
2020/07/29 Python
Smashbox官网:美国知名彩妆品牌
2017/01/05 全球购物
vue路由实现登录拦截
2021/03/24 Vue.js
大学生大二自我鉴定
2013/10/28 职场文书
师范毕业生个人求职信
2013/12/09 职场文书
自我评价200字分享
2013/12/17 职场文书
企业党员公开承诺书
2014/03/26 职场文书
2015年幼儿园保育工作总结
2015/05/12 职场文书
2015新教师教学工作总结
2015/07/22 职场文书
2015年店长个人工作总结
2015/10/23 职场文书
2016年清明节期间群众祭祀活动工作总结
2016/04/01 职场文书
人力资源部工作计划
2019/05/14 职场文书