首页
学习
活动
专区
工具
TVP
发布

Python+Pyqt+Qt designer+GUI RPI.GPIO Control

Introduction

前段时间接到一款测试任务,需要监测一款产品的寿命,需要控制DO以及AI反馈,那么这个用树莓派+Python来做再合适不过了,在入手前也查阅了很多资料,包括如何制作用户界面(GUI),如何多线程控制,以及pyqt的使用,编译环境的配置等等,最让我不能忍的就是在某些中文论坛有些啥都不懂的小菜B也跑来回答问题误导别人,渣渣永远都是渣渣。

这次的知识点与难点有:

1.编译环境的安装及配置

2.Pyqt搭配python用户界面设计及关联

3.python的多线程控制解决GUI无法响应问题

4.ini配置文件的编程

5.RPI.GPIO树莓派的IO点控制

What you will need

Hardware:

1.RPI 3 树莓派3

2.HDMI Screen 7" 触摸屏

3.DuPont Wire Cable Kit 杜邦线

4.Hexagonal Threaded Spacers Kit 六角铜柱

5.Optical coupling isolation module 24V转3.3V 光耦隔离板

6.DC 24V Power Supply 24V直流电源

7.Solenoid Valve 电磁阀

8.1/4W Metal Film Resistors Assortment Kit 电阻包

9.ADS1115 数模转换板

10 .Force Sensor 力敏传感器

由于很难避免工具在动作过程中的对力敏传感器的干扰,所以为了减少开发难度,暂将AI这一环节取消了(9,10)。

Software:

1.eric5(python IDE)

2.PyQt4

3.python3

4.raspbian jessie OS

5.Qt designer 4

6.RPI.GPIO

软件这一块也是需要花费不少时间的,所以关于环境的配置有时间再重新总结一下。

What you will do

1. 使用qt-designer 配置UI图标:

除了qt-designer 之外,python还可以用到tkinter等模块进行GUI编程操作,但是我觉得有了qt-designer的话可以省下很多敲代码的时间。不过相比labview界面设计的话,qt-designer的用户体验和功能方面还是逊色不少的。

一个lcdnumber数值显示循环次数,一个spinbox设置目标循环次数以及三个button控件提供给用户进行常用操作。

在qt-designer 的右侧有一栏信号栏,可以用于关联按钮的信号事件操作:

大致的布局完成后即可以使用pyqt4转换为UI的py文件进行进一步编程:

pyuic4 -x ..ui >..py

以下大部分为转换后的python代码:

以上代码主要用户配置控件的尺寸,名称等属性,而QtCore.QObject.connect 用于关联控件与想要执行的操作。

定义需要执行的操作方法:

2. 使用python+pyqtSignal()编写工作线程及线程之间通讯:

为了避免while循环在工作的同时造成主线程界面响应卡死问题,除了UI类以外另外编写了workThread类,用于控制while操作,(通过是否满足界面cycle的设定值以及用户按钮操作来决定是否终止循环):

用户启动和停止按钮操作用于控制bt2的True或者False:

run方法中需要将每次循环完成的信号发送出去:

用户点击启动按钮用于启动workThread(),并将其关联至countTime方法实现cycle数累加:

countTime方法:

这里的cycle数为全局变量,因为在两个类中都需要用到cycle值。

最后启动程序界面:

3. 使用init文件读取写入cycle数:

实现这一步骤的目的是为了防止重新启动程序后,仍然保留并显示界面已完成的cycle数。在每次程序初始化之前导入ConfigParser模块用于对test.ini 文件的读取,并将值赋予全局变量cycle.

test.ini文件:

而在每次循环需要执行的countTime()方法中将当前cycle数值写入test.ini:使用with open(...) as...语句

4. 树莓派RPI.GPIO的使用:

这个库函数的熟练使用是进行树莓派编程控制的基础,开始前导入:

将模式设置为BCM引脚模式,之前写的C++使用的是wiringPI引脚模式,两者编号是不同的。

禁用GPIO未关闭时发生的警告信息:

在使用过程中,可将GPIO口置为输入高低电平检测或者输出高低电平控制:

最后一张成品图:

Hit

1. PYQT5 转换成PY代码:

https://stackoverflow.com/questions/43028904/converting-ui-to-py-with-python-3-6-on-pyqt5

2. PYQT4 转换成PY代码:

3. 树莓派无法实现apt-get install等操作:

Solution:

4. Pyqt 如何实现multipleprocess进而更新UI:

http://hgoldfish.com/blogs/article/78/

5. ini 读取写入:

https://stackoverflow.com/questions/8884188/how-to-read-and-write-ini-file-with-python3

Refer to:

一共两个版本,感谢Pierre哥起初用Qtcreator C++给我写的程序,第二个是我后续增加的python版本:

c programming:

https://github.com/teddypeng/Dry-fire-test

python programming:

https://github.com/teddypeng/Dryfiertest_python

看到此处如果有亲友团能打赏个几百大洋就再好不过了:

树莓派的奇幻之旅

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180126G15ZJO00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券