#!/usr/bin/python # -*-coding: utf-8 -*- from asyncio import sleep from collections import deque from pickle import FALSE from socketio_client import connect_, sio, send_msg import sys import serial import threading import binascii from datetime import datetime import socketio import time import csv import socket # import numpy 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 is_exit,data_bytes,data_list,csv_writer,L,sio,start_timer,is_data_header,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 dt = datetime.now() nowtime_str = dt.strftime('%y-%m-%d %I:%M:%S') # 时间 # 写入csv文件 text_ = data_list.popleft() print(type(text_)) # if len(send_list) < 1: # continue for each in text_: L.append(int(each)) for i in range(len(L)): if(L[i] == 60 and L[i+1]==170 and L[i+2] ==85 and not is_first): is_first = True is_60_first = i match (L[i+3]): case 65: is_65_index = i case 66: is_68_index = 0 case 67: is_68_index = 0 case 68: is_68_index = i # print('---------------------------start---------------------------------') # print(L) try: # writedata ='{}'.format(data_list.popleft()) # Note.write(writedata.encode('hex')) csv_writer.writerow(text_) except Exception as e: raise e # 发送socket消息 # sio.emit('msg', {'response': 'my response'}) if sio.connected: sio.emit("msg",{"time": nowtime_str,"data":L}) # socket_.send("msg",{"data":text_}) L.clear() # print('-----------------------------end---------------------------------') def test(self): global is_exit while True: sleep(10) is_exit = False sleep(10) is_exit = True serialPort = 'COM4' # 串口 baudRate = 115200 # 波特率 socketurl_ = "http://192.168.0.225:5000" is_exit = False data_bytes = bytearray() data_list = deque() send_list = deque() L = [] data_L = [[],[],[],[]] 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__': # 打开串口 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_) # 开始写数据 t3 = threading.Thread(target=mSerial.write_data()) t3.setDaemon(True) t3.start() # sio.wait() #sio事件处理 t2 = threading.Thread(target=sio.wait()) t2.setDaemon(True) t2.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)