您的位置 首页 电子

Python和PyQT来开发嵌入式ARM界面怎么完成

Python和PyQT来开发嵌入式ARM界面如何实现-随着Python在互联网人工智能领域的流行,大家也慢慢感受到Python开发的便利,本文就基于嵌入式ARM平台,介绍使用Python配合PyQT5模块来开发图形化应用程序。

Python是一种跨渠道的计算机程序规划言语。是一种面向对象的动态类型言语,开始被规划用于编写自动化脚本(shell),跟着版别的不断更新和言语新功用的添加,越来越多被用于独立的、大型项目的开发

1)。 简介

跟着Python在互联网人工智能范畴的盛行,咱们也渐渐感受到Python开发的便当,本文就依据嵌入式ARM渠道,介绍运用Python合作PyQT5模块来开发图形化运用程序。

本文所演示的ARM渠道来自于Toradex 依据NXP iMX6 ARM处理器的Apalis iMX6 ARM嵌入式渠道。

2. 预备

a)。 Apalis iMX6Q ARM中心版合作Apalis Evaluation Board载板,衔接调试串口UART1(载板X29)到开发主机便利调试。更多关于Apalis iMX6合作Apalis EvaluaTIon Board载板的阐明请参阅Datasheet和开发上手攻略。

b)。 Apalis iMX6Q 默许的Linux BSP是不包含Python,QT等支撑的,需求从头编译。

。/ 依据Toradex Linux BSP release V2.8

。/ 参阅这儿建立Openembedded 编译环境,然后适配下面patch,用于使本文测验需求的 libsoc适配 Python3。

https://github.com/simonqin09/libsoc-examples/blob/master/python/0005-libsoc-python3-support.patch

。/ 修正 build/conf/local.conf 文件,添加需求的组件

————————–

#IMAGE_INSTALL_append = “ python3 python3-pip python3-libsoc python3-pyqt5 rng-tools ”

————————–

。/ 适配下面patch,在规范image bb文件中添加QT5的支撑

https://github.com/simonqin09/libsoc-examples/blob/master/python/0003-angstrom-qt5-lxde-image.patch

。/ 从头编译image

————————–

$ bitbake -k angstrom-qt5-lxde-image

————————–

。/ 新生成的image坐落 deploy/images/apalis-imx6/ 目录,参阅这儿的阐明更新到Apalis iMX6模块上面

3)。 Python GPIO中止测验程序

a)。 首要咱们先不包含图形界面,独自经过Python来完结简略的GPIO中止测验程序,本程序经过调用 libsoc 来完结GPIO操控,关于libsoc的运用和阐明请参阅这儿。

b)。 Apalis EvaluaTIon Board载板硬件衔接装备如下,X4 GPIO05(MXM3_11)对应体系中的GPIO号码是170,作为按键输入运用;X4 GPIO06(MXM3_13)对应体系中的GPIO号码是169,作为输出驱动LED运用。

X4 GPIO05 《-》 X34 SW5

X4 GPIO06 《-》 X34 LED1

c)。 源代码请参阅如下,别离完成了堵塞形式和非堵塞形式中止相应,完成功用便是按键替换点亮和封闭LED灯。

。/ 堵塞形式 – https://github.com/simonqin09/libsoc-examples/blob/master/python/gpiotest_block.py

// main 函数作为主函数,完成翻开GPIOs,一起设定初始化状况为高电平输出;test_interrupt_handler函数完成中止相应,选用 gpio_in.wait_for_interrupt 为堵塞式中止,捕获中止才会继续进行,捕获中止后做了简略的防误触处理。

。/ 非堵塞形式 – https://github.com/simonqin09/libsoc-examples/blob/master/python/gpiotest_nonblock.py

// main 函数作为主函数,完成翻开GPIOs,一起设定初始化状况为高电平输出;别的,在main函数里边选用gpio_in.start_interrupt_handler来使能中止相应,为非堵塞式;在main函数终究经过while来接纳键盘输入完成退出运用;gpio_in.wait_for_interrupt仍然作为中止处理函数相应中止并驱动LED状况改动。

