#!/usr/bin/python # -*-coding: utf-8 -*- from asyncio import sleep from collections import deque from distutils.log import debug from multiprocessing.connection import wait from pickle import FALSE from tracemalloc import start import serial import threading from datetime import datetime import socketio import time import csv # import pysnooper class SerialPort: def __init__(self, port, buand): self.port = serial.Serial(port, buand) self.port.close() if not self.port.isOpen(): self.port.open() def port_open(self): if not self.port.isOpen(): self.port.open() def port_close(self): self.port.close() def send_data(self): self.port.write('') # @pysnooper.snoop() def read_data(self): global is_exit global data_bytes,data_list,csv_writer,int_list while True: while not is_exit: count = self.port.inWaiting() if count > 0: rec_str = self.port.read(count) # data_list.append(rec_str) for byte in rec_str: # print('----------------------------',type(byte),byte) int_list.append(byte) # data_bytes = data_bytes+rec_str # print(str(datetime.now()),':','当前数据接收总字节数:'+str(len(data_bytes))+' 本次接收字节数:'+str(len(rec_str))) # wait(10000) # try: # # writedata ='{}'.format(data_list.popleft()) # # Note.write(writedata.encode('hex')) # csv_writer.writerow(rec_str) # except Exception as e: # raise e # @pysnooper.snoop() def write_data(self): global data_L,index_,is_exit,send_list,int_list,sio,serialPort start_array = False while True: while not is_exit: if len(int_list)<1: continue x = int_list.popleft() if(not start_array and x==60): if len(int_list)<3: int_list.appendleft(x) break else: y = int_list.popleft() z = int_list.popleft() m = int_list.popleft() if (y == 170 and z == 85 and m==65): data_L=[[],[],[],[]] index_ =(abs(69-m)%4) data_L[index_].append(x) data_L[index_].append(y) data_L[index_].append(z) data_L[index_].append(m) start_array = True else: data_L[index_].append(x) int_list.appendleft(m) int_list.appendleft(z) int_list.appendleft(y) else: if(len(data_L[index_]) == 61): index_ = (index_+1)%4 data_L[index_].append(x) else: data_L[index_].append(x) if(len(data_L[3]) == 61): # send_list.append(data_L) if(data_L[0][3] != 65): start_array = False break try: for r in data_L: csv_writer.writerow(r) except Exception as e: raise e ret = [[],[],[],[]] i = 0 while(i<4): if(len(data_L[i]) != 61): continue j = 5 while(j<61): ret[i].append(data_L[i][j+1]*256 + data_L[i][j]) j = j+2 i = i+1 # print(parse_data(send_list.popleft())) if sio.connected: dt = datetime.now() nowtime_str = dt.strftime('%Y-%m-%d %H:%M:%S.%f') # 时间 sio.emit("msg",{"time": nowtime_str,"serialport":serialPort,"data":ret}) data_L = [[],[],[],[]] index_ = 0 def send_data(self): global send_list,sio while True: while not is_exit: if sio.connected: dt = datetime.now() nowtime_str = dt.strftime('%Y-%m-%d %H:%M:%S.%f') # 时间 sio.emit("msg",{"time": nowtime_str,"data":send_list.popleft()}) # try: # for r in data_L: # csv_writer.writerow(r) # except Exception as e: # raise e def test(self): global is_exit while True: sleep(10) is_exit = False sleep(10) is_exit = True serialPort = '/dev/tty.usbserial-14110' # 串口 baudRate = 115200 # 波特率 socketurl_ = "http://127.0.0.1:3001" is_exit = False data_bytes = bytearray() data_list = deque() send_list = deque() int_list= deque() L = [] base_length = 61 data_L = [[],[],[],[]] index_ = 0 #第 A/B/C/D 组数据 sio = socketio.Client(logger=True, engineio_logger=True) # sio = socketio.Client() start_timer = None csv_writer = None is_data_header = False @sio.event def connect(): print('connected to server') @sio.event def pong_from_server(): global start_timer latency = time.time() - start_timer print('latency is {0:.2f} ms'.format(latency * 1000)) sio.sleep(1) if sio.connected: print(' reconnected') @sio.on('command_msg') def command_msg(data): global is_exit if data['command'] == 'stop': is_exit = True if data['command'] == 'start': is_exit = False def parse_data(data): ret = [[],[],[],[]] i = 0 while(i<4): j = 5 arr = data[i] print(arr) while(j<61): print('------------------',i,j,arr[j],'----------------------') # ret[i].append(data[i][j+1]*256 + data[i][j]) j = j+2 i = i+1 return ret if __name__ == '__main__': # serialPort = input("请输入串口字符串") # 打开串口 mSerial = SerialPort(serialPort, baudRate) # 文件写入操作 # filename = input('请输入文件名:比如test.csv:') filename = 'test.csv' dt = datetime.now() nowtime_str = dt.strftime('%y-%m-%d %I-%M-%S') # 时间 filename = nowtime_str+'_'+filename out = open(filename, 'w') csv_writer = csv.writer(out) # txt写入 # Note=open(nowtime_str+'_test.txt',mode='w') # 开始数据读取线程 t1 = threading.Thread(target=mSerial.read_data) t1.setDaemon(True) t1.start() # 连接socketio sio.connect(socketurl_) # 开始写数据 t2 = threading.Thread(target=mSerial.write_data()) t2.setDaemon(True) t2.start() # sio.wait() #sio事件处理 t4 = threading.Thread(target=sio.wait()) print('------------------------------------------------------------------------') t4.setDaemon(True) t4.start() # 连接socket # remote_IP='192.168.0.225' # remote_port=5000 # remote_addr=(remote_IP,remote_port) # socket_=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # socket_.connect(remote_addr)