#!/usr/bin/python # -*-coding: utf-8 -*- from asyncio import sleep from collections import deque from pickle import FALSE import serial import threading from datetime import datetime import socketio import time import csv 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('') def read_data(self): global is_exit global data_bytes,data_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) # data_bytes = data_bytes+rec_str # print(str(datetime.now()),':','当前数据接收总字节数:'+str(len(data_bytes))+' 本次接收字节数:'+str(len(rec_str))) def write_data(self): global data_L,L,index_,is_exit,data_list,send_list newData = False while True: while not is_exit: # i,is_60_index,is_65_index,is_68_index = 0 # is_first = False if len(data_list)<1: continue # 写入csv文件 text_ = data_list.popleft() for each in text_: send_list.append(int(each)) dt = datetime.now() nowtime_str = dt.strftime('%Y-%m-%d %H:%M:%S.%f') # 时间 while len(send_list)>0: x = send_list.popleft() if(x == 60): if len(send_list)<3: send_list.appendleft(x) break else: y = send_list.popleft() z = send_list.popleft() m = send_list.popleft() if (x == 60 and y == 170 and z == 85): if(m == 65): index_ = 0 data_L=[[],[],[],[]] if(m == 66): index_ = 1 data_L[index_] = [] if(m == 67): index_ = 2 data_L[index_] = [] if(m == 68): index_ = 3 data_L[index_] = [] data_L[index_].append(x) data_L[index_].append(y) data_L[index_].append(z) data_L[index_].append(m) else: data_L[index_].append(x) send_list.appendleft(m) send_list.appendleft(z) send_list.appendleft(y) else: data_L[index_].append(x) # 发送socket消息 if(len(data_L[3])>0 and len(data_L[3])==len(data_L[2])): if sio.connected: sio.emit("msg",{"time": nowtime_str,"serialport":serialPort,"data":data_L}) data_L=[[],[],[],[]] # socket_.send("msg",{"data":text_}) # try: # # writedata ='{}'.format(data_list.popleft()) # # Note.write(writedata.encode('hex')) # csv_writer.writerow(text_) # 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-14130' # 串口 baudRate = 115200 # 波特率 socketurl_ = "http://192.168.0.30:3001" is_exit = False data_bytes = bytearray() data_list = deque() send_list = deque() L = [] 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 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_) print('-----------------------------000000000000000---------------------------------') # 开始写数据 t3 = threading.Thread(target=mSerial.write_data()) t3.setDaemon(True) t3.start() print('-----------------------------11111111111111---------------------------------') # sio.wait() #sio事件处理 t4 = threading.Thread(target=sio.wait()) 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)