news 2026/6/10 3:19:49

正点原子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/6/10 13:07:03

别再背八股文了:资深架构师眼里的 RunLoop、GCD 与线程保活真相

1. 撕开 RunLoop 的伪装&#xff1a;它不仅仅是一个死循环很多兄弟在面试时把 RunLoop 背得滚瓜烂熟&#xff1a;“它是管理事件循环的对象&#xff0c;让线程有事做事&#xff0c;没事休眠...” 听起来没毛病&#xff0c;但你在写代码时真的看见过它吗&#xff1f;在 main.m 那…

作者头像 李华
网站建设 2026/6/10 13:04:30

西门子变频器G120C:工业自动化控制的智能解决方案

西门子变频器G120C&#xff1a;工业自动化控制的智能解决方案 【免费下载链接】西门子变频器G120C使用手册分享 西门子变频器G120C使用手册欢迎来到西门子变频器G120C的官方使用手册页面 项目地址: https://gitcode.com/Open-source-documentation-tutorial/7ef48 想要快…

作者头像 李华
网站建设 2026/6/9 19:48:42

C/C++知识积累-Lambda表达式

目录 定义 语法结构 常见捕获列表 常见使用场景 Lambda的本质 Lambda的发展和问题 定义 C中的Lambda表达式是C11引入的新特性&#xff0c;允许在代码中定义匿名函数。简单而言&#xff0c;他就是一个匿名函数对象&#xff0c;通常用于简单、不需要复用、或者需要访问当前…

作者头像 李华
网站建设 2026/6/10 13:04:31

Vue2如何设计大文件上传的交互界面与用户体验?

大文件上传系统优化版&#xff08;JavaVue3SpringBoot&#xff09; 优化说明 经过实际测试和客户反馈&#xff0c;我对之前的方案进行了以下优化&#xff1a; 加密方案优化&#xff1a;改用CryptoJS实现AES加密&#xff0c;兼容IE9断点续传增强&#xff1a;增加MD5校验&…

作者头像 李华
网站建设 2026/6/10 13:04:26

BoringNotch安装配置教程:将MacBook凹口变为动态音乐控制中心

BoringNotch安装配置教程&#xff1a;将MacBook凹口变为动态音乐控制中心 【免费下载链接】boring.notch TheBoringNotch: Not so boring notch That Rocks &#x1f3b8;&#x1f3b6; 项目地址: https://gitcode.com/gh_mirrors/bor/boring.notch BoringNotch是一款创…

作者头像 李华
网站建设 2026/6/7 10:12:27

wangEditor支持Latex公式转图片资源导入

今天早上&#xff0c;刚到公司打开电脑&#xff0c;就收到了一位网友的微信好友申请&#xff0c;对方私聊表示想了解一下关于在线编辑器增强功能的技术和方案。其实&#xff0c;我的微信号早就公开在网上了&#xff0c;但仍有不少朋友反馈说找不到&#xff0c;这确实有点小麻烦…

作者头像 李华