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 图片验证码代码分享
Jul 04 Python
python处理cookie详解
Feb 07 Python
python写的ARP攻击代码实例
Jun 04 Python
Python安装使用命令行交互模块pexpect的基础教程
May 12 Python
Python 提取dict转换为xml/json/table并输出的实现代码
Aug 28 Python
对python Tkinter Text的用法详解
Oct 11 Python
​如何愉快地迁移到 Python 3
Apr 28 Python
python设置环境变量的作用和实例
Jul 09 Python
python爬虫selenium和phantomJs使用方法解析
Aug 08 Python
python之列表推导式的用法
Nov 29 Python
基于python实现删除指定文件类型
Jul 21 Python
python如何查找列表中元素的位置
May 30 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中加session验证)
2012/08/22 PHP
PHP可变函数的使用详解
2013/06/14 PHP
PHP内核探索:变量存储与类型使用说明
2014/01/30 PHP
简单实用的网站PHP缓存类实例
2014/07/18 PHP
MyEclipse常用配置图文教程
2014/09/11 PHP
PHP操作MySQL事务实例
2014/11/05 PHP
php去除字符串中空字符的常用方法小结
2015/03/17 PHP
bindParam和bindValue的区别以及在Yii2中的使用详解
2018/03/12 PHP
基于jquery封装的一个js分页
2011/11/15 Javascript
Javascript倒计时页面跳转实例小结
2013/09/11 Javascript
jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
2013/12/05 Javascript
JavaScript异步加载浅析
2014/12/28 Javascript
浅析angularJS中的ui-router和ng-grid模块
2016/05/20 Javascript
AngularJS 入门教程之事件处理器详解
2016/08/19 Javascript
js实现日期显示的一些操作(实例讲解)
2017/07/27 Javascript
React Native 图片查看组件的方法
2018/03/01 Javascript
小程序分页实践之编写可复用分页组件
2019/07/18 Javascript
VUE实现强制渲染,强制更新
2019/10/29 Javascript
vue-cli3自动消除console.log()的调试信息方式
2020/10/21 Javascript
JavaScript如何操作css
2020/10/24 Javascript
使用Python写CUDA程序的方法
2017/03/27 Python
Tensorflow 查看变量的值方法
2018/06/14 Python
python实现彩票系统
2020/06/28 Python
Python实现图片转字符画的代码实例
2019/02/22 Python
Python字符编码转码之GBK,UTF8互转
2020/02/09 Python
基于python tkinter的点名小程序功能的实例代码
2020/08/22 Python
一套.net面试题及答案
2016/11/02 面试题
什么是Connection-oriented Protocol/Connectionless Protocol面向连接的协议/无连接协议
2012/09/06 面试题
研究生考核个人自我鉴定
2014/03/27 职场文书
幼儿园评语大全
2014/04/17 职场文书
团队队名口号大全
2014/06/06 职场文书
医药销售自我评价200字
2014/09/11 职场文书
2015年党员个人剖析材料
2014/12/18 职场文书
工作感言一句话
2015/08/01 职场文书
MySQL系列之六 用户与授权
2021/07/02 MySQL
Java使用jmeter进行压力测试
2021/07/09 Java/Android