0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

PyQT5+Pycharm編寫一個簡單的串口上位機

Harmony&嵌入式學習 ? 來源:Harmony&嵌入式學習 ? 作者: Harmony&嵌入式學 ? 2023-05-13 13:16 ? 次閱讀

最近開始學習python,還是去年暑假看過一些python語法,至今忘的差不多了,初中的時候?qū)W過E語言,當時初中制作些單機外掛之類(CF也做過,呃就是被封號了),最近玩的嵌入式有時候需要用到上位機,之前都是通過E語言做的,總覺得拿不出手,便想著換一個語言寫一個上的了臺面的

綜合考慮,選擇的PyQt5來編寫上位機(因為python方便些嘛)

話不多說,正文開始:

(1)pycharm的安裝

下載連接:http://www.jetbrains.com/pycharm/download/#section=windows

pYYBAGRfHDqAEgpTAAHWWShbQcA352.png

在這里我選擇的是win10版本的pycharm,大家根據(jù)系統(tǒng)自行選擇,安裝過程就不在贅述了。

(2)PyQt5的安裝

這個我搜索的時候大家都使用的是pip的方式安裝,在這的話我推薦通過Pycharm來安裝,比較方便些。

poYBAGRfHFmAbvMkAACpQCYkamw956.png

pYYBAGRfHGOACqVdAAD7muRPAT0583.png

poYBAGRfHHGAf0NkAAEb9Bo3v0k762.png

輸入pyqt5后選擇Install即可

(3)Designer.exe的使用(畫界面)

打開designer開始繪制我們的界面:

poYBAGRfHJeAIbzBAAFKDmUtaaU153.png

繪制完成后由UI文件生成PY文件,此時就可以開始編寫代碼了

(4)編寫程序

新建一個PY文件,我使用的名稱為demo.py

先引入需要使用的庫

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

此時我們開始編寫"MAIN"函數(shù),將窗口顯示出來,在這里我是選擇了一個繼承類,來繼承通過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_())

此時可以正常顯示界面,但是沒有功能,在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è)置校驗位
        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('打開串口')
        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)  # 文本框顯示到底部

分別實現(xiàn)串口掃描、清空接收、打開/關(guān)閉串口、發(fā)送數(shù)據(jù)以及多線程的接收功能。

此時在主函數(shù)里面創(chuàng)建線程

_thread.start_new_thread(myshow.Data_Recive,())

此時運行一下程序并驗證功能,發(fā)現(xiàn)OK

pYYBAGRfHP6AB5zuAAA0M7ff2Sk136.png

(5)遇到的問題

首先遇到的問題是無法再另一個文件里面使用其它的槽和對應(yīng)函數(shù),經(jīng)過多個群里面的大佬檢測后語句沒有問題,最后發(fā)現(xiàn)是在主函數(shù)里面的映射有問題。(更深入了解了python語法的映射關(guān)系)

第二個問題是在使用serial庫時的發(fā)送部分的轉(zhuǎn)碼,后來通過encode("GBK")來解決

第三個問題是接受部分,因為打開串口后要時刻準備接收,初始是使用了while True來實現(xiàn)試試監(jiān)聽,后來發(fā)現(xiàn)這樣程序根本無法運行(無法進入界面),后來通過搜索,以線程的方式實現(xiàn)了互不干擾的實時監(jiān)聽。(python3里thread的庫名稱更改成了_thread)

編輯:黃飛

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 串口
    +關(guān)注

    關(guān)注

    14

    文章

    1554

    瀏覽量

    76514
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4797

    瀏覽量

    84688
  • pyqt5
    +關(guān)注

    關(guān)注

    0

    文章

    25

    瀏覽量

    3402
  • 上位機
    +關(guān)注

    關(guān)注

    1

    文章

    3

    瀏覽量

    2656
