当前位置: 首页 > news >正文

正点原子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 欢迎交流指导!

http://www.cnnetsun.cn/news/41356.html

相关文章:

  • 深入浅出 ES Module
  • wangEditor处理ppt动画效果转网页兼容
  • 深度残差网络在智能垃圾分类中的技术实践与性能分析
  • wangEditor导入MathType公式保留矢量格式
  • Node.js BFF层实战:对接天远综合多头借贷/逾期/欺诈聚合接口
  • Day11 >> 150、逆波兰表达式求值 + 239、滑动窗口最大值 + 347、前K个高频元素
  • System Informer 终极指南:从零掌握Windows系统监控神器
  • 20、集群节点与实例的添加和删除操作指南
  • 5大React动画库生态对比:从入门到精通的全栈解决方案
  • 2、Oracle Real Application Clusters (RAC):特性、成本与效益解析
  • Phi-2模型完全攻略:让27亿参数的小巨人成为你的AI助手
  • 30分钟掌握Tauri:用Rust构建你的第一个桌面应用
  • WeChatTweak-macOS开源项目深度参与指南
  • NootRX:让AMD RDNA 2显卡在macOS上完美运行
  • DBeaver崩溃救星:3步紧急恢复SQL脚本的完整方案
  • 项目效率翻倍,做对了什么?
  • 少儿编程考试路径规划:考级与竞赛时间如何平衡?
  • 火星漫游车Rocker-Bogie悬挂系统核心技术深度解析与实战指南
  • ImmortalWrt网络流量监控完全指南:快速排查网络异常与优化带宽分配
  • 青少年编程考级的三大核心价值:目标建立与能力提升
  • 大疆(DJI)前端开发岗位面试经验总结与备战指南
  • AI难?看涂鸦智能、Lark和德勤中国如何借亚马逊云科技突围
  • Kimi-K2-Instruct模型部署指南:从快速入门到生产级优化
  • 企业级系统监控UI架构设计与性能优化实战
  • 多模态智能体如何重塑人机交互:UI-TARS-1.5的三大技术突破与应用前景
  • 快速排序:10分钟掌握高效算法精髓
  • windows著名漏洞——Zerologon(零登录)
  • 6、技术写作风格与在线文档写作指南
  • 文章查重率超出限制?五个步骤轻松降低至安全线
  • 12、技术文档创作与信息管理全解析