全球速看:毕业论文之PyQT5上位机开发

1、上位机用来干什么对于硬件工程师来说,上位机的主要作用就是提供一个良好的用户界面,方便用户使用硬...

1、上位机用来干什么

对于硬件工程师来说,上位机的主要作用就是提供一个良好的用户界面,方便用户使用硬件功能。另一个重要的优势是上位机的开发方式和开发环境相对下位机来说更加人性化。完善的IDE,丰富的硬件资源,大量的第三方库,使得做一个软件往往比做一个完善的硬件更容易。我们可以在计算机使用按钮,鼠标,键盘,下拉列表等作为输入信息的途径。用户的学习成本极低。同时也可以用文字输出框,波形显示控件,表格,声音作为信息的输出途径。信息获取直观,方便。本文将以我制作的模拟信号发生器上位机作为蓝本,介绍它的开发流程,难点,以及未来展望。


(资料图)

2.介绍常用开发工具、语言。为什么用它 自身经历出发

我知道的常用上位机开发语言有Java、C++、C#、labview、python、html+js(electron)。很多的嵌入式开发工具就是Java开发的,比如stm32cubemx、RT-stdio、瑞萨电子的e2sIDE。Java常用来开发手机端的app。

C++常常配合QT来开发图形化界面,QT是一个跨平台的GUI框架,框架本身也是由C++编写的。纯的QT开发完全是用C++编写的,但是C++的学习难度大,对开发者要求较高。

C#也是上位机开发的常用语言,它以Vsstido作为开发IDE,所以比较适合Window下的软件开发,开发框架是WPF或者是Winform。说实话我最开始也考虑这个,问题在于我的电脑配置低,带不动IDE。

Labview是图形化编程的IDE,比较贴合硬件工程师的思维,所有的语法,功能,接口都以图形空间的方式展示,所见即所得。还是因为软件的体积过大,我不想用。

最后我选择的是Python+QT的方式进行上位机的开发,它可以说是解决我的需求的最优解。不需要庞大的IDE编写,类c的语法,强大的包管理器,丰富的代码案例。这里的QT的接口用python进行了封装,所以还是采用python的语法编写执行逻辑。

Electron实际上是把网页开发html+js+css的流程,封装一下用来开发客户端软件。由于和网页开发比较像,所以每个electron软件都内置一个chrome内核,故采用electron开发的软件都比较的大。Electron也有包管理npm为其提供第三方库拓展应用程序的功能。

Electron界面也比较美观,可移植性比较强。最重要的是我没学过网页开发。

总结一下,python作为一个胶水语言把GUI框架,信号处理,串口通信这些功能给融合到一起。虽然python应用程序打包后也很大,内置了python解释器,但是它第三方库多。

开发起来简单,快速。

3.开发环境配置

下载python解释器

/ftp/python/3.10.9/python-3.10.9-amd64.exe

或者,从清华大学开源软件镜像网站下载

安装好后如图

在cmd输入python

说明环境变量没有问题。

终端中输入exit()退出python程序。

Python的包管理器叫做pip,我们需要更新pip的版本以便支持最新的第三方库。

更新的命令python -m pip install --upgrade pip

接着换源,把网络上存放的包的网址替换成国内镜像。

阿里,腾讯,网易,清华….都可以。

地址

清华大学:/simple

阿里云:http://mirrors.aliyun.com/pypi/simple

换源的方式由临时换源和永久换源

临时换源的意思就是在下载第三方库时,手动指定下载的网站。

永久换源的意思是 建立一个配置文件存放下载第三方包的镜像地址

临时换源

pip install PyQt5 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

-i后面的参数是豆瓣源地址

永久换源 以Window为例

(1)windows环境下:比如windows用户名是 admin

那么建立 admin主目录下的 pip子目录,在此pip子目录下建立pip的配置文件:pip.ini

在这c:\users\admin\pip\pip.ini

# coding: GBK[global]index-url = /simple[install]trusted-host = #清华大学:/simple#阿里云:http://mirrors.aliyun.com/pypi/simple/

换源后。

下载开发所需的工具。

编辑器geany,pycharm,vscode…都行

第三方包:

PyQT5:python下的QT库,可以使用Qdesigner工具拖拽设计界面。

使用信号与槽功能设计交互事件。

Serial:串口通信库

Matplotlib:绘制图表

Pyqtgraph:绘制波形

PIL:图像处理 这个放在信号发生器的文章里写

Scipy:信号处理的库这个放在示波器的文章里写

pyuic5 -o ui_a.py serial.ui 把UI设计文件转换成py文件

4.功能实现