收藏 人收藏

    評論

    相關(guān)推薦

    labview串口上位

    用labview做的簡單串口上位,可作為智能車的上位
    發(fā)表于 06-20 23:22

    如何做一個簡單串口上位程序

    篇來做一個簡單串口上位程序,配合【STM32F103筆記】中的串口程序使用,后續(xù)還可以在
    發(fā)表于 01-14 06:54

    怎樣使用Qt去編寫簡單上位

    怎樣使用Qt去編寫簡單上位呢?有哪些步驟?
    發(fā)表于 03-02 06:07

    分享【串口上位顯示波形】的軟件

    看到好多人都需要這個東西,這玩意確實好用,但是網(wǎng)上分享出來的這類軟件還是太少,而且貌似都不能直接拿來使用,下位是需要定的協(xié)議才可以讓上位打印出波形的 我之前有過匿名
    發(fā)表于 12-12 16:50 ?41次下載
    分享【<b class='flag-5'>串口上位</b><b class='flag-5'>機</b>顯示波形】的軟件

    IMUKit 9軸慣性測量單元的串口上位軟件應(yīng)用程序免費下載

    本文檔的主要內(nèi)容詳細介紹的是IMUKit 9軸慣性測量單元的串口上位軟件應(yīng)用程序免費下載。
    發(fā)表于 05-24 08:00 ?5次下載

    【閑來無事玩C#】1、簡單串口上位程序

    篇來做一個簡單串口上位程序,配合【STM32F103筆記】中的串口程序使用,后續(xù)還可以在
    發(fā)表于 01-14 11:21 ?19次下載
    【閑來無事玩C#】1、<b class='flag-5'>簡單</b>的<b class='flag-5'>串口上位</b><b class='flag-5'>機</b>程序

    基于QT的簡單上位

    。同樣的,我們也從編寫簡單的基于QT的上位來體會體會
    發(fā)表于 05-08 10:57 ?16次下載
    基于QT的<b class='flag-5'>簡單</b>的<b class='flag-5'>上位</b><b class='flag-5'>機</b>

    手把手教你編寫上位

    本次來教大家編寫基于QT的簡單上位。 學習
    發(fā)表于 05-08 10:36 ?1次下載
    手把手教你<b class='flag-5'>編寫</b><b class='flag-5'>一</b><b class='flag-5'>個</b><b class='flag-5'>上位</b><b class='flag-5'>機</b>

    QT|編寫簡單上位

    QT | 編寫簡單上位 時間 :2023-03-19文章目錄QT |
    發(fā)表于 05-08 10:12 ?3次下載
    QT|<b class='flag-5'>編寫</b><b class='flag-5'>一</b><b class='flag-5'>個</b><b class='flag-5'>簡單</b>的<b class='flag-5'>上位</b><b class='flag-5'>機</b>

    PyQT開發(fā)上位教程

    ,兩都需要安裝,需要記住安裝的位置,會兒需要設(shè)置環(huán)境變量。 pip install PyQt5pip install PyQt5 - tools ( DemoProject )E
    發(fā)表于 05-08 09:59 ?3次下載
    <b class='flag-5'>PyQT</b>開發(fā)<b class='flag-5'>上位</b><b class='flag-5'>機</b>教程

    Python從零開始制作溫濕度串口上位

    該項目為本人的次課設(shè),在很多項目開發(fā)中,都需要通過上位來控制或者讀取 MCU、MPU 中的數(shù)據(jù)。上位和設(shè)備間的通信協(xié)議有
    發(fā)表于 05-09 14:39 ?6次下載
    Python從零開始制作溫濕度<b class='flag-5'>串口上位</b><b class='flag-5'>機</b>

    自己做一個C#串口上位

    最近想發(fā)之前自己做的簡單串口上位,當然,
    發(fā)表于 05-09 14:24 ?7次下載
    自己做<b class='flag-5'>一個</b>C#<b class='flag-5'>串口上位</b><b class='flag-5'>機</b>

    pycharm上位

    pycharm上寫上位 安裝pyqt5(安裝好了Anaconda)用pip安裝: pip install pyqt5,安裝: pip i
    發(fā)表于 05-09 14:27 ?0次下載
    用<b class='flag-5'>pycharm</b>寫<b class='flag-5'>上位</b><b class='flag-5'>機</b>

    C#開發(fā)簡單串口上位

    采用C#開發(fā)上位非常方便,具體步驟如下:1.繪制上位的界面,如下圖所示: 不要忘記還有下
    發(fā)表于 05-10 14:27 ?5次下載
    C#開發(fā)<b class='flag-5'>簡單</b>的<b class='flag-5'>串口上位</b><b class='flag-5'>機</b>

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

    上位的開發(fā)過程中,使用QT的圖形化界面,是開發(fā)上位最好最簡單的選擇,因此我將講述配置pyqt5
    發(fā)表于 05-29 16:12 ?0次下載
    使用<b class='flag-5'>pycharm</b>開發(fā)<b class='flag-5'>上位</b><b class='flag-5'>機</b>配置<b class='flag-5'>pyqt5</b>的環(huán)境