page contents

使用Python串口实时显示数据并绘图的例子(1)

今天为大家分享一篇使用Python串口实时显示数据并绘图的例子,具有很好的参考价值,希望对大家有所帮助。 一、安装pyserial以及基本用法 使用pyserial进行串口传输,在cmd下输入命令pip ins...

今天为大家分享一篇使用Python串口实时显示数据并绘图的例子,具有很好的参考价值,希望对大家有所帮助。


一、安装pyserial以及基本用法

使用pyserial进行串口传输,在cmd下输入命令pip install pyserial

注:升级pip后会出现 "‘E:\Anaconda3\Scripts\pip-script.py' is not present."错误

使用 easy_install pip命令就能解决,换一条重新能执行安装的命令。


常用方法:

ser = serial.Serial(0) 是打开第一个串口

print ser.portstr 能看到第一个串口的标识,windows下是COM1

ser.write(“hello") 就是往串口里面写数据

ser.close() 就是关闭ser表示的串口

ser.open() 会打开这个串口

ser = serial.Serial(‘COM1', 115200) 来设置波特率,当然还有专门的函数

data = ser.read()可以读一个字符

data = ser.read(20) 是读20个字符

data = ser.readline() 是读一行,以/n结束,要是没有/n就一直读,阻塞。

data = ser.readlines()和ser.xreadlines()都需要设置超时时间

ser.baudrate = 9600 设置波特率

ser 来查看当前串口的状态

ser.isOpen() 看看这个串口是否已经被打开


串行口的属性:

name:设备名字 portstr:已废弃,用name代替 port:读或者写端口 baudrate:波特率

bytesize:字节大小 parity:校验位 stopbits:停止位 timeout:读超时设置

writeTimeout:写超时 xonxoff:软件流控 rtscts:硬件流控 dsrdtr:硬件流控

interCharTimeout:字符间隔超时


二、最基本的串口代码

  1. import serial
  2. portx="COM5"
  3. bps=9600
  4. timex=5
  5. #串口执行到这已经打开 再用open命令会报错
  6. ser = serial.Serial(portx, int(bps), timeout=1, parity=serial.PARITY_NONE,stopbits=1)
  7. if (ser.isOpen()):
  8. print("open success")
  9. # 向端口些数据 字符串必须译码
  10. ser.write("hello".encode())
  11. while (True):
  12. line = ser.readline()
  13. if(line):
  14. print(line)
  15. line=0
  16. else:
  17. print("open failed")
  18. ser.close()#关闭端口
  19. )

三、pyqtgraph的使用

pip install pyqtgraph#显示波形的界面

pip install PyQt5#界面要Qt的支持

pyqtgraph是Python平台上一种功能强大的2D/3D绘图库,相对于matplotlib库,由于内部实现方式上,使用了高速计算的numpy信号处理库以及Qt的GraphicsView框架。

因此,它在大数据量的数字处理和快速显示方面有着巨大的优势,它适合于需要快速绘图更新、视频或实时交互性的操作场合。

另外,它不仅为各种数据提供了快速可交互式的图形显示,同时也提供了用于快速开发应用程序的各种小工具,如属性树、流程图等小部件,在数学、科学和工程领域都有着广泛的应用。

  1. import pyqtgraph as pg
  2. import numpy as np
  3. import array
  4.  
  5. app = pg.mkQApp()#建立app
  6. win = pg.GraphicsWindow()#建立窗口
  7. win.setWindowTitle(u'pyqtgraph逐点画波形图')
  8. win.resize(800, 500)#小窗口大小
  9.  
  10. data = array.array('d') #可动态改变数组的大小,double型数组
  11. historyLength = 100#横坐标长度
  12. p = win.addPlot()#把图p加入到窗口中
  13. p.showGrid(x=True, y=True)#把XY的表格打开
  14. p.setRange(xRange=[0,historyLength], yRange=[-1.2, 1.2], padding=0)
  15. p.setLabel(axis='left', text='y / V')#靠左
  16. p.setLabel(axis='bottom', text='x / point')
  17. p.setTitle('y = sin(x)')#表格的名字
  18. curve = p.plot()#绘制一个图形
  19. idx = 0
  20. def plotData():
  21. global idx#内部作用域想改变外部域变量
  22. tmp = np.sin(np.pi / 50 * idx)
  23. if len(data)<historyLength:
  24. data.append(tmp)
  25. else:
  26. data[:-1] = data[1:]#前移
  27. data[-1] = tmp
  28. curve.setData(data)
  29. idx += 1
  30.  
  31. timer = pg.QtCore.QTimer()
  32. timer.timeout.connect(plotData)#定时调用plotData函数
  33. timer.start(50)#多少ms调用一次
  34.  
  35. app.exec_()


  • 发表于 2020-01-03 09:33
  • 阅读 ( 545 )
  • 分类:Python开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

1135 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1470 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章