news 2026/7/5 20:24:37

正点原子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/7/5 12:49:04

8B参数如何超越GPT-4o?揭秘MiniCPM-V 4.5的部署实战

8B参数如何超越GPT-4o&#xff1f;揭秘MiniCPM-V 4.5的部署实战 【免费下载链接】OmniLMM 项目地址: https://gitcode.com/gh_mirrors/om/OmniLMM 你是否曾想过&#xff0c;一个仅有8B参数的开源模型竟然能在多项基准测试中超越GPT-4o-latest这样的顶级闭源模型&#x…

作者头像 李华
网站建设 2026/7/6 3:31:05

21、深入解析RAC数据库的跟踪与诊断技术

深入解析RAC数据库的跟踪与诊断技术 1. 引言 在RAC(Real Application Clusters)数据库环境中,获取跟踪和诊断信息对于解决性能问题、排查故障至关重要。本文将详细介绍获取这些信息的方法,包括跟踪文件位置、DBMS_MONITOR包、ORADEBUG工具以及LKDEBUG实用程序等内容。 2…

作者头像 李华
网站建设 2026/7/5 1:36:11

【Python大数据毕设选题】基于Hadoop+Django的个人财务健康分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习

✍✍计算机毕设指导师** ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡有什么问题可以…

作者头像 李华