news 2026/4/18 7:27:32

正点原子imx6ull Qt界面显示bmp280气压值

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
正点原子imx6ull Qt界面显示bmp280气压值

Qt学习,使用正点原子出厂文件系统,设计简单界面,显示bmp280等气压信息。记录学习过程。

记录学习过程,理清思路。
介绍:之前两个月简单学习了linux的驱动和应用,最近看了Qt,从最简单的Qt去读外设(气压计、温度计)等的值开始。
不出意外,持续更新。

包含内容:

  1. 出厂系统、镜像等配置踩坑
  2. Qt连接
  3. Qt简单设计
  4. 新的内核编译bmp280等驱动
  5. 其他

1.从教程系统到出厂系统

之前使用的是原子的教程系统,现在打算做界面,使用出厂系统。我的配置:

  1. vm虚拟机Ubuntu20.04版本,双虚拟网卡。实现Ubuntu自己联网与Ubuntu、开发板互相通信。
  2. 使用emmc上的出厂uboot,进行配置如下:配置IP地址,使用TFTP发送ZImage内核镜像和dtb设备树,使用nfs挂载文件系统。由于我的Ubuntu20版本默认禁用了nfs v2,需要自行开启。
  3. 使用出厂linux源码,版本为linux-imx-4.1.15-2.1.0-e48931b1-v2.8,之后进行驱动编译的时候需要修改Makefile文件,指定出厂源码所在位置,而不是教程源码。

2.Qt配置

Ubuntu的Qt使用5.12.9,与开发板文件系统的qt版本一致。Qt的配置参考:

【正点原子】I.MX6U 出厂系统Qt交叉编译环境搭建V1.7

与之前的通用交叉编译器不同,需要安装Qt交叉编译器。接着就是Qt的安装与配置,注意配置Qt creator kit的时候要注意选择qt交叉编译器。之后使用ssh连接qt与开发板,实现远程部署。ssh分配秘钥的时候,直接使用.ssh文件夹下的即可。

3.第一个Qt程序

使用Qt做界面很方便。使用两个按钮和一个textbrowser。第一个按钮用来控制led,另一个控制气压计的显示。界面如下:

两个按钮都需要右击,选择“转到槽”,选择clicked()。然后在主窗口编写相关的代码。

主窗口代码如下

#include"mainwindow.h"#include"ui_mainwindow.h"#include<QDebug>#include<QGuiApplication>#include<QScreen>#include<QRect>MainWindow::MainWindow(QWidget*parent):QMainWindow(parent),ui(newUi::MainWindow){ui->setupUi(this);QList<QScreen*>list_screen=QGuiApplication::screens();//获取屏幕分辨率/* 重设大小 */this->resize(list_screen.at(0)->geometry().width(),list_screen.at(0)->geometry().height());/* 默认是出厂系统的LED 心跳的触发方式,想要控制LED, * 需要改变LED 的触发方式,改为none,即无 */system("echo none > /sys/class/leds/sys-led/trigger");file.setFileName("/sys/devices/platform/leds/leds/sys-led/brightness");//关闭开发板的心跳led}MainWindow::~MainWindow(){deleteui;}boolMainWindow::getLedState(){if(!file.exists())returnfalse;if(!file.open(QIODevice::ReadWrite))qDebug()<<file.errorString();QTextStreamin(&file);//构造QTextStream文本流对象in,用于QFile读写/* 读取文件所有数据 */QString buf=in.readLine();/* 打印出读出的值 */qDebug()<<"buf: "<<buf<<endl;file.close();if(buf=="1"){ui->pushButton->setText("LED 点亮");returntrue;}else{ui->pushButton->setText("LED 熄灭");returnfalse;}}voidMainWindow::setLedState(){/* 在设置LED 状态时先读取 */boolstate=getLedState();/* 如果文件不存在,则返回 */if(!file.exists())return;if(!file.open(QIODevice::ReadWrite))qDebug()<<file.errorString();QByteArray buf[2]={"0","1"};/* 写0 或1 */if(state)file.write(buf[0]);elsefile.write(buf[1]);/* 关闭文件 */file.close();/*重新获取LED 的状态 */getLedState();}voidMainWindow::on_pushButton_clicked(){/* 设置LED 的状态 */setLedState();}voidMainWindow::on_pushButton_2_clicked(){QFilefile("/sys/bus/iio/devices/iio:device1/in_pressure_input");if(!file.open(QIODevice::ReadOnly))return;QByteArray data=file.readAll();ui->textBrowser->setText(data.trimmed());}

