嵌入式linux ARM 开发板 使用pyqt显示界面

野火linux开发板 ubuntu18.04 pyqt5 开发流程

  • 一. 需要准备的材料
  • 二. 连接单片机
  • 三. 配置网络
  • 四.配置python 环境
  • 五. apt安装pyqt5 基础模块
  • 五点一. pip源码编译安装pyqt5 更多模块
  • 六.ubuntu 18.04跳过登录界面直接运行qt
  • 关于重启程序
  • 关于界面适配
  • 屏幕不熄屏
  • 需要嵌入式软件定制开发进群

一. 需要准备的材料

  1. linux 开发板(树莓派,香橙派,野火linux开发板,jetson nano)
  2. 单片机显示屏
  3. 网络 (网线,或者无线模块)
  4. 单片机电源
  5. 需要控制的硬件等

烧录ubuntu18.04 教程

二. 连接单片机

  1. 串口连接

大部分linux 开发板都自带了串口连接功能,一般是usb数据线连接。
在设备管理器里面找到对应的串口,使用putty连接。
嵌入式linux ARM 开发板 使用pyqt显示界面_第1张图片

  1. ssh 连接
ssh [email protected]

嵌入式linux ARM 开发板 使用pyqt显示界面_第2张图片

三. 配置网络

一般不同开发板的设置不太一样,都能找到。

没有配置apt 国内源的需要配置,自己搜

四.配置python 环境

  1. 安装python3
sudo apt-get -y install python3
  1. 安装pip
sudo apt-get -y install python3-pip

配置pip 国内源,自己搜

五. apt安装pyqt5 基础模块

sudo apt-get -y install python3-pyqt5

最后安装一些依赖的deb包,它主要是用于提供tslib触摸、中文字库等功能:

sudo apt-get -y install libts-bin
sudo apt-get -y install devscan
sudo apt-get -y install ebf-tslibplugin
sudo apt-get -y install ebf-fonts

然后运行:

sudo depmod -a

最后重启开发板:

sudo reboot

野火开发的教程

五点一. pip源码编译安装pyqt5 更多模块

安装qt5-default 里面带了qmake

sudo apt-get install qt5-default

安装编译器

sudo apt-get install cmake gcc g++
pip3 install --upgrade pip
pip3 install wheel setuptools

编译sip和pyqt5 (pip 会自动下载源代码编译 性能差的可能要编译几个小时)
友情提示: 只要不断开连接 卡住可能就是在正常编译 如果卡住超过12个小时 可能就是已经装完了。注意是卡住 而不是 连接中断

pip3 install SIP
pip3 install pyqt5

如果报错g++: internal compiler error: Killed (program cc1plus)
问题的原因:内存不足,解决方法就是创建临时交换空间swap:

sudo dd if=/dev/zero of=/swapfile bs=64M count=32
sudo mkswap /swapfile
sudo swapon /swapfile

注意在第三步可能出现的错误警告:

swapon: /swapfile: insecure permissions 0644, 0600 suggested.

此时需要更改创建的swapfile的权限:

sudo chmod 600 /swapfile

编译结束之后想要恢复的话可以执行下面的命令:

sudo swapoff /swapfile
sudo rm /swapfile

六.ubuntu 18.04跳过登录界面直接运行qt

1.Ubuntu自启动 不需要密码登录
sudo vim /etc/lightdm/lightdm.conf

[SeatDefaults]
autologin-user=username	#需要登录的用户名
autologin-user-timeout=delay

2.开机运行qt
关闭默认的桌面和设置为自己的图形程序,
/usr/share/xsessions目录下,将目录下的 .desptop后缀全部备份,有的可能叫其他名字 备份就完事了

mv ubuntu-communitheme-snap.desktop ubuntu-communitheme-snap.desktop.bak
mv ubuntu.desktop ubuntu.desktop.bak

到/usr/share/xsessions目录下创建类似的文件 my.desktop

sudo vim /usr/share/xsessions/my.desktop

[Desktop Entry]
Name=my
Comment=auto start myapplication
Exec=/home/ubuntu/run.sh #运行qt的脚本
Icon=
Type=Application

run.sh 内容就是

python3 /home/ubuntu/demo.py

要给可执行权限

chmod +x run.sh

demo.py

import sys
from PyQt5.QtWidgets import QWidget,QLCDNumber,QSlider,QVBoxLayout,QApplication
from PyQt5.QtCore import Qt

class WinForm(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        #1 先创建滑块和 LCD 部件
        lcd = QLCDNumber(self)
        slider = QSlider(Qt.Horizontal, self)

        slider.setMaximum(1000)
        lcd.display(666)
        slider.setValue(666)

        #2 通过QVboxLayout来设置布局
        vBox = QVBoxLayout()
        vBox.addWidget(lcd)
        vBox.addWidget(slider)

        self.setLayout(vBox)
        #3 valueChanged()是Qslider的一个信号函数,只要slider的值发生改变,它就会发射一个信号,然后通过connect连接信号的接收部件,也就是lcd。
        slider.valueChanged.connect(lcd.display)

        slider.setMinimumWidth(200)
        slider.setFixedHeight(60)

        style = "QSlider::groove:horizontal {border:1px solid #999999;height:10px;" \
                "background-color:#666666;margin:2px 0;}" \
                "QSlider::handle:horizontal {background-color:#ff0000;border:1px solid #797979;" \
                "width:50px;margin:-20px;border-radius:25px;}" \

        slider.setStyleSheet(style);

        #self.setGeometry(0,0,800,480)
        self.setWindowTitle("拖动滑块LCD显示")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    form = WinForm()
    form.resize(800, 480)
    form.show()
    sys.exit(app.exec_())

重启登录
嵌入式linux ARM 开发板 使用pyqt显示界面_第3张图片

关于重启程序

只需要杀死run.sh的进程 ,桌面就会退出 重新登录就可以重新运行程序

 ps -ef | grep run.sh
 sudo kill -9 pid

关于界面适配

只需要程序界面跟屏幕大小像素一致即可

屏幕不熄屏

sudo vim /etc/systemd/logind.conf

将#HandleLidSwitch=suspend 改为 HandleLidSwitch=ignore

需要嵌入式软件定制开发进群

开发一个这样的实体程序在半个月到一个月左右
686070107

你可能感兴趣的:(pyqt5,python,pyqt5,linux)