事件响应

QT的事件响应通过信号与槽完成。按钮,菜单选项,滑块,文本框,下拉列表等在出现特定操作时,会发出信号,这个信号会触发其绑定的槽函数。槽函数会处理该信号要对应的操作。

类似于中断和中断服务函数。

不过在实现具体的事件响应前,应该指定相关控件的信号。比如按钮有单击信号,按下信号等。如图

例如

self.send=self.pushButton_2#获取按钮控件对象def send_handl(self):#自定义槽函数send_handl 处理具体的按下操作,比如发送数据self.send.clicked.connect(self.send_handl)#把按钮控件按下信号绑定到槽函数send_handl()#按下按钮执行send_handl函数通信我使用的是串口通信,python中通过serial库实现串口通信。self.uart =serial.Serial(port, 9600)#串口对象构造参数 端口号(字符串),波特率(整型)self.uart.readline()#串口读取函数self.uart.write(data.encode())#串口写入函数data.encode()#表示对发送的信息进行编码,编码为utf-8data.decode()#表示对接收的信息解码

为了保证能够及时发送和接收,这里有两种解决方案。1.使用定时器周期性的判断读取缓存区是否有数据,并把数据显示出来。2.使用多线程,把读取数据的任务单独放一个线程中,提高响应速度。

显示波形

显示波形用的是Pyqtgraph,下位机发送的数据是一连串的数字。Value1:value2:…..等为了保证及时接收串口数据,使用PYQT里的Qtimer类创建了一个定时器,每隔20ms读取一次串口缓冲区的内容。并把内容记录在字符串data中,把data按照分隔符”:”的拆分,拆分成字符串数组x ,判断x的长度。如果x的长度不等于1,则说明缓冲区里面有内容。把字符串数组里每个元素转换成数值并保存在队列里。创建另一个定时器,用于界面绘制,定时器每个100ms读取一次队列,每次读取256个元素,把元素内容存入数组中,使用PyQtgraph库读取数组绘制图形

self.timer.timeout.connect(self.update)定时更新数据self.timer.start(50)def init(self):win = pg.GraphicsLayoutWidget()win.setBackground("w")self.plot = self.widget.addPlot()self.plot.setMouseEnabled(x=False, y=False)#禁止鼠标拖动self.plot.showAxes(True,showValues=(True, True, True, True),size=20)#显示坐标轴vb = self.plot.getViewBox()vb.setBackgroundColor("w")#设置画布背景self.curve = self.plot.plot(pen="black")win.show()def update(self):#更新数据# a=range(0,1000,1)if(q.full()):#print("ok")for i in range(0, 256, 1):x=str(q.get())try:a=int(re.sub("\D","",x))except ValueError:print(a)self.curve.setData(a)#把数据填入图表中self.curve.setPos(self.ptr, 0)self.ptr += 1

5.项目案例

做一个简易的串口助手

点击这里创建一个主界面。

界面分成三部分第一部分控件区,提供按钮、列表、文本框控件,布局。

第二部分界面设计区,可以把控件拖拽到此区域。

第三部分,对象查看器,通过树状图展示了从视图到空间的关系。下方的数学编辑器可以编辑设计区的任何对象的属性。例如,位置,是否可见…

这里用到了button,list,label,textview控件。

在Qdesiger内可以设置控件发出的信号类型,但是一般不在这里设置。不过我们可以通过在这的信号与槽工具看看,相关的控件有哪些信号。

左击选中一个控件,拖拽出一条线再松手。

设计好后保存成xxx.ui文件

使用pyuic5 -o ui_a.py xxx.ui把ui文件转换成py文件。

也可使用vscode插件,自行百度。

接下来需要在主文件导入界面文件。

在此之前需要导入pyqt5的一些库。

之后附上代码这里就不加了。

from ui_a import Ui_MainWindow#导入ui转py文件class MyWindow(QtWidgets.QMainWindow,Ui_MainWindow):#继承父类QWidget这个MyWindow就是我们设计功能的主类,所以需要继承PyQT和MainWindow类。以便操作他们派生的对象。在MyWindow构造函数中,初始化父类对象和界面组件对象。在def ini_ui(self):初始化控件self.com=self.comboBox获取控件对象把控件的信号绑定到槽函数comfun上,self.com.activated.connect(self.comfun)

