Python 读取串口数据,动态绘图的示例

 更新时间:2019年07月02日 10:21:22   作者:happyliuliming  
今天小编就为大家分享一篇Python 读取串口数据,动态绘图的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

最近工作需要把单片机读取的传感器电压数据实时在PC上通过曲线显示出来,刚好在看python, 就试着用了python 与uart端口通讯,并且通过matplotlib.pyplot 模块实时绘制图形出来。

1. 废话少说,上图

因为没有UI,运行时需要在提示符下输入串口相关参数,com端口,波特率...

代码如下:

#-*- 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三元表达式的基本用法详解

    Python的三元表达式是一种紧凑、简洁的条件表达式,允许在一行代码中根据条件选择不同的值,三元表达式通常用于需要在单行中根据条件进行值选择的情况,有助于提高代码的可读性和简洁性,本文给大家介绍了Python三元表达式的基本用法,需要的朋友可以参考下
    2023-10-10
  • Django日志logging的配置和自定义添加方式

    Django日志logging的配置和自定义添加方式

    这篇文章主要介绍了Django日志logging的配置和自定义添加方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • 一篇文章学会两种将python打包成exe的方式

    一篇文章学会两种将python打包成exe的方式

    最近有部分小伙伴问我,python 写的项目可不可以打包成exe程序,放到没有python环境上的电脑中执行? 答案当然是可以的,下面这篇文章主要给大家介绍了如何通过一篇文章学会两种将pyton打包成exe的方式,需要的朋友可以参考下
    2021-11-11
  • python如何利用re模块正则表达式匹配ip地址

    python如何利用re模块正则表达式匹配ip地址

    这篇文章主要介绍了python如何利用re模块正则表达式匹配ip地址问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • 基于Python编写一个爆炸信息窗口脚本

    基于Python编写一个爆炸信息窗口脚本

    这篇文章主要为大家详细介绍了如何利用Python语言编写一个爆炸信息窗口脚本,文中的示例代码讲解详细,感兴趣的小伙伴可以尝试一下
    2022-11-11
  • Django中prefetch_related()函数优化实战指南

    Django中prefetch_related()函数优化实战指南

    我们可以利用Django框架中select_related和prefetch_related函数对数据库查询优化,这篇文章主要给大家介绍了关于Django中prefetch_related()函数优化的相关资料,需要的朋友可以参考下
    2022-11-11
  • python matplotlib中文显示参数设置解析

    python matplotlib中文显示参数设置解析

    这篇文章主要介绍了python matplotlib中文显示参数设置解析,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • Python中的迭代器你了解吗

    Python中的迭代器你了解吗

    迭代器是一种特殊的对象,它实现了迭代协议,允许按照一定的顺序逐个访问元素,本文就来带大家深入了解一下Python中迭代器的使用,需要的可以参考下
    2023-05-05
  • python列表操作之extend和append的区别实例分析

    python列表操作之extend和append的区别实例分析

    这篇文章主要介绍了python列表操作之extend和append的区别,实例分析了extend方法和append方法使用上的区别,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • Python实现打印实心和空心菱形

    Python实现打印实心和空心菱形

    今天小编就为大家分享一篇Python实现打印实心和空心菱形,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11

最新评论