最近開(kāi)始學(xué)習(xí)python,還是去年暑假看過(guò)一些python語(yǔ)法,至今忘的差不多了,初中的時(shí)候?qū)W過(guò)E語(yǔ)言,當(dāng)時(shí)初中制作些單機(jī)外掛之類(CF也做過(guò),呃就是被封號(hào)了),最近玩的嵌入式有時(shí)候需要用到上位機(jī),之前都是通過(guò)E語(yǔ)言做的,總覺(jué)得拿不出手,便想著換一個(gè)語(yǔ)言寫一個(gè)上的了臺(tái)面的
綜合考慮,選擇的PyQt5來(lái)編寫上位機(jī)(因?yàn)閜ython方便些嘛)
話不多說(shuō),正文開(kāi)始:
(1)pycharm的安裝
下載連接:http://www.jetbrains.com/pycharm/download/#section=windows
在這里我選擇的是win10版本的pycharm,大家根據(jù)系統(tǒng)自行選擇,安裝過(guò)程就不在贅述了。
(2)PyQt5的安裝
這個(gè)我搜索的時(shí)候大家都使用的是pip的方式安裝,在這的話我推薦通過(guò)Pycharm來(lái)安裝,比較方便些。
輸入pyqt5后選擇Install即可
(3)Designer.exe的使用(畫(huà)界面)
打開(kāi)designer開(kāi)始繪制我們的界面:
繪制完成后由UI文件生成PY文件,此時(shí)就可以開(kāi)始編寫代碼了
(4)編寫程序
新建一個(gè)PY文件,我使用的名稱為demo.py
先引入需要使用的庫(kù)
import sys import serial import re import binascii import _thread import time import serial.tools.list_ports from UI1 import Ui_MainWindow from PyQt5 import QtWidgets
此時(shí)我們開(kāi)始編寫"MAIN"函數(shù),將窗口顯示出來(lái),在這里我是選擇了一個(gè)繼承類,來(lái)繼承通過(guò)PYQT5繪制的界面
class PC_software(QtWidgets.QMainWindow,Ui_MainWindow):
def __init__(self): super(PC_software,self).__init__() self.setupUi(self) if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) myshow = PC_software() myshow.show() sys.exit(app.exec_())
此時(shí)可以正常顯示界面,但是沒(méi)有功能,在PC_software下添加些其它函數(shù)
class PC_software(QtWidgets.QMainWindow,Ui_MainWindow): def __init__(self): super(PC_software,self).__init__() self.setupUi(self) self.ser = serial.Serial() self.ser.baudrate = 9600 self.ser.bytesize = 8 # 設(shè)置數(shù)據(jù)位 self.ser.stopbits = 1 # 設(shè)置停止位 self.ser.parity = "N" # 設(shè)置校驗(yàn)位 self.pushButton_4.clicked.connect(self.Clear_text) self.pushButton.clicked.connect(self.Screach_COM) self.pushButton_2.clicked.connect(self.Clink_COM) self.pushButton_3.clicked.connect(self.Data_Send) self.Screach_COM() def Clear_text(self): self.textEdit.clear() self.textBrowser.clear() def Screach_COM(self): self.comboBox.clear() port_list = list(serial.tools.list_ports.comports()) com_numbers = len(port_list) p1 = re.compile(r'[(](.*?)[)]', re.S) for i in range(com_numbers): com_list = str(port_list[i]) com_name = re.findall(p1, com_list) com_name = str(com_name) strlist = com_name.split("'") self.comboBox.addItem(strlist[1]) def Clink_COM(self): self.ser.port = self.comboBox.currentText() if self.ser.is_open == True : self.ser.close() self.pushButton_2.setText('打開(kāi)串口') else: self.ser.open() self.pushButton_2.setText('關(guān)閉串口') def Data_Send(self): if self.ser.is_open == True: self.ser.write((self.textEdit.toPlainText()+'rn').encode('gbk')) #self.ser.write(str(binascii.b2a_hex(self.textEdit.toPlainText()))) #嘗試編寫HEX發(fā)送—失敗 def Data_Recive(self): while True: if self.ser.is_open == True: self.RC_data = self.ser.read_all() if self.RC_data != b'': #print('receive',self.RC_data.decode("gbk")) self.textBrowser.insertPlainText(self.RC_data.decode("UTF-8")) self.textBrowser.moveCursor(self.textBrowser.textCursor().End) # 文本框顯示到底部
分別實(shí)現(xiàn)串口掃描、清空接收、打開(kāi)/關(guān)閉串口、發(fā)送數(shù)據(jù)以及多線程的接收功能。
此時(shí)在主函數(shù)里面創(chuàng)建線程
_thread.start_new_thread(myshow.Data_Recive,())
此時(shí)運(yùn)行一下程序并驗(yàn)證功能,發(fā)現(xiàn)OK
(5)遇到的問(wèn)題
首先遇到的問(wèn)題是無(wú)法再另一個(gè)文件里面使用其它的槽和對(duì)應(yīng)函數(shù),經(jīng)過(guò)多個(gè)群里面的大佬檢測(cè)后語(yǔ)句沒(méi)有問(wèn)題,最后發(fā)現(xiàn)是在主函數(shù)里面的映射有問(wèn)題。(更深入了解了python語(yǔ)法的映射關(guān)系)
第二個(gè)問(wèn)題是在使用serial庫(kù)時(shí)的發(fā)送部分的轉(zhuǎn)碼,后來(lái)通過(guò)encode("GBK")來(lái)解決
第三個(gè)問(wèn)題是接受部分,因?yàn)榇蜷_(kāi)串口后要時(shí)刻準(zhǔn)備接收,初始是使用了while True來(lái)實(shí)現(xiàn)試試監(jiān)聽(tīng),后來(lái)發(fā)現(xiàn)這樣程序根本無(wú)法運(yùn)行(無(wú)法進(jìn)入界面),后來(lái)通過(guò)搜索,以線程的方式實(shí)現(xiàn)了互不干擾的實(shí)時(shí)監(jiān)聽(tīng)。(python3里thread的庫(kù)名稱更改成了_thread)
編輯:黃飛
-
串口
+關(guān)注
關(guān)注
15文章
1588瀏覽量
79897 -
python
+關(guān)注
關(guān)注
56文章
4827瀏覽量
86693 -
pyqt5
+關(guān)注
關(guān)注
0文章
25瀏覽量
3515 -
上位機(jī)
+關(guān)注
關(guān)注
1文章
5瀏覽量
2656
發(fā)布評(píng)論請(qǐng)先 登錄
如何做一個(gè)簡(jiǎn)單的串口上位機(jī)程序
分享【串口上位機(jī)顯示波形】的軟件

IMUKit 9軸慣性測(cè)量單元的串口上位機(jī)軟件應(yīng)用程序免費(fèi)下載
【閑來(lái)無(wú)事玩C#】1、簡(jiǎn)單的串口上位機(jī)程序

基于QT的簡(jiǎn)單的上位機(jī)

手把手教你編寫一個(gè)上位機(jī)

QT|編寫一個(gè)簡(jiǎn)單的上位機(jī)

PyQT開(kāi)發(fā)上位機(jī)教程

Python從零開(kāi)始制作溫濕度串口上位機(jī)

自己做一個(gè)C#串口上位機(jī)

用pycharm寫上位機(jī)

C#開(kāi)發(fā)簡(jiǎn)單的串口上位機(jī)

使用pycharm開(kāi)發(fā)上位機(jī)配置pyqt5的環(huán)境

評(píng)論