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

news2024/11/15 12:29:56

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

 

目录

第一:资源介绍

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

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

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


第一:资源介绍

      在开发板上有一个三合一环境传感器,也就是在拨码开关旁边的传感器,采用的是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实现数据的获取,在界面上进行显示会更加的美观,其实设计界面是非常耗时的。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/171933.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大趋势:科技赋能产业

能整合传统产业资源的老板大优势&#xff01; 三大趋势&#xff1a; 科技赋能产业链 乡村振兴 文化复兴 纯技术类企业在产业链方面不占优势 趣讲大白话&#xff1a;时势造英雄 ******** 消费互联网竞争太卷了 竞争向产业升级方向转移 向高质量发展导向 乡村振兴是整合分散的集…

容器虚拟化技术Docker(一)简介、安装、常见命令、数据卷、安装常规软件

容器虚拟化技术Docker&#xff08;一&#xff09;简介、安装、常见命令、数据卷、安装常规软件 1、Docker简介 1、简介 Docker的主要目标是“Build&#xff0c;Ship and Run Any App,Anywhere”&#xff0c;也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理&a…

web3:同态加密

web3相关学习一并收录至该博客&#xff1a;web3学习博客目录大全 目录同态加密概念同态加密具体如何定义&#xff1f;主流同态加密算法原理乘法同态加密算法① RSA算法一些基本的数学知识RSA的具体过程秘钥的产生加密解密验证了 RSA 算法的乘法同态性java代码简单实现python代码…

保时捷狂推NFT,高调喊出打造Web3社区,Web2品牌“天生缺陷”终将折戟沉沙?...

图片来源&#xff1a;由无界 AI 绘画工具生成2023年1月&#xff0c;保时捷中国的公关团队“忙疯”了&#xff0c;一连搞了好几个活动。有展览&#xff0c;媒体连线直播&#xff0c;甚至搞起了一场有圆桌&#xff0c;有嘉宾主题演讲的发布会。目的只有一个&#xff0c;告诉中国用…

6、Ubuntu20的JDKMySQLtomcatRedisNginx安装

安装JDK 这里以安装版本8为例 进入存放jdk目录创建目录 cd /usr/local mkdir jdk cd jdk 把下好的jdk8压缩包拖拽到Ubuntu连接用户下 移动jdk包文件 mv /home/starfish/jdk-8u351-linux-x64.tar.gz . 解压jdk tar -zxvf jdk-8u351-linux-x64.tar.gz cd jdk1.8.0_351/ p…

ubuntu20.04安装搜狗sogou输入法

环境 Ubuntu20.04 Sogou拼音输入法安装过程 Step.1 安装fcitx框架 sudo apt-get update sudo apt-get install fcitx输入winA后&#xff0c;打开Languate Support Keyboard input method system中&#xff0c;选择fcitx 点击Install/RemoveLanguates...&#xff0c;选择Ch…

面向物流行业的文档管理系统

用于运输和物流的 DocuWare 文档管理软件 物流和货运行业的效率激烈战在公路、火车、货船和空中展开。DocuWare 的快速、安全和灵活的文档管理是真正的竞争优势。在您的公司和客户的核心流程中节省新的成本和时间。 一、数字化和文档管理软件改变了物流公司的游戏规则 智能链…

PostgreSQL 技术内幕(五)Greenplum-Interconnect模块

Greenplum是在开源PostgreSQL的基础上&#xff0c;采用MPP架构的关系型分布式数据库。Greenplum被业界认为是最快最具性价比的数据库&#xff0c;具有强大的大规模数据分析任务处理能力。 Greenplum采用Shared-Nothing架构&#xff0c;整个集群由多个数据节点&#xff08;Segm…

mycat数据分片

Mycat是一个彻底开源的&#xff0c;面向企业应用开发的大数据库集群。它的定义是是一个开源的分布式数据库系统&#xff0c;是一个实现了MySQL协议的服务器&#xff0c;前端用户可以把它看作是一个数据库代理&#xff0c;用MySQL客户端工具和命令行访问&#xff0c;而其后端可以…

【题解】2023牛客寒假算法基础集训营1

