基于Python3.0的Uart数据接收和画图

最近有需要接收uart并画图进行分析。因此参考了下文 做了些小修改。
用Python串口实时显示数据并绘图

import array
import serial
import threading
import numpy as np
import time
import pyqtgraph as pg
from queue import Queue

fp = 0
i = 0
q = Queue(maxsize=0)
def Serial():
    global i;
    global q;
    while(True):
        n = mSerial.inWaiting()
        if(n):
            data = mSerial.read(n)
            print("Get port data:%s,%d,%d"%(data,n,len(data)))
            for index in range(len(data)):
                print("Queue data send 0X%x" % (data[index]))
                q.put(data[index])
            #ppg = (data[0] << 8) | data[1]
            #print(type(ppg))
            #print("PPG is %d" % (ppg))
            #print("Get port data:%x"%(data))
'''
            for index in range(len(data)):
                print("His name is %d" % (data[index]))
            print("data num:",n)
            print(type(data))

'''




'''
f = open("data/model_Weight.txt",'a')  #若文件不存在,系统自动创建。'a'表示可连续写入到文件,保留原内容,在原
                      #内容之后写入。可修改该模式('w+','w','wb'等)
  
f.write("hello,sha")  #将字符串写入文件中
f.write("\n")         #换行  
if __name__=='__main__':
  fw = open("/exercise1/data/query_deal.txt", 'w')  #将要输出保存的文件地址
  for line in open("/exercise1/data/query.txt"):  #读取的文件
    fw.write("\"poiName\":\"" + line.rstrip("\n") + "\"")  # 将字符串写入文件中
    # line.rstrip("\n")为去除行尾换行符
    fw.write("\n")  # 换行
              a = line[0:-1]
                print(a)
                dat = int.from_bytes(a, byteorder='big', signed=False)  # 格式转换
                print("Get data ",dat)
                q.put(dat)

'''
def plotData():
    global i;
    if i < historyLength:
        if(q.empty()==False):
            if(q.qsize()%2 == 0):
                char_high = q.get()
                char_low = q.get()
                qqg_data = char_high << 8 | char_low
                print("PPG data %d" %(qqg_data))
                #show_data = int.from_bytes(qqg_data, byteorder='big', signed=False)
                #print("show_data %d" % (show_data))
                data[i] =  qqg_data
                i = i + 1
                data1= open("ppg.txt", 'a')
                print("PPG data: %d" %(qqg_data), file=data1)
                data1.close()
    else:
        if (q.empty() == False):
            if(q.qsize()%2 == 0):
                char_high = q.get()
                char_low = q.get()
                qqg_data = char_high << 8 | char_low
                print("PPG data %d" %(qqg_data))
                data1= open("ppg.txt", 'a')
                print("PPG data %d" %(qqg_data), file=data1)
                data1.close()



                data[:-1] = data[1:]
                data[i - 1] = qqg_data
    curve.setData(data)

if __name__ == "__main__":
    app = pg.mkQApp()  # 建立app
    win = pg.GraphicsWindow()  # 建立窗口
    win.setWindowTitle(u'pyqtgraph逐点画波形图')
    win.resize(800, 500)  # 小窗口大小
    data = array.array('i')  # 可动态改变数组的大小,uint16_t 型数组
    historyLength = 300  # 横坐标长度
    a = 0
    data=np.zeros(historyLength).__array__('d')#把数组长度定下来
    p = win.addPlot()  # 把图p加入到窗口中
    p.showGrid(x=True, y=True)  # 把X和Y的表格打开
    p.setRange(xRange=[0, historyLength], yRange=[0, 10000], padding=0)
    p.setLabel(axis='left', text='y / V')  # 靠左
    p.setLabel(axis='bottom', text='x / point')
    p.setTitle('semg')  # 表格的名字
    curve = p.plot()  # 绘制一个图形
    curve.setData(data)
    portx = 'COM20'
    bps = 115200
    # 串口执行到这已经打开 再用open命令会报错
    mSerial = serial.Serial(portx, int(bps))
    if (mSerial.isOpen()):
        dat = 0xff;
        dat >> 2;
        print("open success")
        # 向端口些数据 字符串必须译码
        mSerial.write("hello".encode())
        mSerial.flushInput()  # 清空缓冲区
    else:
        print("open failed")
        serial.close()  # 关闭端口

    th1 = threading.Thread(target=Serial)
    th1.start()
    timer = pg.QtCore.QTimer()
    timer.timeout.connect(plotData)  # 定时刷新数据显示
    timer.start(1)  # 多少ms调用一次
    app.exec_()
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值