d)。 将Python代码直接复制到Apalis iMX6上面测验运转成果如下:

。/ 堵塞形式下,终究是经过Ctrl-C强制退出程序

———————–

root@apalis-imx6:~# 。/gpiotest_block.py

The LED iniTIal status is ON

The LED turns OFF

interrupt TImes is 1

The LED turns ON

interrupt times is 2

^Clibsoc-gpio-debug: Interrupted system call

Traceback (most recent call last):

File “。/gpiotest_block.py”, line 54, in

main(gpio_input_id, gpio_output_id)

File “。/gpiotest_block.py”, line 45, in main

test_interrupt_handler(gpio_in, gpio_out)

File “。/gpiotest_block.py”, line 12, in test_interrupt_handler

gpio_in.wait_for_interrupt(-1)

File “/usr/lib/python3.5/site-packages/libsoc/gpio.py”, line 118, in wait_for_interrupt

if api.libsoc_gpio_wait_interrupt(self._gpio, timeout) != 0:

KeyboardInterrupt

———————–

。/ 非堵塞形式下

———————–

root@apalis-imx6:~# 。/gpiotest_nonblock.py

The LED initial status is ON

please enter ‘Q’ to quit

The LED turns OFF

The LED turns ON

The LED turns OFF

Q

Do you really want to quit? yes or no

yes

root@apalis-imx6:~#

———————–

4)。 运用PyQt5完成图形化界面GPIO中止程序

a)。 硬件装备和衔接和上面的测验场景共同。

b)。 为了便利开发PyQt5界面,首要经过Qtcreator创立如下QWidget项目UI界面

Python和PyQT来开发嵌入式ARM界面怎么完成

// LED Status 右边的 QFrame 方框以及QLable用于显现LED当时的状况

// ‘Turn ON’和’Turn OFF’ 两个PushButton用于经过界面操控LED状况,’Exit’ PushButton用于退出程序

。/ 终究的UI源代码参阅如下,将对应的mainwindow.ui文件复制到Apalis iMX6 Python运用相同途径下

https://github.com/simonqin09/libsoc-examples/blob/master/python/mainwindow.ui

c)。 程序源代码参阅如下:

https://github.com/simonqin09/libsoc-examples/blob/master/python/gpiotest_pyqt5.py

阐明如下:

。/ class ApplicationWindow 用于完成Qt5界面以及相关按键操作:

// 首要经过 loadUi 函数来加载之前制作好的UI文件 mainwindow.ui,然后初始化界面显现,衔接各个按键对应的处理程序

// 终究敞开一个新的Qthread线程self.thread,用于处理外部GPIO按键中止相应,衔接新线程反应信号的处理程序,终究发动新线程

// LedStatusChange 函数为处理新线程反应回来的LED状况改动信号而同步改动界面显现状况的函数

// Button_On_clicked 和 Button_Off_clicked 函数用于依据界面按键的点击来对应改动LED GPIO输出以及界面显现的函数

// Button_Exit_clicked 和 closeEvent 函数用于处理退出程序包含子线程的退出等相关的函数

。/ class gpioInterrupt 为用于处理GPIO中止一起关于改动LED GPIO输出以及将LED状况改动反应给界面主程序

// 首要界说反应信号,并初始化所需求运用的GPIO引脚

// run 函数部分根本便是上面第3章节的堵塞形式Python运用的代码,这儿就不做赘述了

d)。 测验运转成果如下:

———————–

root@apalis-imx6:~# 。/gpiotest_pyqt5.py

The LED initial status is ON

set LOW

set HIGH

The LED turns OFF

button clicked for setting LOW

The LED turns ON

button clicked for setting HIGH

root@apalis-imx6:~#

———————–

5)。 总结

如上述示例,运用Python和PyQt5十分便利了创立一个嵌入式界面运用程序示例,相关于传统C言语开机要装备穿插编译环境,整个流程愈加便利便利,一起在完成比较简略的操控的时分其运转功率也是能够承受的,别的Python还能够集成很多的组件便利开发,就愈加简化了比方规划机器视觉、人工智能等范畴的嵌入式运用开发流程。

责任编辑:ct

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/dianzi/97583.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部