实验室产品寿命测试+GUI RPI.GPIO Control

GUI

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:
1RPI 3 树莓派3
2HDMI 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. PyQt43. python34. 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-pyqt52. 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-testpython programming:https://github.com/teddypeng/Dryfiertest_python 

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

树莓派的奇幻之旅

发表评论