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 自动安装 Rising 杀毒软件
Apr 24 Python
Python内置函数dir详解
Apr 14 Python
启动targetcli时遇到错误解决办法
Oct 26 Python
有趣的python小程序分享
Dec 05 Python
Python中eval带来的潜在风险代码分析
Dec 11 Python
Python爬取十篇新闻统计TF-IDF
Jan 03 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
Feb 26 Python
分析python动态规划的递归、非递归实现
Mar 04 Python
python绘制散点图并标记序号的方法
Dec 11 Python
Python静态类型检查新工具之pyright 使用指南
Apr 26 Python
python pandas获取csv指定行 列的操作方法
Jul 12 Python
python图形开发GUI库pyqt5的基本使用方法详解
Feb 14 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(3)
2006/10/09 PHP
php微信公众号开发之微信企业付款给个人
2018/10/04 PHP
基于JQuery.timer插件实现一个计时器
2010/04/25 Javascript
html a标签-超链接中confirm方法使用介绍
2013/01/04 Javascript
js替换字符串的所有示例代码
2013/07/23 Javascript
jquery实现通用版鼠标经过淡入淡出效果
2014/06/15 Javascript
一个小例子解释如何来阻止Jquery事件冒泡
2014/07/17 Javascript
深入探讨Vue.js组件和组件通信
2016/09/12 Javascript
用jQuery实现可输入多选下拉组合框实例代码
2017/01/18 Javascript
JavaScript的for循环中嵌套一个点击事件的问题解决
2017/03/03 Javascript
js省市区级联查询(插件版&无插件版)
2017/03/21 Javascript
微信小程序 检查接口状态实例详解
2017/06/23 Javascript
vue2导航根据路由传值,而改变导航内容的实例
2017/11/10 Javascript
微信小程序使用audio组件播放音乐功能示例【附源码下载】
2017/12/08 Javascript
vue地区选择组件教程详解
2018/05/04 Javascript
使用jquery模拟a标签的click事件无法实现跳转的解决
2018/12/04 jQuery
浅谈vue后台管理系统权限控制思考与实践
2018/12/19 Javascript
JS call()及apply()方法使用实例汇总
2020/07/11 Javascript
python网络爬虫之如何伪装逃过反爬虫程序的方法
2017/11/23 Python
python使用tornado实现简单爬虫
2018/07/28 Python
python从子线程中获得返回值的方法
2019/01/30 Python
使用豆瓣源来安装python中的第三方库方法
2021/01/26 Python
Superdry瑞典官网:英国日本街头风品牌
2017/05/17 全球购物
企业管理专业个人求职信范文
2013/09/24 职场文书
工程技术员岗位职责
2014/03/02 职场文书
财产公证书
2014/04/10 职场文书
精神文明单位申报材料
2014/05/02 职场文书
2014世界杯球队球队口号
2014/06/05 职场文书
社团活动总结报告
2014/06/27 职场文书
11.9消防日宣传标语
2014/10/08 职场文书
2015年社区纪检工作总结
2015/04/21 职场文书
通知格式
2015/04/27 职场文书
学校节水倡议书
2015/04/29 职场文书
后天观后感
2015/06/08 职场文书
2016幼儿园中班开学寄语
2015/12/03 职场文书
详解Nginx的超时keeplive_timeout配置步骤
2022/05/25 Servers