目錄
一、背景
1.1、開發(fā)流程圖
二、前提
2.1、關(guān)于環(huán)境
2.2、關(guān)于源碼
三、步驟
3.1、使用pyqt創(chuàng)建一個(gè).ui界面并生成.py文件
3.2、創(chuàng)建兩個(gè).py文件,一個(gè)用來(lái)繼承ui界面生成的.py類,一個(gè)用來(lái)實(shí)現(xiàn)各種功能
3.3、各個(gè)功能代碼
3.3.1、打開串口
3.3.2、關(guān)閉串口
3.3.3、獲取串口號(hào)
3.3.4、發(fā)送數(shù)據(jù)
3.3.5、接收數(shù)據(jù)
3.3.6、數(shù)據(jù)顯示
3.4、qtdersigner界面
3.5、美化后運(yùn)行的程序
3.6、打包.py為.exe
3.7、打包為.exe后運(yùn)行
3.8、串口測(cè)試連接圖
四、結(jié)果
4.1、代碼運(yùn)行結(jié)果
4.2、打包后運(yùn)行結(jié)果
4.3、將.py文件-->.exe文件可能遇到的問(wèn)題
4.3.1、UPX is not available
4.3.2、pip命令版本不匹配,需要升級(jí)pip版本
一、背景
??????? 串口助手是串口通信使用的工具。為整合知識(shí),打算做個(gè)串口助手。
1.1、開發(fā)流程圖
如下圖1:
圖1
二、前提
2.1、關(guān)于環(huán)境
操作系統(tǒng):win 10
編輯器:pycharm edu
語(yǔ)言及版本:python 3.8
使用的庫(kù):pyqt5、sys、time等等庫(kù) ???????
實(shí)現(xiàn)思路:需要實(shí)現(xiàn)什么功能就做什么功能,最后把功能整合在一起
前提:在pycharm 中配置好pyqt及其工具
最終實(shí)現(xiàn)的功能:串口選擇、串口狀態(tài)顯示、發(fā)送數(shù)據(jù)、定時(shí)發(fā)送發(fā)送區(qū)數(shù)據(jù)(定時(shí)時(shí)間可修改)、接收數(shù)據(jù)、數(shù)據(jù)顯示(ASCII)、數(shù)據(jù)顯示自動(dòng)換行、數(shù)據(jù)顯示顯示時(shí)間、清除接收區(qū)
2.2、關(guān)于源碼
源碼比較多,需要源碼借鑒的評(píng)論區(qū)留言,私聊我,進(jìn)行源碼分享。
三、步驟
3.1、使用pyqt創(chuàng)建一個(gè).ui界面并生成.py文件
如下圖2:
?圖2
3.2、創(chuàng)建兩個(gè).py文件,一個(gè)用來(lái)繼承ui界面生成的.py類,一個(gè)用來(lái)實(shí)現(xiàn)各種功能
如下圖3:
?圖3
3.3、各個(gè)功能代碼
3.3.1、打開串口
def open_port(port_name, baudrate, bytesize, stop_bit, parity):
ser = serial.Serial(
port = port_name,
baudrate=baudrate,
bytesize=bytesize,
stopbits=stop_bit,
parity=parity,
rtscts=False,
xonxoff=False,
timeout=None,
write_timeout=None
)
return ser
3.3.2、關(guān)閉串口
def close_port(self):
if self.current_port is not None:
self.time.stop()
self.serial_thread.ser = None
self.current_port.close()
self.current_port = None
self.ui.port_status.setText("closed")
self.ui.open_port.setDisabled(False)
self.ui.send_data.setDisabled(True)
self.ui.close_port.setDisabled(True)
3.3.3、獲取串口號(hào)
import serial
import serial.tools.list_ports
def serial_port():
port_list = []
portlist = list(serial.tools.list_ports.comports())
for port in portlist:
port_list.append(port.device)
return port_list
3.3.4、發(fā)送數(shù)據(jù)
def send_data(self):
if self.ui.send_select.isChecked():
timer = self.ui.send_time.value()
self.time.start(timer)
else:
self.time.stop()
data = self.ui.input_data.toPlainText()
print("這是發(fā)送的數(shù)據(jù):"+data)
self.current_port.write(data.encode('gbk'))
3.3.5、接收數(shù)據(jù)
class SerialThread(QThread):
data_arrive_signal = pyqtSignal()
def __init__(self, ser=None):
super().__init__()
self.ser = ser
self.data = ''
def run(self):
while True:
if self.ser and self.ser.in_waiting:
self.data += self.ser.read_all().decode('gbk')
print(self.data)
self.data_arrive_signal.emit()
3.3.6、數(shù)據(jù)顯示
def show_data(self):
self.recive_data = self.serial_thread.data
self.zdhh_data += self.recive_data
now_time = datetime.datetime.now()
if self.ui.zdhh.isChecked():
self.zdhh_data += '\n'
self.ui.show_ser_data.setText(self.zdhh_data)
print("這里是顯示的數(shù)據(jù):"+self.zdhh_data)
if self.ui.show_time.isChecked():
print(self.ui.show_time.isChecked())
time_data = str(now_time) + self.zdhh_data
print(time_data)
self.ui.show_ser_data.setText(time_data)
if self.ui.zdhh.isChecked() and self.ui.show_time.isChecked():
self.zdhh_data += '\n'
time_data = str(now_time) + self.zdhh_data
self.ui.show_ser_data.setText(time_data)
else:
self.ui.show_ser_data.setText(self.recive_data)
print("這里是顯示的數(shù)據(jù):"+self.recive_data)
3.4、qtdersigner界面
如下圖4:
圖4
3.5、美化后運(yùn)行的程序
如下圖5:
圖5
3.6、打包.py為.exe
如下圖6:
圖6
3.7、打包為.exe后運(yùn)行
如下圖7:
?圖7
3.8、串口測(cè)試連接圖
如下圖8:
兩個(gè)串口的RXD和TXD需要互接,進(jìn)行數(shù)據(jù)的互傳,在測(cè)試時(shí)這樣使用比用單片機(jī)發(fā)數(shù)據(jù)更快。
四、結(jié)果
4.1、代碼運(yùn)行結(jié)果
同圖6、7:
4.2、打包后運(yùn)行結(jié)果
同圖6、7:
4.3、將.py文件-->.exe文件可能遇到的問(wèn)題
4.3.1、UPX is not available
解決辦法:點(diǎn)這里文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-446019.html
4.3.2、pip命令版本不匹配,需要升級(jí)pip版本
下載pyinstaller,在cmd命令行出現(xiàn)報(bào)錯(cuò),會(huì)有提示建議,輸入提示建議的命令即可。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-446019.html
到了這里,關(guān)于制作一個(gè)串口助手 | python + pyqt5的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!