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

    文章

    1483

    浏览量

    74513
  • python
    +关注

    关注

    51

    文章

    4675

    浏览量

    83467
  • pyqt5
    +关注

    关注

    0

    文章

    25

    浏览量

    3361
  • 上位机
    +关注

    关注

    1

    文章

    2

    浏览量

    2656
收藏 人收藏

    评论

    相关推荐

    labview串口上位

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

    急!!!跪求labview串口上位和下位串口通信协议资料(最好有程序和详细讲解)。。。

    急!!!跪求labview串口上位和下位串口通信协议资料(最好有程序和详细讲解)。。。
    发表于 07-24 17:57

    求助比较好用的LABview串口上位,要求有vi格式的文件

    求助比较好用的LABview串口上位,要求有vi格式的文件 最好 有些详细的使用说名,方便修改
    发表于 09-17 08:56

    简单上位调试软件分享!

    这时16年刚来公司,为公司产品写的简单上位调试软件,软件是用C#开发的,原理就是
    发表于 11-04 21:45

    DMA通信编程原理以及串口上位发送数据实例

    DMA通信编程原理以及串口上位发送数据实例、DMA通信编程原理介绍1、定义2、数据传输的方式3、传输参数4、数据传输的四要素5、控制器
    发表于 01-11 07:44

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

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

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

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

    labview编写FPGA上位

    请问各位大佬们,我现在已经使用FPGA编写完了串口发送程序,但是需要使用labview来编写
    发表于 08-07 16:32

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

    这一篇来做一个简单串口上位机程序,配合【STM32F103笔记】中的串口程序使用,后续还可以在这个串口小程序的基础上添加更多功能,可以根据预先设计的数据格式,将
    发表于 01-14 11:21 19次下载
    【闲来无事玩C#】1、<b class='flag-5'>简单</b>的<b class='flag-5'>串口上位</b>机程序

    QT|编写一个简单上位

    QT | 编写一个简单上位机 时间 :2023-03-19文章目录QT | 编写一个简单上位
    发表于 05-08 10:12 2次下载
    QT|<b class='flag-5'>编写</b>一个<b class='flag-5'>简单</b>的<b class='flag-5'>上位</b>机

    PyQT开发上位机教程

    环境: Pycharm IDE+PtQT+Qt designer 第一步 安装环境   需要安装python下qt的环境及工具, 终端terminal下面运行指令 ,我这里已经安装,所以显示已经有
    发表于 05-08 09:59 3次下载
    <b class='flag-5'>PyQT</b>开发<b class='flag-5'>上位</b>机教程

    自己做一个C#串口上位

    最近想发一个之前自己做的一个简单串口上位机,当然,工作时写的要比这个复杂了。除了C#可以写上位机,我同事也有用QT的,具体的哪个好不 做评判。第一次接触C#还是从我实习的时候才认知到C#原来这么
    发表于 05-09 14:24 5次下载
    自己做一个C#<b class='flag-5'>串口上位</b>机

    pycharm上位

    pycharm上写上位机 安装pyqt5(安装好了Anaconda)用pip安装: pip install pyqt5,安装: pip install
    发表于 05-09 14:27 0次下载
    用<b class='flag-5'>pycharm</b>写<b class='flag-5'>上位</b>机

    C#开发简单串口上位

    采用C#开发上位机非常方便,具体步骤如下:1.绘制一个上位机的界面,如下图所示: 不要忘记还有下面的串口模块serialPort1 2.初始化部分: 波特率编辑框中加入需要的波特率 实现COM口选择
    发表于 05-10 14:27 1次下载
    C#开发<b class='flag-5'>简单</b>的<b class='flag-5'>串口上位</b>机

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

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