python 您所在的位置:网站首页 pyqt串口通信 python

python

2023-07-19 14:58| 来源: 网络整理| 查看: 265

想在上位机端实时调下位机的pid,所以需要看一下波形,拒绝盲调。同时使用pyqtgragh可以轻松地将数据进行动态可视化。

文章目录 环境准备串口通信基本连接串口动态参数可视化实时效果展示

环境准备 pyserial pip install pyserial pyqtgraph pip install pyqtgraph pip install PyQt5 串口通信基本连接 import serial ser = serial.Serial("COM3", 9600, timeout=1, stopbits=1) if (ser.isOpen()): print("open success") # 向端口些数据 字符串必须译码 ser.write("hello".encode()) while (True): line = ser.readline() if(line): print(line) line=0 else: print("open failed") ser.close()#关闭端口 串口动态参数可视化

这里采用pyqtgragh实现动态图表的可视化,只需加入串口读取的代码即可。 想进一步了解和学习pyqtgraph具体使用方法的同学可以参考我的博客:pyqtgragh——动态数据可视化:绘制静态和动态两种数据曲线

在这里我使用的的基于Micropython的pyboard进行上下位机的通信,其实直接print就行,不需要UART发送,我的发送数据是一个元组格式的数据: 在这里插入图片描述 关于python和Micropython如何实现元组上位机通信参考博文:适用于基于python或Micropython开发的上下位机间通信的协议

PYB下位机串口打印的代码: 在这里插入图片描述上位机PC端的代码: import pyqtgraph as pg import serial import time ''' 上下位USB通信格式:元组 ''' def ser_plot(): start = time.time() global last_data data = ser.readline() data = data.decode("utf-8") data = str(data)[1:-3] # 将无关字符去除 “\n” 和 b'' 去除 try: data = eval(data) # 转化回元组形式 except SyntaxError: data = last_data print(data) encoder = data[0] encoder_list.append(encoder[1]) plot1.setData(encoder_list, pen='g') accel = data[1] accel_list.append(accel[2]) plot2.setData(accel_list, pen='r') last_data = data end = time.time() print("cost:", end-start) if __name__ == '__main__': encoder_list = [] accel_list = [] last_data = 0 # serial初始化 ser = serial.Serial('COM3', 9600) if (ser.isOpen()): print("open success") else: print("open failed") # pyqtgragh初始化 # 创建窗口 app = pg.mkQApp() # 建立app win = pg.GraphicsWindow() # 建立窗口 win.setWindowTitle(u'pyqtgraph USB下位机串口波形显示工具') win.resize(800, 500) # 小窗口大小 # 创建图表 historyLength = 100 # 横坐标长度 p1 = win.addPlot() # 把图p加入到窗口中 p1.showGrid(x=True, y=True) # 把X和Y的表格打开 p1.setRange(xRange=[0, historyLength], yRange=[0, 100], padding=0) # x轴和y轴的范围 p1.setLabel(axis='left', text='编码器值') # 靠左 p1.setLabel(axis='bottom', text='时间') p1.setTitle('编码器实时数据') # 表格的名字 plot1 = p1.plot() p2 = win.addPlot() # 把图p加入到窗口中 p2.showGrid(x=True, y=True) # 把X和Y的表格打开 p2.setRange(xRange=[0, historyLength], yRange=[0, 100], padding=0) p2.setLabel(axis='left', text='z') # 靠左 p2.setLabel(axis='bottom', text='时间') p2.setTitle('加速度计实时数据') # 表格的名字 plot2 = p2.plot() # 设置定时器 timer = pg.QtCore.QTimer() timer.timeout.connect(ser_plot) # 定时刷新数据显示 timer.start(40) # 多少ms调用一次 app.exec_() 实时效果展示

分别翻转小车和转动小车轮子 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有