目录A. World Final? World Cup! (I)思路B. World Final? World Cup! (II)C. 现在是&#xff0c;学术时间 (I)思路D. 现在是&#xff0c;学术时间 (II)思路E. 鸡算几何思路F. 鸡玩炸蛋人思路G. 鸡格线思路H. 本题主要考察了DFS思路I. 本题也主要考察了DFSJ. 本题竟也主要考察…

MySQL详细教程,2023硬核学习路线,看这一篇就够了

文章目录前言1. 数据库的相关概念1.1 数据1.2 数据库1.3 数据库管理系统1.4 数据库系统1.5 SQL2. MySQL数据库2.1 MySQL安装2.2 MySQL配置2.2.1 添加环境变量2.2.2 新建配置文件2.2.3 初始化MySQL2.2.4 注册MySQL服务2.2.5 启动MySQL服务2.3 MySQL登录和退出2.4 MySQL卸载2.5 M…

PR基础知识

sh什么是帧&#xff0c;什么是帧速率&#xff0c;什么是方形像素? 什么叫场序? # 时长 s时i长为视频时间得长度&#xff0c;基本单位为秒。但是在PR软件中。有更为精准得时间单位计算为帧。也就是说把1秒分为若干份。一份就是一帧。一帧也就可以理解为一张图片。 s所以在PR…

联合证券|未来五年是“大信创”发展的关键时期 发展空间广阔

机构指出&#xff0c;展望2023年&#xff0c;信创将从党政信创走向全面信创&#xff08;28N&#xff09;&#xff0c;叠加方针催化及疫情预期转变&#xff0c;泛信创范畴有望成为板块主线&#xff0c;孕育出许多板块的出资机会。 中心逻辑 1、2022年计算机职业大都子板块的增长…

用户行为收集到HIVE

2.3 用户行为收集到HIVE 目标 目标 知道收集用户日志形式、流程知道flume收集相关配置、hive相关配置知道supervisor开启flume收集进程管理应用 应用supervisor管理flume实时收集点击日志 2.3.1 为什么要收集用户点击行为日志 用户行为对于某项目文章推荐来说&#xff0c;至…

京东方尚未成为苹果的最大供应商,但已经享受到果链的好处

在知名分析师郭明錤表示京东方今年将成为苹果iPhone15的OLED面板主力供应商后&#xff0c;业界纷纷期待京东方在中小尺寸OLED面板市场的份额激增&#xff0c;目前虽然京东方尚未真正开始向苹果供应iPhone15的OLED面板&#xff0c;但它已开始享受到果链带来的好处。京东方量产OL…

嵌入式C语言设计模式 --- 装饰器模式

1 - 什么是装饰器模式? 装饰器模式(Decorator Pattern),是结构型设计模式的一种,装饰器模式允许向一个现有的对象添加新的功能,而又不改变其对象结构,这种方式比使用子类继承的方式更加灵活。 装饰,顾名思义,就是在原有事物的基础上,锦上添花地新增某些点缀或功能,…

[ROS2 入门] rqt_console 使用介绍

大家好&#xff0c;我是虎哥&#xff0c;从今天开始&#xff0c;我将花一段时间&#xff0c;开始将自己从ROS1切换到ROS2&#xff0c;在上一篇中&#xff0c;我们一起了解ROS 2中“Actions ”概念&#xff0c;至此最基本的核心基础概念&#xff0c;我们就都分享介绍完毕了&…

③【Spring】整合第三框架的常用机制:FactoryBean

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ FactoryBean 机制一、什么是 FactoryBean &…

Linux:报错“command not found: yum”及yum和apt-get的区别

还是最近的工作总结&#xff0c;使用yum命令安装出现了报错&#xff0c;具体看下面 目录报错原因yum和apt-get的区别yumyum功能yum特点yum常用命令apt-getapt常用命令解决报错 使用命令安装 yum install sysstat结果报错 zsh&#xff1a;command not found: yum 印象中安装命…

Akamai 第三季度 DNS 威胁分析报告

Akamai 如期发布了 2022 年第三季度 DNS 威胁分析报告&#xff0c;基于其海量 DNS 数据对网络钓鱼等攻击威胁进行洞察。 攻击类别 在 2022 年第三季度&#xff0c;数据视野中 10.6% 的设备在季度内至少访问过一次与恶意软件相关的域名。另外&#xff0c;6.3% 的设备访问了钓鱼…