linux系统中利用QT实现环境传感器的数据获取方法

简介: linux系统中利用QT实现环境传感器的数据获取方法

     大家好,今天主要和大家分享一下,如何使用QT实现对三合一环境传感器的数据的获取和实现。

 



第一:资源介绍

     在开发板上有一个三合一环境传感器,也就是在拨码开关旁边的传感器,采用的是I2C接口。下图是原理图,以及对应的实物图。

 

第二:具体代码的详细实现

      在实现之前必须在系统的出厂系统里编写好AP3216C的驱动实现,并注册成了杂项设备,可以在/sys/class/misc下找到ap3216c节点。我们可以直接QT通过访问节点文件的方式来获取AP3216C的传感器数据。

      读取数据流程解释:数据由驱动层传到Linux应用层,QT应用程序从应用成读取传感器的数据。

      项目代码的具体实现,对应的.pro文件中的内容如下:

1 QT += core gui
2
3 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
4
5 CONFIG += c++11
6
7 # The following define makes your compiler emit warnings if you use
8 # any Qt feature that has been marked deprecated (the exact warnings
9 # depend on your compiler). Please consult the documentation of the
10 # deprecated API in order to know how to port your code away from it.
11 DEFINES += QT_DEPRECATED_WARNINGS
12
13 # You can also make your code fail to compile if it uses deprecated APIs.
14 # In order to do so, uncomment the following line.
15 # You can also select to disable deprecated APIs only up to a certain 
version of Qt.
16 #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the 
APIs deprecated before Qt 6.0.0
17
18 SOURCES += \
19 ap3216c.cpp \
20 arcgraph.cpp \
21 glowtext.cpp \
22 main.cpp \
23 mainwindow.cpp
24
25 HEADERS += \
26 ap3216c.h \
27 arcgraph.h \
28 glowtext.h \
29 mainwindow.h
30
31 # Default rules for deployment.
32 qnx: target.path = /tmp/$${TARGET}/bin
33 else: unix:!android: target.path = /opt/$${TARGET}/bin
34 !isEmpty(target.path): INSTALLS += target
35
36 include(headview/headview.pri)

     分析:其中使用到pri文件,pri文件的语法和pro文件相同,通常它是由pro文件改写得到的,该类型文件类似于C++中的头文件,可以在 pro 文件中使用 include 将其包含进来,相当 于文件引入,当一个项目文件非常多时,或有些项目文件需要重复使用,为了方便管理就可以 使用此方法。

第三:源文件“mainwindow.h”实现

1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3
4 #include <QMainWindow>
5 #include <QLabel>
6 #include <QVBoxLayout>
7 #include <QHBoxLayout>
8 #include "arcgraph.h"
9 #include "glowtext.h"
10 #include "ap3216c.h"
11 #include "headview/headview.h"
12 class ArcGraph;
13 class GlowText;
14 class Ap3216c;
15 class HeadView;
16
17 class MainWindow : public QMainWindow
18 {
19 Q_OBJECT
20
21 public:
22 MainWindow(QWidget *parent = nullptr);
23 ~MainWindow();
24
25 private:
26 ArcGraph *arcGraph[3];
27 GlowText *glowText[3];
28
29 QVBoxLayout *vBoxLayout;
30 QHBoxLayout *hBoxLayout[5];
31
32 GlowText *test;
33
34 /* 容器作用,用于布局 */
35 QWidget *widget[6];
36
37 /* 标签文本 */
38 QLabel *label[3];
39
40 /* i2C 传感器类 */
41 Ap3216c *ap3216c;
42
43 /* 视图表头 */
44 HeadView *headView;
45
46 private slots:
47 /* 获取 ap3216 传感器数据 */
48 void getAp3216cData();
49 };
50 #endif // MAINWINDOW_H

分析:在"mainwindow.h"的头文件里,看到使用了ArcGraph、GlowText、Ap3216c 和 HeadView 自定义的类。它们是蓝色科技弧形视图、发光文本、Ap3216c 类和视图表头。不同的类分开来 写这样可以很方便地管理我们的项目。

第四:Linux应用接口获取数据

    ap3216c类的作用是从驱动层提供给linux应用层的接口获取数据。