头文件代码如下

#ifndefMAINWINDOW_H#defineMAINWINDOW_H#include<QMainWindow>#include<QFile>QT_BEGIN_NAMESPACEnamespaceUi{classMainWindow;}QT_END_NAMESPACEclassMainWindow:publicQMainWindow{Q_OBJECTpublic:MainWindow(QWidget*parent=nullptr);~MainWindow();privateslots:voidon_pushButton_clicked();voidon_pushButton_2_clicked();private:Ui::MainWindow*ui;/* 设置lED 的状态 */voidsetLedState();/* 获取lED 的状态 */boolgetLedState();QFile file;//文件};#endif// MAINWINDOW_H

实现结果如下:

功能很简单,一个按钮控制led的亮与灭,另外一个按钮,每次按下,都会在文字框显示当前的气压。
需要注意的是

  1. 新的内核需要开启iio与bmp280,或者自己写驱动,可以参考我之前的笔记:https://blog.csdn.net/qq_64288567/article/details/155493108?spm=1001.2014.3001.5501
    内核配置完成后重新编译,此时内核名字会改变为:4.1.15-ge48931b1-dirty。将新的驱动ko文件放到内核的/lib/modules/4.1.15-ge48931b1-dirty目录下,注意目录需要正确,不然depmod和modprobe会报错。
  2. 使用Qt读取各种传感器是非常简单的,linux一切皆文件,读传感器数据也就是读/sys下相应文件。

其他

目前发现使用nfs挂载文件系统,再使用原子的usb wifi,会出现一些问题,包括wlan0无法识别等。如果使用教程文件系统,是没有问题的。

后续继续学习Qt,准备画一个好看的界面,未完待续。


1842193327@qq.com 欢迎交流指导!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 3:55:58

解析2025强网拟态EZMiniAPP

题目背景与初步分析1.1 题目描述本题是一道Mobile类别的CTF挑战题&#xff0c;题目提供了一个文件&#xff1a;__APP__.wxapkg。1.2 什么是wxapkg文件.wxapkg是微信小程序的打包文件格式。微信小程序是运行在微信客户端内的轻量级应用程序&#xff0c;其代码包就以这种特殊格式…

作者头像 李华
网站建设 2026/4/17 12:47:40

【Java】深度理解 Java 中的 MIN_VALUE 和 MAX_VALUE

文章目录一、什么是 MIN_VALUE 和 MAX_VALUE&#xff1f;二、Java 常见数值类型的取值范围整型&#xff08;Integer Types&#xff09;浮点型&#xff08;Floating Point Types&#xff09;三、为什么 MIN_VALUE 不是 -MAX_VALUE&#xff1f;四、MIN_VALUE / MAX_VALUE 的底层定…

作者头像 李华
网站建设 2026/4/18 6:23:55

如何快速掌握机械振动信号分析:完整实战指南

如何快速掌握机械振动信号分析&#xff1a;完整实战指南 【免费下载链接】机械故障诊断与振动信号数据集 本仓库提供了一个振动信号数据集&#xff0c;旨在帮助工程师和科学家对机械设备的振动信号进行分析和处理。该数据集包含了多个振动信号示例&#xff0c;适用于故障检测、…

作者头像 李华
网站建设 2026/4/18 6:23:46

Data Formulator:AI驱动的数据可视化如何重塑企业决策效率

Data Formulator&#xff1a;AI驱动的数据可视化如何重塑企业决策效率 【免费下载链接】data-formulator &#x1fa84; Create rich visualizations with AI 项目地址: https://gitcode.com/GitHub_Trending/da/data-formulator 在数据爆炸的时代&#xff0c;企业面临…

作者头像 李华
网站建设 2026/4/18 5:22:03

EasyExcel中ExcelProperty注解value属性的灵活应用技巧

EasyExcel中ExcelProperty注解value属性的灵活应用技巧 【免费下载链接】easyexcel 快速、简洁、解决大文件内存溢出的java处理Excel工具 项目地址: https://gitcode.com/gh_mirrors/ea/easyexcel EasyExcel作为阿里巴巴开源的高性能Java Excel处理工具&#xff0c;以其…

作者头像 李华
网站建设 2026/4/17 16:15:06

吐血整理,性能测试的左移右移+性能基线实践,详细分析...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、传统性能测试 …

作者头像 李华