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
看到此处如果有亲友团能打赏个几百大洋就再好不过了:
树莓派的奇幻之旅
领取专属 10元无门槛券
私享最新 技术干货