1 #include "ap3216c.h"
2 #include <stdio.h>
3 #include <string.h>
4 #include <sys/types.h>
5 #include <sys/stat.h>
6 #include <fcntl.h>
7 #include <unistd.h>
8 #include <QDebug>
9 
10 Ap3216c::Ap3216c(QObject *parent) : QObject (parent)
11 {
12 timer = new QTimer();
13 connect(timer, SIGNAL(timeout()), this, SLOT(timer_timeout()));
14 }
15
16 Ap3216c::~Ap3216c()
17 {
18
19 }
20
21 void Ap3216c::timer_timeout()
22 {
23 alsdata = readAlsData();
24 psdata = readPsData();
25 irdata = readIrData();
26 emit ap3216cDataChanged();
27 }
28
29 QString Ap3216c::readIrData()
30 {
31 char const *filename = "/sys/class/misc/ap3216c/ir";
32 int err = 0;
33 int fd;
34 char buf[10];
35
36 fd = open(filename, O_RDONLY);
37 if(fd < 0) {
38 close(fd);
39 return "open file error!";
40 }
41
42 err = read(fd, buf, sizeof(buf));
43 if (err < 0) {
44 close(fd);
45 return "read data error!";
46 }
47 close(fd);
48
49 QString irValue = buf;
50 QStringList list = irValue.split("\n");
51 return list[0];
52 }
53
54 QString Ap3216c::readPsData()
55 {
56 char const *filename = "/sys/class/misc/ap3216c/ps";
57 int err = 0;
58 int fd;
59 char buf[10];
60
61 fd = open(filename, O_RDONLY);
62 if(fd < 0) {
63 close(fd);
64 return "open file error!";
65 }
66
67 err = read(fd, buf, sizeof(buf));
68 if (err < 0) {
69 close(fd);
70 return "read data error!";
71 }
72 close(fd);
73
74 QString psValue = buf;
75 QStringList list = psValue.split("\n");
76 return list[0];
77 }
78
79 QString Ap3216c::readAlsData()
80 {
81 char const *filename = "/sys/class/misc/ap3216c/als";
82 int err = 0;
83 int fd;
84 char buf[10];
85
86 fd = open(filename, O_RDONLY);
87 if(fd < 0) {
88 close(fd);
89 return "open file error!";
90 }
91
92 err = read(fd, buf, sizeof(buf));
93 if (err < 0) {
94 close(fd);
95 return "read data error!";
96 }
97 close(fd);
98
99 QString alsValue = buf;
100 QStringList list = alsValue.split("\n");
101 return list[0];
102 }
103
104 QString Ap3216c::alsData()
105 {
106 return alsdata;
107 }
108
109 QString Ap3216c::irData()
110 {
111 return irdata;
112 }
113
114 QString Ap3216c::psData()
115 {
116 return psdata;
117 }
118
119 void Ap3216c::setCapture(bool str)
120 {
121 if(str)
122 timer->start(500);
123 else
124 timer->stop();
125 }

    分析:通过C语言的接口访问节点文件的方法来获取数据。

第四:程序的运行效果

     当我们使用三合一环境传感器时,界面上的数据会发生变化,数据默认设置为500ms采集一次。

总结:利用QT实现数据的获取,在界面上进行显示会更加的美观,其实设计界面是非常耗时的。

 

目录
相关文章
|
7天前
|
Linux
Linux系统之whereis命令的基本使用
Linux系统之whereis命令的基本使用
50 23
Linux系统之whereis命令的基本使用
|
2月前
|
Ubuntu Linux Shell
(已解决)Linux环境—bash: wget: command not found; Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
(已成功解决)Linux环境报错—bash: wget: command not found;常见Linux发行版本,Linux中yum、rpm、apt-get、wget的区别;Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
461 68
(已解决)Linux环境—bash: wget: command not found; Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
|
2月前
|
存储 缓存 监控
Linux缓存管理:如何安全地清理系统缓存
在Linux系统中,内存管理至关重要。本文详细介绍了如何安全地清理系统缓存,特别是通过使用`/proc/sys/vm/drop_caches`接口。内容包括清理缓存的原因、步骤、注意事项和最佳实践,帮助你在必要时优化系统性能。
230 78
|
1月前
|
缓存 安全 Linux
Linux系统查看操作系统版本信息、CPU信息、模块信息
在Linux系统中,常用命令可帮助用户查看操作系统版本、CPU信息和模块信息
109 23
|
2月前
|
消息中间件 Java Kafka
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
本文介绍了Kafka集群的搭建过程,涵盖从虚拟机安装到集群测试的详细步骤。首先规划了集群架构,包括三台Kafka Broker节点,并说明了分布式环境下的服务进程配置。接着,通过VMware导入模板机并克隆出三台虚拟机(kafka-broker1、kafka-broker2、kafka-broker3),分别设置IP地址和主机名。随后,依次安装JDK、ZooKeeper和Kafka,并配置相应的环境变量与启动脚本,确保各组件能正常运行。最后,通过编写启停脚本简化集群的操作流程,并对集群进行测试,验证其功能完整性。整个过程强调了自动化脚本的应用,提高了部署效率。
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
|
2月前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
121 13
|
Linux
Linux-SmartHome-QML-2-Qt环境安装
CentOS7安装Qt就简单好多了,哈哈,下载Qt ,直接拖到虚机器里面。给运行权限,完了和Win一样,傻瓜安装就可以。安装完成后,可以在左上角的编程里面找到Qt的运行图标,点击是可以运行的,但是建立一个简单的程序,是运行不了的,应该是缺少库,但是少那个了,应该是OpenGL相关,
115 0
Linux-SmartHome-QML-2-Qt环境安装
|
3月前
|
Linux 网络安全 数据安全/隐私保护
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
344 8
|
3月前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
1128 6
|
20天前
|
网络协议 Unix Linux
深入解析:Linux网络配置工具ifconfig与ip命令的全面对比
虽然 `ifconfig`作为一个经典的网络配置工具,简单易用,但其功能已经不能满足现代网络配置的需求。相比之下,`ip`命令不仅功能全面,而且提供了一致且简洁的语法,适用于各种网络配置场景。因此,在实际使用中,推荐逐步过渡到 `ip`命令,以更好地适应现代网络管理需求。
33 11