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之模块的加载
Oct 24 Python
python编写爬虫小程序
May 14 Python
单利模式及python实现方式详解
Mar 20 Python
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
Apr 03 Python
python远程邮件控制电脑升级版
May 23 Python
pandas 层次化索引的实现方法
Jul 06 Python
关于tf.matmul() 和tf.multiply() 的区别说明
Jun 18 Python
Python使用requests模块爬取百度翻译
Aug 25 Python
Scrapy 配置动态代理IP的实现
Sep 28 Python
python中使用asyncio实现异步IO实例分析
Feb 26 Python
python3.9之你应该知道的新特性详解
Apr 29 Python
利用Python+OpenCV三步去除水印
May 28 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
世界上第一台立体声收音机
2021/03/01 无线电
php实现用户在线时间统计详解
2011/10/08 PHP
如何使用PHP批量去除文件UTF8 BOM信息
2013/08/05 PHP
js新闻滚动 js如何实现新闻滚动效果
2013/01/07 Javascript
yepnope.js使用详解及示例分享
2014/06/23 Javascript
jQuery中ready事件用法实例
2015/01/19 Javascript
JavaScript数据结构和算法之图和图算法
2015/02/11 Javascript
js判断价格,必须为数字且不能为负数的实现方法
2016/10/07 Javascript
JavaScript中boolean类型之三种情景实例代码
2016/11/21 Javascript
Bootstrap整体框架之CSS12栅格系统
2016/12/15 Javascript
jQuery实现的简单排序功能示例【冒泡排序】
2017/01/13 Javascript
Javascript for in的缺陷总结
2017/02/03 Javascript
NodeJS有难度的面试题(能答对几个)
2019/10/09 NodeJs
Vue根据条件添加click事件的方式
2019/11/09 Javascript
在 Vue 中编写 SVG 图标组件的方法
2020/02/24 Javascript
使用Python判断IP地址合法性的方法实例
2014/03/13 Python
Python __setattr__、 __getattr__、 __delattr__、__call__用法示例
2015/03/06 Python
python中pandas.DataFrame对行与列求和及添加新行与列示例
2017/03/12 Python
浅谈dataframe中更改列属性的方法
2018/07/10 Python
对python csv模块配置分隔符和引用符详解
2018/12/12 Python
Python可变对象与不可变对象原理解析
2020/02/25 Python
Python3+PyCharm+Django+Django REST framework配置与简单开发教程
2021/02/16 Python
美国女鞋品牌:naturalizer(娜然)
2016/08/01 全球购物
GAZMAN官网:澳大利亚领先的男装品牌
2019/12/19 全球购物
JAVA高级程序员面试题
2013/09/06 面试题
警察思想汇报
2014/01/04 职场文书
致长跑运动员广播稿
2014/01/31 职场文书
战略合作意向书范本
2014/04/01 职场文书
初中家长寄语
2014/04/02 职场文书
二年级评语大全
2014/04/23 职场文书
我读书我快乐演讲稿
2014/05/07 职场文书
加油口号大全
2014/06/13 职场文书
安全伴我行演讲稿
2014/09/04 职场文书
2014年个人售房协议书
2014/10/30 职场文书
MySQL子查询中order by不生效问题的解决方法
2021/08/02 MySQL
集英社今正式宣布 成立游戏公司“集英社Games”
2022/03/31 其他游戏