mirror of
https://github.com/Ai-Thinker-Open/TBXX_Flash_Tool.git
synced 2025-05-08 22:37:57 +08:00
添加串口工具
This commit is contained in:
parent
189b2f1548
commit
46403a9287
@ -17,8 +17,9 @@ from aithinker_png import aithinker_png as logo
|
||||
from TBXX_Flash_Tool import TB_Tools
|
||||
from FW_Combin_Tool import FW_Tools
|
||||
from FW_Market import FW_Market
|
||||
from SP_Tools import SP_Tools
|
||||
|
||||
__version__ = "V1.4.1 dev"
|
||||
__version__ = "V1.4.2 dev"
|
||||
|
||||
class MainForm(QTabWidget):
|
||||
def __init__(self,parent=None):
|
||||
@ -34,25 +35,25 @@ class MainForm(QTabWidget):
|
||||
tmp.close()
|
||||
|
||||
self.setWindowIcon(QIcon("combine/aithinker.png"))
|
||||
self.resize(500,300)
|
||||
self.resize(600,370)
|
||||
|
||||
self.tab1=TB_Tools()
|
||||
self.tab2=FW_Tools()
|
||||
self.tab3=QWidget()
|
||||
self.tab4=FW_Market()
|
||||
self.tab5=QWidget()
|
||||
self.tab_TB_Tools=TB_Tools()
|
||||
self.tab_SP_Tools=SP_Tools()
|
||||
self.tab_FW_Market=FW_Market()
|
||||
self.tab_Dev_Doc=QWidget()
|
||||
self.tab_FW_Tools=FW_Tools()
|
||||
|
||||
self.addTab(self.tab1, "烧录固件")
|
||||
self.addTab(self.tab2, "合并固件")
|
||||
self.addTab(self.tab3, "串口调试")
|
||||
self.addTab(self.tab4, "固件市场")
|
||||
self.addTab(self.tab5, "开发资料")
|
||||
self.addTab(self.tab_TB_Tools, "烧录固件")
|
||||
self.addTab(self.tab_SP_Tools, "串口调试")
|
||||
self.addTab(self.tab_FW_Market,"固件市场")
|
||||
self.addTab(self.tab_Dev_Doc, "开发资料")
|
||||
self.addTab(self.tab_FW_Tools, "合并固件")
|
||||
|
||||
self.currentChanged['int'].connect(self.tabfun)
|
||||
|
||||
def tabfun(self,index):
|
||||
if (index == 3):
|
||||
self.tab4.get_fw_list()
|
||||
if (index == 2):
|
||||
self.tab_FW_Market.get_fw_list()
|
||||
|
||||
if __name__=="__main__":
|
||||
app=QApplication(sys.argv)
|
||||
|
205
SP_Tools.py
Normal file
205
SP_Tools.py
Normal file
@ -0,0 +1,205 @@
|
||||
#!/usr/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import argparse
|
||||
import sys
|
||||
import io
|
||||
import os
|
||||
import struct
|
||||
import time
|
||||
import base64
|
||||
from PyQt5.QtWidgets import QPushButton,QApplication,QLineEdit,QWidget,QTextEdit,QVBoxLayout,QHBoxLayout,QComboBox,QFileDialog,QProgressBar,QGridLayout,QCheckBox
|
||||
from PyQt5.QtCore import Qt,QThread,pyqtSignal
|
||||
from PyQt5.QtGui import QIcon,QFont,QTextCursor
|
||||
from Telink_Tools import get_port_list,tl_open_port,connect_chip,change_baud,telink_flash_write,uart_read
|
||||
|
||||
|
||||
class SP_Thread(QThread):
|
||||
stateSignal = pyqtSignal(int)
|
||||
textSignal = pyqtSignal(str)
|
||||
def __init__(self, _port_name, baudRate):
|
||||
super(SP_Thread, self).__init__()
|
||||
|
||||
self._port_name = _port_name
|
||||
self._baudRate = baudRate
|
||||
self._stop = False
|
||||
|
||||
def my_stop(self):
|
||||
self._stop = True
|
||||
|
||||
def send(self, data):
|
||||
if (self._port != None):
|
||||
self._port.write(data)
|
||||
else:
|
||||
self.textSignal.emit("请先打开串口!")
|
||||
|
||||
def run(self):
|
||||
|
||||
try:
|
||||
self._port = tl_open_port(self._port_name)
|
||||
except Exception:
|
||||
self.textSignal.emit("串口 " + self._port_name + " 打开失败,请检查串口是否被占用!!!")
|
||||
self.stateSignal.emit(1)
|
||||
return
|
||||
|
||||
self.stateSignal.emit(0)
|
||||
self.textSignal.emit("打开串口成功!!!")
|
||||
|
||||
self._port.setRTS(False)
|
||||
self._port.setDTR(False)
|
||||
|
||||
while(True):
|
||||
if self._stop :
|
||||
break
|
||||
|
||||
result = uart_read(self._port)
|
||||
if(len(result) > 1):
|
||||
self.textSignal.emit(result)
|
||||
time.sleep(0.1)
|
||||
|
||||
self._port.close()
|
||||
self._port = None
|
||||
|
||||
self.stateSignal.emit(1)
|
||||
|
||||
class SP_Tools(QWidget):
|
||||
def __init__(self,parent=None):
|
||||
super().__init__(parent)
|
||||
|
||||
self.mThread = None
|
||||
|
||||
self.layout=QVBoxLayout()
|
||||
|
||||
# 最上层的文本框
|
||||
|
||||
self.tbox_log=QTextEdit()
|
||||
self.tbox_log.setFontPointSize(10)
|
||||
# 按钮及下拉框
|
||||
line_1=QHBoxLayout()
|
||||
|
||||
self.serial_cb=QComboBox()
|
||||
|
||||
self.baudRate_cb=QComboBox()
|
||||
self.baudRate_cb.addItem("9600")
|
||||
self.baudRate_cb.addItem("115200")
|
||||
self.baudRate_cb.addItem("500000")
|
||||
self.baudRate_cb.addItem("921600")
|
||||
|
||||
btn_refresh_p=QPushButton("刷新串口")
|
||||
btn_recv_cnt=QPushButton("收")
|
||||
btn_send_cnt=QPushButton("发")
|
||||
btn_clean_scn =QPushButton("清除窗口")
|
||||
self.btn_Open=QPushButton("打开串口")
|
||||
|
||||
btn_refresh_p.clicked.connect(self.refresh_p_fn)
|
||||
btn_clean_scn.clicked.connect(self.clean_screen_fn)
|
||||
self.btn_Open.clicked.connect(self.OpenSerial)
|
||||
|
||||
|
||||
line_1.addWidget(self.serial_cb)
|
||||
line_1.addWidget(btn_refresh_p)
|
||||
line_1.addWidget(self.baudRate_cb)
|
||||
line_1.addWidget(self.btn_Open)
|
||||
line_1.addWidget(btn_recv_cnt)
|
||||
line_1.addWidget(btn_send_cnt)
|
||||
line_1.addWidget(btn_clean_scn)
|
||||
|
||||
line_1.setContentsMargins(0, 0, 0, 0)
|
||||
|
||||
# 发送文本框及发送按钮
|
||||
line_2=QHBoxLayout()
|
||||
|
||||
self.cbox_sendData=QComboBox()
|
||||
self.cbox_sendData.setEditable(True)
|
||||
|
||||
self.checkBox_Hex = QCheckBox("HEX发送")
|
||||
self.checkBox_Hex.setEnabled(False)
|
||||
|
||||
self.checkBox_CF = QCheckBox("加回车换行")
|
||||
self.checkBox_CF.setChecked(True)
|
||||
|
||||
btn_Send=QPushButton("发送数据")
|
||||
|
||||
btn_Send.clicked.connect(lambda:self.send_btn_fn())
|
||||
|
||||
line_2.addWidget(self.cbox_sendData)
|
||||
line_2.addWidget(self.checkBox_Hex)
|
||||
line_2.addWidget(self.checkBox_CF)
|
||||
line_2.addWidget(btn_Send)
|
||||
|
||||
line_2.setStretch(0, 42)
|
||||
line_2.setStretch(1, 10)
|
||||
line_2.setStretch(2, 10)
|
||||
line_2.setStretch(3, 10)
|
||||
|
||||
# 预定义的AT指令按键矩阵
|
||||
line_3=QGridLayout()
|
||||
|
||||
names = ['AT', 'AT+GMR', 'AT+RST', 'AT+SLEEP','AT+RESTORE', 'AT+SCAN', 'AT+DISCONNECT',
|
||||
'AT+NAME?', 'AT+BAUD?', 'AT+MAC?', 'AT+ADDR?','AT+MODE?','AT+STATE?','AT+MESHNAME?']
|
||||
|
||||
positions = [(i, j) for i in range(2) for j in range(7)]
|
||||
|
||||
for name, position in zip(names, positions):
|
||||
|
||||
if name == ' ':
|
||||
continue
|
||||
button = QPushButton(name)
|
||||
button.clicked.connect(lambda:self.grid_btn_fn())
|
||||
line_3.addWidget(button, *position)
|
||||
|
||||
self.layout.addWidget(self.tbox_log)
|
||||
self.layout.addLayout(line_1)
|
||||
self.layout.addLayout(line_2)
|
||||
self.layout.addLayout(line_3)
|
||||
|
||||
self.setLayout(self.layout)
|
||||
self.refresh_p_fn()
|
||||
|
||||
def refresh_p_fn(self): #刷新串口号
|
||||
self.serial_cb.clear()
|
||||
plist = get_port_list()
|
||||
for i in range(0, len(plist)):
|
||||
plist_0 = list(plist[i])
|
||||
self.serial_cb.addItem(str(plist_0[0]))
|
||||
|
||||
def clean_screen_fn(self):
|
||||
self.tbox_log.clear()
|
||||
|
||||
def log_string(self, s): #Log窗口日志输出
|
||||
self.tbox_log.append(s)
|
||||
cursor = self.tbox_log.textCursor()
|
||||
cursor.movePosition(QTextCursor.End)
|
||||
self.tbox_log.setTextCursor(cursor)
|
||||
|
||||
def set_sp_state(self, state): # 设置串口打开关闭状态
|
||||
if(state == 0): #串口已打开
|
||||
self.btn_Open.setText("关闭串口")
|
||||
elif(state == 1): #串口已关闭
|
||||
self.btn_Open.setText("打开串口")
|
||||
|
||||
def OpenSerial(self):
|
||||
if(self.btn_Open.text() == '打开串口'):
|
||||
self.mThread = SP_Thread(_port_name=self.serial_cb.currentText(), baudRate=self.baudRate_cb.currentText())
|
||||
self.mThread.textSignal.connect(self.log_string)
|
||||
self.mThread.stateSignal.connect(self.set_sp_state)
|
||||
self.mThread.start()
|
||||
else:
|
||||
self.mThread.my_stop()
|
||||
|
||||
def grid_btn_fn(self):
|
||||
if self.mThread != None:
|
||||
sender = self.sender()
|
||||
self.mThread.send((sender.text() + '\r\n').encode('utf-8'))
|
||||
else:
|
||||
self.log_string("请先打开串口!")
|
||||
|
||||
|
||||
def send_btn_fn(self):
|
||||
if self.mThread != None:
|
||||
if self.checkBox_CF.isChecked():
|
||||
self.mThread.send((self.cbox_sendData.currentText() + '\r\n').encode('utf-8'))
|
||||
else:
|
||||
self.mThread.send((self.cbox_sendData.currentText()).encode('utf-8'))
|
||||
else:
|
||||
self.log_string("请先打开串口!")
|
Loading…
x
Reference in New Issue
Block a user