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

作者:happyliuliming 时间:2021-11-15 19:36:24 

最近工作需要把单片机读取的传感器电压数据实时在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控件来绘图。

来源:https://blog.csdn.net/happyliuliming/article/details/84845560

标签:Python,串口,数据,动态,绘图
0
投稿

猜你喜欢

  • python实现ping命令小程序

    2022-12-14 02:16:26
  • Python实现EXCEL表格的排序功能示例

    2021-05-17 20:50:11
  • python 实现单一数字取对数与数列取对数

    2023-04-02 01:38:14
  • Python DPED机器学习之实现照片美化

    2023-11-25 01:50:24
  • 给Notepad++换主题

    2009-05-04 14:43:00
  • 用python实现名片管理系统

    2022-03-27 09:34:33
  • python利用datetime模块计算程序运行时间问题

    2022-05-24 03:13:41
  • 深入透析样式表滤镜(上)

    2011-06-14 09:48:40
  • 解析:轻松掌握在 Mac OS X中安装MySQL

    2009-01-14 11:51:00
  • Python Base64编码和解码操作

    2022-10-20 06:26:05
  • Python实现读取txt文件并转换为excel的方法示例

    2023-07-25 15:20:16
  • 兼容firefox的给每一个onClick再附加一个事件

    2023-08-24 18:29:47
  • python求最大公约数和最小公倍数的简单方法

    2022-08-31 22:05:45
  • python数字类型math库原理解析

    2021-11-27 16:34:50
  • js字符串日期yyyy-MM-dd转化为date示例代码

    2023-08-06 16:35:58
  • python机器学习使数据更鲜活的可视化工具Pandas_Alive

    2022-09-26 04:57:12
  • tkinter自定义下拉多选框问题

    2022-09-27 06:40:00
  • pd.read_csv读取文件路径出现的问题解决

    2022-03-16 06:12:53
  • Python之京东商品秒杀的实现示例

    2023-01-31 05:49:07
  • python数值基础知识浅析

    2021-12-10 07:07:49
  • asp之家 网络编程 m.aspxhome.com