2026/4/18 17:52:35
网站建设
项目流程
建设工程信息网站,黄岛网站建设哪家权威,网站不收录,广告设计公司图片Qt学习#xff0c;使用正点原子出厂文件系统#xff0c;设计简单界面#xff0c;显示bmp280等气压信息。记录学习过程。
记录学习过程#xff0c;理清思路。
介绍#xff1a;之前两个月简单学习了linux的驱动和应用#xff0c;最近看了Qt#xff0c;从最简单的Qt去读外设…Qt学习使用正点原子出厂文件系统设计简单界面显示bmp280等气压信息。记录学习过程。记录学习过程理清思路。介绍之前两个月简单学习了linux的驱动和应用最近看了Qt从最简单的Qt去读外设气压计、温度计等的值开始。不出意外持续更新。包含内容出厂系统、镜像等配置踩坑Qt连接Qt简单设计新的内核编译bmp280等驱动其他1.从教程系统到出厂系统之前使用的是原子的教程系统现在打算做界面使用出厂系统。我的配置vm虚拟机Ubuntu20.04版本双虚拟网卡。实现Ubuntu自己联网与Ubuntu、开发板互相通信。使用emmc上的出厂uboot进行配置如下配置IP地址使用TFTP发送ZImage内核镜像和dtb设备树使用nfs挂载文件系统。由于我的Ubuntu20版本默认禁用了nfs v2需要自行开启。使用出厂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()。然后在主窗口编写相关的代码。主窗口代码如下#includemainwindow.h#includeui_mainwindow.h#includeQDebug#includeQGuiApplication#includeQScreen#includeQRectMainWindow::MainWindow(QWidget*parent):QMainWindow(parent),ui(newUi::MainWindow){ui-setupUi(this);QListQScreen*list_screenQGuiApplication::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 bufin.readLine();/* 打印出读出的值 */qDebug()buf: bufendl;file.close();if(buf1){ui-pushButton-setText(LED 点亮);returntrue;}else{ui-pushButton-setText(LED 熄灭);returnfalse;}}voidMainWindow::setLedState(){/* 在设置LED 状态时先读取 */boolstategetLedState();/* 如果文件不存在则返回 */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 datafile.readAll();ui-textBrowser-setText(data.trimmed());}头文件代码如下#ifndefMAINWINDOW_H#defineMAINWINDOW_H#includeQMainWindow#includeQFileQT_BEGIN_NAMESPACEnamespaceUi{classMainWindow;}QT_END_NAMESPACEclassMainWindow:publicQMainWindow{Q_OBJECTpublic:MainWindow(QWidget*parentnullptr);~MainWindow();privateslots:voidon_pushButton_clicked();voidon_pushButton_2_clicked();private:Ui::MainWindow*ui;/* 设置lED 的状态 */voidsetLedState();/* 获取lED 的状态 */boolgetLedState();QFile file;//文件};#endif// MAINWINDOW_H实现结果如下功能很简单一个按钮控制led的亮与灭另外一个按钮每次按下都会在文字框显示当前的气压。需要注意的是新的内核需要开启iio与bmp280或者自己写驱动可以参考我之前的笔记https://blog.csdn.net/qq_64288567/article/details/155493108?spm1001.2014.3001.5501内核配置完成后重新编译此时内核名字会改变为4.1.15-ge48931b1-dirty。将新的驱动ko文件放到内核的/lib/modules/4.1.15-ge48931b1-dirty目录下注意目录需要正确不然depmod和modprobe会报错。使用Qt读取各种传感器是非常简单的linux一切皆文件读传感器数据也就是读/sys下相应文件。其他目前发现使用nfs挂载文件系统再使用原子的usb wifi会出现一些问题包括wlan0无法识别等。如果使用教程文件系统是没有问题的。后续继续学习Qt准备画一个好看的界面未完待续。1842193327qq.com 欢迎交流指导