# -*- coding: utf-8 -*-
"""
Created on Wed Dec 28 11:03:56 2022
@author: Jiabao Wang
"""
#import curses # pip install windows-curses
import serial # pip install pyserial
import datetime, time # 导入时间包
ser = serial.Serial() # 开启com3口,波特率115200,超时5
def port_open_configure(): #配置串口参数
ser.port='COM3'
ser.baudrate=115200
ser.bytesize=8
ser.stopbits=1
ser.parity="N"#奇偶校验位
ser.open() #打开串口
if(ser.isOpen()): #判断打开是否成功
print("串口打开成功!")
ser.flushInput() # 清空缓冲区
else:
print("串口打开失败!")
return ser
def port_close():
ser.close()
if(ser.isOpen()):
print("串口关闭失败!")
else:
print("串口关闭成功!")
src_list = dict()
dst_list = dict()
def parse_data(tik_time, data):
src_mac, dst_mac, FB, FS, Chn, StrongInfo, Name, D1, D2 = data.split('|')
if int(StrongInfo) > -70 and dst_mac != 'FF:FF:FF:FF:FF:FF':
if src_mac not in src_list:
src_list[src_mac] = [dst_mac, FB, FS, Chn, StrongInfo, Name, D1, D2, tik_time]
else:
if tik_time - src_list[src_mac][-1] > 60:
print("DEL", src_list[src_mac])
src_list.pop(src_mac)
else:
src_list[src_mac][-1]=tik_time
if dst_mac not in dst_list:
dst_list[dst_mac] = [dst_mac, FB, FS, Chn, StrongInfo, Name, D1, D2, tik_time]
else:
if tik_time - dst_list[dst_mac][-1] > 60:
print("DEL", dst_list[dst_mac])
dst_list.pop(dst_mac)
else:
dst_list[dst_mac][-1]=tik_time
print("**********用户终端***************")
for idx, key in enumerate(src_list):
print(idx, key, src_list[key])
print("**********WiFi热点***************")
for idx, key in enumerate(dst_list):
print(idx, key, dst_list[key])
def main():
port_open_configure()
next_data = 0
recv_res = ''
while True:
# Press 'q' to exit
# sc.refresh()
# key = sc.getch()
# if key == ord('q'):
# break
# elif key < 0:
# time.sleep(0.1)
# Get data from COM
count = ser.inWaiting() # 获取串口缓冲区数据
if count !=0 :
recv = ser.read(ser.in_waiting) # 读出串口数据
#print("####", recv)
if next_data: # 前一个数据解析完剩余部分和新数据重组
recv = recv_res + recv
pos = recv.find(b'\r\n') # 找一个独立的数据信息
while pos >= 0:
data = recv[0:pos] # 截取独立的数据信息
parse_data(time.time(), data.decode("utf-8"))
#print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()),"-- recv -->", data.decode("utf-8")) # 打印一下子
recv = recv[pos+len('\r\n'):] # 去除已经解析的数据部分
pos = recv.find(b'\r\n') # 继续找一个独立的数据信息
recv_res = recv # 没有完成的独立信息,则作为剩余部分与下一个数据包组合后再解析
next_data = 1
time.sleep(0.1) # 延时0.1秒,免得CPU出问题
port_close()
if __name__ == '__main__':
main()#curses.wrapper(main)
07-07
2751