news 2026/9/7 2:37:35

正点原子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/9/6 2:43:26

深入浅出 ES Module

概述在 JavaScript 模块化发展历程中&#xff0c;为解决全局变量污染&#xff0c;代码依赖管理等问题&#xff0c;先后出现了 CommonJS&#xff08;CJS&#xff09;、AMD、CMD、UMD、ES6 Module&#xff08;ESM&#xff09;五大主流方案。不同方案因设计目标、运行环境&#xf…

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

wangEditor处理ppt动画效果转网页兼容

企业级文档处理解决方案评估与实施方案 项目背景与需求分析 作为河南某集团企业的项目负责人&#xff0c;我近期正在评估为后台管理系统增加文档处理功能的解决方案。根据项目需求和集团技术架构&#xff0c;我们需要以下核心功能&#xff1a; 核心需求 Word粘贴功能&#…

作者头像 李华
网站建设 2026/9/6 0:18:11

深度残差网络在智能垃圾分类中的技术实践与性能分析

深度残差网络在智能垃圾分类中的技术实践与性能分析 【免费下载链接】基于深度残差网络的图像识别垃圾分类系统 本项目使用 Python 和深度学习库 Keras 构建了一个基于深度残差网络&#xff08;ResNet&#xff09;的图像识别垃圾分类系统。该系统能够识别并分类六种不同类型的垃…

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

wangEditor导入MathType公式保留矢量格式

《苏州大二程序员的暑假“渡劫”日记&#xff1a;Word图片转存样式保留大作战》 日期&#xff1a;2023年7月18日 星期二 苏州 桑拿天&#xff08;空调房里敲代码&#xff0c;命是奶茶给的&#xff09; 第一章&#xff1a;需求暴击——客户爸爸的“变态”要求 “同学&#xff0…

作者头像 李华
网站建设 2026/9/7 3:25:39

Node.js BFF层实战:对接天远综合多头借贷/逾期/欺诈聚合接口

一、在 BFF 层重塑风控数据结构 在现代金融 SaaS 平台或信贷管理后台的开发中&#xff0c;前端往往需要展示一个可视化的“借款人风险仪表盘”。然而&#xff0c;上游风控接口为了追求传输效率和扩展性&#xff0c;通常返回扁平化的数据结构。 天远API 的“综合多头”接口&am…

作者头像 李华