编写槽函数def comfun(self):global ser, serialPortserialPort=self.com.currentText()#获取当前的串口号print(serialPort)ser.port=serialPort#设置串口对象的串口号其他控件都差不多发送槽函数def sendhand(self):global serialPort, serif self.pushButton.text() == "断开"and serialPort != None:send_str=self.textEdit.toPlainText()ser.write(send_str.encode("utf-8"))定时器定时监控接收缓冲区def time_out(self):global ser, timer_valuedata = ser.read_all()txt=str(data.decode())if (len(txt)!=0):self.textBrowser.append(txt)self.timer.start(timer_value)

要在打开串口后,开启定时器,并且在回调函数执行末尾开启定时器。

重复执行回调函数

app=QApplication(sys.argv)timer_value=100#间隔100ms读一次串口baudRate = 115200ser=serial.Serial(timeout=0.5)############com_list=get_com_list()if com_list!=[]:#将设备名填入到下拉框中for i in range(len(com_list)):w.com.addItem(com_list)serialPort=com_list[0]#默认为第一个端口else:serialPort = Nonew.show_dialog(str="请先打开串口")#############开启图形化界面w=MyWindow()w.show()#w->ui->show ui里有布局#w.show_dialog("123456")#程序进行循环等待状态app.exec()

6.其他资料

Python学习:

/paths/85 交互式python学习,适合有编程基础的。

PyQT学习:

https://www.bilibili.com/video/BV15R4y1s7JD/?vd_source=9030595337abea343e2125e65d245d46

Pyqtgraph绘制波形教程:

/zsbyg/pyqtgraph_my_cookbook/tree/master

我会把我的学习时的代码打包,供其下载。

作者:x鑫鑫

标签:

相关阅读

六代中医传人张喜海:守正中医创新治骨...

张医生,我们是专门过来找您看病的张院长,你看看我的病还能治吗?治骨病,找张喜海医生 纷杂的诊室...

2019-12-17 更新

庆70华诞 迎民族盛会——新阶层 新担...

拼搏砥砺七十载,大展宏图喜露颜。7月26日,由中华网河南频道主办,河南省委统战部新的社会阶层人士统战工作处...

2019-07-28 更新

河南首家无人机表演编队亮相 夜空中上...

【导语】河南地图、少林功夫、司母戊鼎、甲骨文、卢舍那大佛、鲸鱼、金字塔、雪花……200架无人机编队在夜空中...

2019-07-15 更新

全球速看:毕业论文之PyQT5上位机开发

1、上位机用来干什么对于硬件工程师来说,上位机的主要作用就是提供一个良好的用户界面,方便用户使用硬

2023-06-02 更新

全球看热讯:豆粕领跌 5月饲料原料板块...

据生意社商品行情分析系统监测数据显示:5月,饲料原料行情涨跌不一,整体反弹乏力,饲料原料指数振荡下跌

2023-06-02 更新

1-4月云南全省全社会用电量763.65亿千瓦...

1-4月云南全省全社会用电量763 65亿千瓦时同比增长4 2%北极星售电网获悉,云南省能源局发布云南能源简报202

2023-06-02 更新

如何用“不能只写……要写”语体,安利...

如果你要写奔腾B70s,就不能只写奔腾B70s,要写它15万以内的价格,要写它的轿跑式外观,要写它的科技舒适感

2023-06-02 更新

日本四大车商5月在美新车销量同比增加27.5%

据产经新闻,日本四大车商1日公布的5月在美新车销量总计为39 4442万辆,较上年同期增加27 5%。得益全球范

2023-06-02 更新

出道即走红,“新国民双子星”实力演绎...

得益于一汽集团60多年的造车积淀,以及与大众、丰田等国际品牌30多年的合资合作经验,一汽奔腾经过引进、吸

2023-06-02 更新

从“制造”到“智造”,瑞安汽摩配将如...

随着当地电子商务逐渐发展成熟,Shopee等线上购物平台正成为区域内消费者采购汽摩配件产品的新选择,越来越

2023-06-02 更新

苏轼水调歌头明月几时有全诗赏析_苏轼水...

1、《水调歌头明月几时有》原件(相关资料图)2、陈冰中秋节,高高兴兴地喝到第二天早上,醉了,写下了这首词

2023-06-02 更新

180多项政策文件落地实施,海南自贸港政...

“零关税”三张清单扩容增效——海南自贸港原辅料、交通工具及游艇、自用生产设备三张“零关税”清单实施以...

2023-06-02 更新

天帝使我长百兽的长_天帝使我长百兽

1、为介动用法。2、介动用法是古代汉语词语语法中的一种特殊的动宾关系,它由谓语动词加名词构成,理解其语

2023-06-02 更新

电脑一键还原f11怎么操作_f11一键还原精...

1、一键还原精灵的使用方法:一、软件的安装  双击下载回来的安装文件Setup exe,稍等片刻,电脑就会自动

