0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

PyQT5+Pycharm编写一个简单的串口上位机

Harmony&嵌入式学习 来源:Harmony&嵌入式学习 作者: Harmony&嵌入式学 2023-05-13 13:16 次阅读

最近开始学习python,还是去年暑假看过一些python语法,至今忘的差不多了,初中的时候学过E语言,当时初中制作些单机外挂之类(CF也做过,呃就是被封号了),最近玩的嵌入式有时候需要用到上位机,之前都是通过E语言做的,总觉得拿不出手,便想着换一个语言写一个上的了台面的

综合考虑,选择的PyQt5来编写上位机(因为python方便些嘛)

话不多说,正文开始:

(1)pycharm的安装

下载连接:http://www.jetbrains.com/pycharm/download/#section=windows

pYYBAGRfHDqAEgpTAAHWWShbQcA352.png

在这里我选择的是win10版本的pycharm,大家根据系统自行选择,安装过程就不在赘述了。

(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"函数,将窗口显示出来,在这里我是选择了一个继承类,来继承通过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下添加些其它函数

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  # 设置数据位
        self.ser.stopbits = 1  # 设置停止位
        self.ser.parity = "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('打开串口')
        else:
            self.ser.open()
            self.pushButton_2.setText('关闭串口')
    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发送—失败
    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)  # 文本框显示到底部

分别实现串口扫描、清空接收、打开/关闭串口、发送数据以及多线程的接收功能。

此时在主函数里面创建线程

_thread.start_new_thread(myshow.Data_Recive,())

此时运行一下程序并验证功能,发现OK

pYYBAGRfHP6AB5zuAAA0M7ff2Sk136.png

(5)遇到的问题

首先遇到的问题是无法再另一个文件里面使用其它的槽和对应函数,经过多个群里面的大佬检测后语句没有问题,最后发现是在主函数里面的映射有问题。(更深入了解了python语法的映射关系)

第二个问题是在使用serial库时的发送部分的转码,后来通过encode("GBK")来解决

第三个问题是接受部分,因为打开串口后要时刻准备接收,初始是使用了while True来实现试试监听,后来发现这样程序根本无法运行(无法进入界面),后来通过搜索,以线程的方式实现了互不干扰的实时监听。(python3里thread的库名称更改成了_thread)

编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 串口
    +关注

    关注

    14

    文章

    1540

    浏览量

    76014
  • python
    +关注

    关注

    55

    文章

    4764

    浏览量

    84353
  • pyqt5
    +关注

    关注

    0

    文章

    25

    浏览量

    3392
  • 上位机
    +关注

    关注

    1

    文章

    3

    浏览量

    2656
收藏 人收藏

    评论

    相关推荐

    labview串口上位

    用labview做的简单串口上位,可作为智能车的上位
    发表于 06-20 23:22

    如何做一个简单串口上位程序

    篇来做一个简单串口上位程序,配合【STM32F103笔记】中的串口程序使用,后续还可以在
    发表于 01-14 06:54

    怎样使用Qt去编写简单上位

    怎样使用Qt去编写简单上位呢?有哪些步骤?
    发表于 03-02 06:07

    分享【串口上位显示波形】的软件

    看到好多人都需要这个东西,这玩意确实好用,但是网上分享出来的这类软件还是太少,而且貌似都不能直接拿来使用,下位是需要定的协议才可以让上位打印出波形的 我之前有过匿名
    发表于 12-12 16:50 40次下载
    分享【<b class='flag-5'>串口上位</b><b class='flag-5'>机</b>显示波形】的软件

    IMUKit 9轴惯性测量单元的串口上位软件应用程序免费下载

    本文档的主要内容详细介绍的是IMUKit 9轴惯性测量单元的串口上位软件应用程序免费下载。
    发表于 05-24 08:00 5次下载

    【闲来无事玩C#】1、简单串口上位程序

    篇来做一个简单串口上位程序,配合【STM32F103笔记】中的串口程序使用,后续还可以在
    发表于 01-14 11:21 19次下载
    【闲来无事玩C#】1、<b class='flag-5'>简单</b>的<b class='flag-5'>串口上位</b><b class='flag-5'>机</b>程序

    基于QT的简单上位

    。同样的,我们也从编写简单的基于QT的上位来体会体会
    发表于 05-08 10:57 16次下载
    基于QT的<b class='flag-5'>简单</b>的<b class='flag-5'>上位</b><b class='flag-5'>机</b>

    手把手教你编写上位

    本次来教大家编写基于QT的简单上位。 学习
    发表于 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 |
    发表于 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开发上位教程

    ,两都需要安装,需要记住安装的位置,会儿需要设置环境变量。 pip install PyQt5pip install PyQt5 - tools ( DemoProject )E
    发表于 05-08 09:59 3次下载
    <b class='flag-5'>PyQT</b>开发<b class='flag-5'>上位</b><b class='flag-5'>机</b>教程

    Python从零开始制作温湿度串口上位

    该项目为本人的次课设,在很多项目开发中,都需要通过上位来控制或者读取 MCU、MPU 中的数据。上位和设备间的通信协议有
    发表于 05-09 14:39 6次下载
    Python从零开始制作温湿度<b class='flag-5'>串口上位</b><b class='flag-5'>机</b>

    自己做一个C#串口上位

    最近想发之前自己做的简单串口上位,当然,
    发表于 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
    发表于 05-09 14:27 0次下载
    用<b class='flag-5'>pycharm</b>写<b class='flag-5'>上位</b><b class='flag-5'>机</b>

    C#开发简单串口上位

    采用C#开发上位非常方便,具体步骤如下:1.绘制上位的界面,如下图所示: 不要忘记还有下
    发表于 05-10 14:27 3次下载
    C#开发<b class='flag-5'>简单</b>的<b class='flag-5'>串口上位</b><b class='flag-5'>机</b>

    使用pycharm开发上位配置pyqt5的环境

    上位的开发过程中,使用QT的图形化界面,是开发上位最好最简单的选择,因此我将讲述配置pyqt5
    发表于 05-29 16:12 0次下载
    使用<b class='flag-5'>pycharm</b>开发<b class='flag-5'>上位</b><b class='flag-5'>机</b>配置<b class='flag-5'>pyqt5</b>的环境