Firefly RK3399开发板上提供了两个灯,一个是blue,另一个是yellow;Blue灯是用于指示系统运行状态,yellow是用户灯,两个都可以通过命令控制亮灭,但如果是实现更加复杂的功能,则需要修改底层,此处我只是制作一个GUI点灯。 在Firefly RRK3399开发板上操作灯,可以直接通过Shell方式,读写设备文件即可,对于yellow灯,相对应的设备文件有/sys/class/leds/firefly:yellow:user/下所有文件,Firefly RRK3399提供了三种控制led方式,分别由设备方式、简单触发和复杂触发,此处我们只使用设备方式。点亮led很简单,只需要对brightness文件写入1,熄灭则写入0;这只是对于单色而言的,当然如果板载的灯是三色灯,则rightness有多种值可写入。
- root@rk3399_firefly_box:~ # echo 0 >/sys/class/leds/ firefly:yellow:user/brightness //黄灯灭
- root@rk3399_firefly_box:~ # echo 1 >/sys/class/leds/ firefly:yellow:use/brightness //黄灯亮
复制代码
之后对PyQt5的安装做一下介绍,ubuntu的包管理安装PyQt5时会自动安装依赖的Python等程序,现在ubuntu可以使用apt命令代替以前的apt-get命令,当然,其实ubuntu也可使用yum包管理,需要安装一些依赖,此处不详细说明。 通过源安装任何一个程序之前,最好都先搜索它在源里的完整文件名,它会列出相关的包,例如我们要安装PyQt5,我们可以试试
可以看到,源里包并不以pyqt5简单命名,而是使用python-pyqt5命名
找到了安装的文件名,使用命令
- apt install python3-pyqt5
复制代码
Ubuntu里也提供了一些IDE开发工具如IDLE、Spyder等等,此处不详细介绍它们安装过程。之后我们开始编写Pyqt5点灯,需要的前提是使用Python调用Shell命令,有两种调用方法,一种是使用os.system(command),一种是subprocess.Popen(command, shell=True),前者执行不会返回结果,后者会返回带有执行结果的元组,当然还有其他函数也可执行系统命令,此处不说。 pyqt点灯的整体代码如下:
- import os, sys
- import subprocess
- from PyQt5.QtGui import *
- from PyQt5.QtWidgets import *
-
- global defaut_sw
- handle = subprocess.Popen('cat /sys/class/leds/firefly:yellow:user/brightness', shell=True, stdout=subprocess.PIPE)
- default_sw = handle.communicate()[0]
-
- class widget(QWidget):
- def __init():
- super().__init__()
- self.setUi()
-
- def setUi(self):
- btn_yellow_sw = QPushButton('sw')
- btn_yellow_sw.move(200,200)
- btn_yellow_sw.clicked.connect(self.handle_sw)
- qvbox = QVBoxLayout()
- qvbox.addWidget(btn_yellow_sw)
- self.setLayout(qvbox)
-
- def handle_sw(self):
- global defaut_sw
- default_sw = 1 - defaule_sw
- if default_sw == 1:
- os.system('echo 1 > /sys/class/leds/firefly:yellow:user/brightness')
- else:
- os.system('echo 0 > /sys/class/leds/firefly:yellow:user/brightness')
-
- if __name__=='__main__':
- app = QApplication(sys.argv)
- w = widget()
- w.show()
- sys.exit(app.exec())
复制代码
将上述代码保存为led_control.py,切换到root用户,执行
运行结果如下:
|