#!/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-14110' # 串口
|
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)
|