2023-06-02 更新

中储粮3000多台粮机装备驰援河南夏收_天...

中储粮紧急出动3000多台粮机装备驰援河南应对严重“烂场雨”天气,做好夏粮收购,帮助粮农减损。记者1日晚

2023-06-02 更新

今日观点!敬请期待!2023重庆车展将于6...

重庆车展还将深挖城市属性,与全城200家知名火锅品牌、众多城市生活品牌形成联动,以汽⻋消费带动重庆全域

2023-06-02 更新

全球观速讯丨欧拉闪电猫硬核拆车,为你...

欧拉闪电猫此次安全测试,不仅是国内首次以女性假人为主角的多工况碰撞挑战,更是在碰撞设置中引入了堪称

2023-06-02 更新

车坛快报|福特因火灾隐患在美国召回14.2...

据外媒报道,丰田在5月31日表示,2016年10月到2023年5月期间,该公司在大洋洲和亚洲部分国家的客户信息可能

2023-06-02 更新

华为余承东谈“AITO问界十万辆车下线”...

正如余承东所言,“我们走向了软件定义汽车的新时代,也是产品不断升级和发展的新时代,这需要我们坚持产品

2023-06-02 更新

雏菊花语是什么意思 寓意(雏菊花语)|...

1、雏菊花语有很多种,主要是幼稚的,单恋的,伤心的爱情。2、雏菊有着娇小的外表,像一朵永远长不大的菊花

2023-06-02 更新

硬核科技论 | 终于加上激光雷达 全新...

昨天也就是5月24日,全新一代蔚来ES6上市了,36 8-42 6万元的价格,今天,我们就来看看它的科技配置升级都

2023-06-02 更新

脑血栓能吃芒果吗 每日视点

可以适量吃芒果。建议用量:50g(约1个) 天引起脑血栓的原因与日常生活、年龄、疾病等有一定关系,饮食可

2023-06-02 更新

斯凡洛家具:以品质为核心生命力 打造兼...

斯凡洛家具是创家家具旗下以北欧轻奢系列产品为主的品牌,轻奢家具更注重独立的原创设计,且具有更加高档的

2023-06-02 更新

泰国下降头是什么意思_下降头是什么意思...

1、下降头之法术:(极其恶毒,慎用)去坟头拣来别人上坟用过的黄表纸,剪人形,上面用血(什么血都行,以

2023-06-02 更新

水晶岩城 新地址 2020_水晶岩城 全球今亮点

1、岩城巨渊紫色水晶破处具体步骤如下:首先来到共鸣机关附近,获取岩晶石;2、然后将岩晶石放置在待激活的

2023-06-02 更新

手机动态:Apple默认将Siri音频剪辑评论...

智能手机是信息技术的一大重要技术之一,我们现在已经进入了智能手机时代。智能手机已渗透了社会的每个领域

2023-06-02 更新

全球球精选!河南省12家科技企业孵化器...

下一步,省科技厅将把推动载体建设融入创新驱动、科教兴省、人才强省战略,结合规上工业企业研发活动全覆盖

2023-06-02 更新

深蓝S7预售16.99万元起,设计对标Model...

新车与深蓝SL03同样基于EPA1平台打造,提供增程和纯电两种动力规格。目前SL03终端售价是14 99万元,作为SUV

2023-06-02 更新

当前热文:优化外观配置,这样的新摩卡D...

当初,摩卡DHT-PHEV选择燃油车同款外观设计,虽说没什么问题,但对于一款新能源车型来说确实没什么亮点,如

2023-06-02 更新

最新价格屠夫?这SUV预售价16.99万起 ...

同深蓝SL03相同,深蓝S7也有拥有类似轿跑车型的身姿和线条,流畅的车身轮廓以及大尺寸扰流板等运动设计使其

2023-06-02 更新

资讯推荐:大五座SUV市场最强搅局者,新...

不同于市场上“价值=配置 价格”的价值标准,魏牌深谙用户核心需求,在产品打造上,拒绝以“过度冗余”的方...

2023-06-02 更新

涉6项违法违规,上海浦东江南村镇银行被...

【环球网财经讯】近日,上海银保监局行政处罚信息公示,上海浦东江南村镇银行股份有限公司(下简称上海浦东

2023-06-02 更新

全力以赴战“三夏”丨机声隆隆抢收忙 ...

□本报记者方化祎李昊本报通讯员谢辛凌6月1日,雨后天晴的第二天,沈丘县周营镇马营村一处麦田里机声隆隆。

2023-06-02 更新

新闻频道

社会

财经频道