1.打开软件的同时打开定时器Timer1,
Timer1主要做搜索串口,如果没搜索到,就提示“未搜索到串口”,如果搜到了,就打开串口,这里可能会连接多个设备,如果要打开指定的设备,就需要遍历串口号去发送一个数据,同时设备要有一个返回值才行,这样就可以打开指定的串口了,打开串口之后打开定时器Timer2
def detect_serial(self):
port_list = []
exist_flag = False
com_list = []
com_list.clear()
port_list.clear()
com_list = list(serial.tools.list_ports.comports())
if len(com_list) == 0:
exist_flag = False
else:
exist_flag = True
for item in com_list:
com = item.device
port_list.append(com)
if exist_flag == True:
for port in port_list:
self.m_th.m_ser.port = port
if self.m_th.m_ser.is_open == True:
self.m_th.m_ser.write(b'\x00') #与单片机串口连接
else:
self.m_th.m_ser.open()
self.m_th.m_ser.write(b'\x00')
time.sleep(0.1)
rdata = self.m_th.m_ser.read_all()
print(rdata)
if rdata == b'\x00':
print(rdata)
self.serial_timer.stop()
if self.judge_serial_timer.isActive() == False:
self.judge_serial_timer.start()
QtWidgets.QMessageBox.information(self,'提示', '串口已连接!')
return
else:
QtWidgets.QMessageBox.information(self, '提示', '未找到串口!')
2.定时器搜索到串口打开之后打开定时器Timer2并关闭定时器Timer1
定时器Timer2主要是搜索串口,如果搜到则什么都不执行,如果搜索到串口数量为0,则打开定时器Timer1并关闭定时器Timer2
def judge_serial(self):
com_list = list(serial.tools.list_ports.comports())
if len(com_list) > 0:
pass
else:
self.judge_serial_timer.stop()
self.serial_timer.start()
好像只能处理连一个串口时的情况,现在先写这么多,以后有更好的方法再更吧