QML android 采集手机传感器数据 并通过udp 发送

利用 qt 开发 安卓 app ,采集手机传感器数据 并通过udp 发送

#ifndef UDPLINK_H
#define UDPLINK_H#include <QObject>
#include <QUdpSocket>
#include <QHostAddress>class UdpLink : public QObject
{Q_OBJECT
public:explicit UdpLink(QObject *parent = nullptr);void setAddress(QString _ip,quint16 _port);void sendData(QByteArray ba);signals:
private:QString ip;quint16 port;QUdpSocket socket;
};#endif // UDPLINK_H
#include "udplink.h"UdpLink::UdpLink(QObject *parent): QObject{parent}
{}void UdpLink::setAddress(QString _ip, quint16 _port)
{ip=_ip;port = _port;
}void UdpLink::sendData(QByteArray ba)
{socket.writeDatagram(ba, QHostAddress(ip), port);
}
#ifndef APP_H
#define APP_H#include <QObject>
#include <udplink.h>
#include <atomic>#include <QAccelerometer>
#include <QGyroscope>
#include <QRotationSensor>
#include <QLightSensor>class App : public QObject
{Q_OBJECTQ_PROPERTY(bool isRuning READ getIsRuning WRITE setIsRuning NOTIFY isRuningChanged)
public:explicit App(QObject *parent = nullptr);Q_INVOKABLE void start(QString ip);Q_INVOKABLE void stop();bool getIsRuning() const;void setIsRuning(bool newIsRuning);signals:void gyroValue(qreal x,qreal y,qreal z);void accelerValue(qreal x,qreal y,qreal z);void rotationValue(qreal x,qreal y,qreal z);void lightValue(qreal lux);void logInfo(QString str);void isRuningChanged();private:UdpLink udplink;bool isRuning{false};//陀螺QGyroscope *gyroscope;QGyroscopeReading *gyroreader;//加速度计QAccelerometer *acceler;QAccelerometerReading *accelereader;//旋转QRotationSensor *rotationSensor;QRotationReading *rotationReading;//光线QLightSensor *lightSensor;QLightReading *lightReading;
};#endif // APP_H
#include "app.h"
#include <QtConcurrent>
#include <chrono>
#include <thread>
#include <QJsonDocument>
#include <QJsonArray>
#include <QJsonObject>
#include <QJsonValue>App::App(QObject *parent): QObject{parent}
{}void App::start(QString ip)
{udplink.setAddress(ip,8023);qDebug()<<"start "<<ip;gyroscope = new QGyroscope(this);connect(gyroscope, &QGyroscope::readingChanged, this, [&](){gyroreader = gyroscope->reading();QJsonObject obj_root;QJsonArray arr;qreal gyroscopex = gyroreader->x();qreal gyroscopey = gyroreader->y();qreal gyroscopez = gyroreader->z();arr.append(QString::number(gyroscopex,'f',2));arr.append(QString::number(gyroscopey,'f',2));arr.append(QString::number(gyroscopez,'f',2));obj_root.insert("QGyroscope",arr);QJsonDocument jsonDocu(obj_root);QByteArray jsonData = jsonDocu.toJson();udplink.sendData(jsonData);emit gyroValue(gyroscopex,gyroscopey,gyroscopez);});acceler = new QAccelerometer(this);acceler->setAccelerationMode(QAccelerometer::Combined);connect(acceler, &QAccelerometer::readingChanged, this, [&](){accelereader = acceler->reading();QJsonObject obj_root;QJsonArray arr;qreal accelerx = accelereader->x();qreal accelery = accelereader->y();qreal accelerz = accelereader->z();arr.append(QString::number(accelerx,'f',2));arr.append(QString::number(accelery,'f',2));arr.append(QString::number(accelerz,'f',2));obj_root.insert("QAccelerometer",arr);QJsonDocument jsonDocu(obj_root);QByteArray jsonData = jsonDocu.toJson();udplink.sendData(jsonData);emit accelerValue(accelerx,accelery,accelerz);});rotationSensor = new QRotationSensor(this);connect(rotationSensor, &QRotationSensor::readingChanged, this, [&](){rotationReading = rotationSensor->reading();QJsonObject obj_root;QJsonArray arr;qreal rotationx = rotationReading->x();qreal rotationy = rotationReading->y();qreal rotationz = rotationReading->z();arr.append(QString::number(rotationx,'f',2));arr.append(QString::number(rotationy,'f',2));arr.append(QString::number(rotationz,'f',2));obj_root.insert("QRotationSensor",arr);QJsonDocument jsonDocu(obj_root);QByteArray jsonData = jsonDocu.toJson();udplink.sendData(jsonData);emit rotationValue(rotationx,rotationy,rotationz);});lightSensor = new QLightSensor(this);connect(lightSensor, &QLightSensor::readingChanged, this, [&](){lightReading = lightSensor->reading();QJsonObject obj_root;QJsonArray arr;qreal lux = lightReading->lux();arr.append(QString::number(lux,'f',2));obj_root.insert("QLightSensor",arr);QJsonDocument jsonDocu(obj_root);QByteArray jsonData = jsonDocu.toJson();udplink.sendData(jsonData);emit lightValue(lux);});if(gyroscope->start()&&acceler->start()&&rotationSensor->start()&&lightSensor->start()){setIsRuning(true);emit logInfo(QString::fromUtf8("启动成功"));}else{setIsRuning(false);emit logInfo(QString::fromUtf8("启动失败"));}
}void App::stop()
{gyroscope->stop();acceler->stop();rotationSensor->stop();lightSensor->stop();setIsRuning(false);
}bool App::getIsRuning() const
{return isRuning;
}void App::setIsRuning(bool newIsRuning)
{if (isRuning == newIsRuning)return;isRuning = newIsRuning;emit isRuningChanged();
}
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
import App 1.0Window {id:rootwidth: 640height: 480visible: truetitle: qsTr("数据采集")App{id:apponGyroValue: {var str = '陀螺仪:'+x.toFixed(2)+' '+y.toFixed(2)+' '+z.toFixed(2)gyroLabel.text = str}onAccelerValue: {var str = '加速度计:'+x.toFixed(2)+' '+y.toFixed(2)+' '+z.toFixed(2)accelerLabel.text = str}onRotationValue: {var str = '旋转:'+x.toFixed(2)+' '+y.toFixed(2)+' '+z.toFixed(2)rotationLabel.text = str}onLightValue: {var str = '光线:'+lux.toFixed(2)lightLabel.text=str}onLogInfo: {debugInof.text=str}}RowLayout{id:topBaranchors.margins: 5anchors.top: parent.topanchors.left: parent.leftspacing: 5Rectangle{id:addressLayout.alignment: Qt.AlignHCenterheight: linkBtn.heightwidth: 200border.color: "black"border.width: 1TextInput{id:ipanchors.fill: parentverticalAlignment:Text.AlignVCenterhorizontalAlignment:Text.AlignHCentertext: "192.168.1"}}Button{id:linkBtnLayout.alignment: Qt.AlignHCentertext: !app.isRuning?"启动":"停止"onClicked: {if(!app.isRuning){app.start(ip.text)}else{app.stop()}}}}ColumnLayout{anchors.left:parent.leftanchors.right:parent.rightanchors.top:topBar.bottomanchors.bottom:parent.bottomanchors.margins: 5Label{id:gyroLabelwidth: 200height: 50text: "陀螺仪"}Label{id:accelerLabelwidth: 200height: 50text: "加速度计"}Label{id:rotationLabelwidth: 200height: 50text: "旋转"}Label{id:lightLabelwidth: 200height: 50text:"光线"}TextEdit{id:debugInofheight: 50}}}

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

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

相关文章

使用ExcelJS快速处理Node.js爬虫数据

什么是ExcelJS ExcelJS是一个用于处理Excel文件的JavaScript库。它可以让你使用JavaScript创建、读取和修改Excel文件。 以下是ExcelJS的一些主要特点&#xff1a; 支持xlsx、xlsm、xlsb、xls格式的Excel文件。可以创建和修改工作表、单元格、行和列。可以设置单元格样式、字…

leetcode:67. 二进制求和

题目&#xff1a; 函数原型&#xff1a; char * addBinary(char * a, char * b) 思路&#xff1a; 二进制相加&#xff0c;首先我们考虑先将字符串逆序。由此要写一个逆序函数reserve。字符串逆序后&#xff0c;从前往后相加&#xff0c;以较长的字符串的长度为标准长度n&#…

Nacos使用JavaSDK,Nacos 动态监听配置,Nacos动态发布配置,Nacos动态获取实例

文章目录 一、概述1、内置SDK2、服务配置管理工具&#xff1a;ConfigService3、服务注册与发现管理工具&#xff1a;NamingService 二、服务配置管理1、获取配置&#xff08;1&#xff09;描述&#xff08;2&#xff09;参数&#xff08;3&#xff09;请求示例 2、监听配置&…

Android | ADB 命令

Android Debug Bridge Android 调试桥&#xff0c;通过 C/S 的形式利用 PC 来操作 Android 设备&#xff0c;通过 ADB 可以利用 shell 直接操作真机或模拟器&#xff0c;比如传输文件、管理应用、拉取日志等。 常用的 ADB 指令 # 开启 ADB 服务 adb start-server# 停止 ADB …

可视化大屏设计模板 | 主题皮肤(报表UI设计)

下载使用可视化大屏设计模板&#xff0c;减少重复性操作&#xff0c;提高报表制作效率的同时也确保了报表风格一致&#xff0c;凸显关键数据信息。 软件&#xff1a;奥威BI系统&#xff0c;又称奥威BI数据可视化工具 所属功能板块&#xff1a;主题皮肤上传下载&#xff08;数…

阿里云k8s服务之间偶尔获取不到dns解析安装ACK NodeLocal DNSCache

1.背景 feign.RetryableException: No route to host (Host unreachable) executing POST http://osale-thirdparty/empty/detect 服务突然会中断&#xff0c;开发在看日志的时候会出现host找不到的情况&#xff0c;阿里云技术推荐安装dns缓存组件&#xff0c;加上这个组件会解…

Python实现机器学习(下)— 数据预处理、模型训练和模型评估

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。本门课程将介绍人工智能相关概念&#xff0c;重点讲解机器学习原理机器基本算法&#xff08;监督学习及非监督学习&#xff09;。使用python&#xff0c;结合sklearn、Pycharm进行编程&#xff0c;介绍iris&#xff08;鸢尾…

Excel学习 WPS版

Excel学习 1.界面基础1.1 方格移动快捷键1.2 自动适配文字长度1.3 跨栏置中1.4 多个单元格同宽度&#xff1a;1.5 下拉框选择1.6 打印预览1.7 绘制边框1.8 冻结一行多行表头1.9 分割视图 2.日期相关2.1 今日日期快捷键2.2 月份提取 3.数学公式3.1 自动增长3.2 排序3.3 筛选3.4 …

ISCSI:后端卷以LVM 的方式配置 ISCSI 目标启动器

写在前面 准备考试整理相关笔记博文内容涉及使用 LVM 做ISCSI 目标后端块存储 Demo理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后在心中坚守其一生&#xff0c;全心全意&#xff0c;永不停息。所有其它的路都是不完整的&#…

数据结构——排序算法——冒泡排序

冒泡排序1 void swap(vector<int> arr, int i, int j) {int temp arr[i];arr[i] arr[j];arr[j] temp;}void bubbleSort1(vector<int> arr) {for (int i 0; i < arr.size() - 1; i){for (int j 0; j < arr.size() - 1 - i; j){if (arr[j] > arr[j 1…

【Unity编辑器扩展】| 顶部菜单栏扩展 MenuItem

前言【Unity编辑器扩展】 | 顶部菜单栏扩展 MenuItem一、创建多级菜单二、创建可使用快捷键的菜单项三、调节菜单显示顺序和可选择性四、创建可被勾选的菜单项五、右键菜单扩展5.1 Hierarchy 右键菜单5.2 Project 右键菜单5.3 Inspector 组件右键菜单六、AddComponentMenu 特性…

java web中部署log4j.xml

标题&#xff1a;Java Web中部署log4j.xml 目录&#xff1a; 1. 介绍 2. 配置log4j.xml文件 3. 配置web.xml文件 4. 配置Spring框架 5. 配置Spring Bean 6. 总结 ## 1. 介绍 在Java Web开发中&#xff0c;日志记录是非常重要的一部分。log4j是一个常用的Java日志记录框架&am…

springboot整合redis-sentinel哨兵模式集群(二)

定义Redis操作工具类 package com.luxifa.util; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.TimeUnit; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component…

人工智能:神经细胞模型到神经网络模型

人工智能领域中的重要流派之一是&#xff1a;从神经细胞模型&#xff08;Neural Cell Model&#xff09;到神经网络模型&#xff08;Neural Network Model&#xff09;。 一、神经细胞模型 第一个人工神经细胞模型是“MP”模型&#xff0c;它是由麦卡洛克、匹茨合作&#xff0…

Java-华为真题-预定酒店

需求&#xff1a; 放暑假了&#xff0c;小王决定到某旅游景点游玩&#xff0c;他在网上搜索到了各种价位的酒店&#xff08;长度为n的数组A&#xff09;&#xff0c;他的心理价位是x元&#xff0c;请帮他筛选出k个最接近x元的酒店&#xff08;n>k>0&#xff09;&#xff…

通常用哪些软件做数据可视化大屏?

一般就两种&#xff0c;一种是可视化大屏编辑软件&#xff0c;另一种则是BI系统&#xff08;BI数据可视化工具&#xff09;。考虑到数据来源多、数据量大以及数据分析效率、直观易懂性等实实在在的客观问题&#xff0c;建议采用BI系统来制作数据可视化大屏。 BI系统做可视化大…

关于2023年下半年计算机技术与软件专业技术资格(水平)考试报名工作有关事项的通知

各市(区)人力资源和社会保障局&#xff0c;省级各有关部门人事处&#xff0c;中央驻陕有关单位人事处&#xff0c;各位考生&#xff1a; 根据人力资源社会保障部办公厅《关于2023年度专业技术人员职业资格考试计划及有关事项的通知》&#xff08;人社厅发〔2023〕3号&#xff…

【SpringMVC】JSR 303与interceptor拦截器快速入门

目录 一、JSR303 1、什么是JSR 303&#xff1f; 2、为什么要使用JSR 303&#xff1f; 3、JSR 303常用注解 3.1、常用的JSR 303注解 3.2、Validated与Valid区别 3.2.1、Validated 3.2.2、Valid 3.2.3、区别 4、使用案例 4.1、导入依赖 4.2、配置校验规则 4.3、编写…

Matlab图像处理-彩色图像基础

光谱 在17世纪60年代&#xff0c;人们普遍认为白光是一种没有其他颜色的纯色光&#xff0c;而彩色光是有某种缘故发生变化的光。为了验证这个假设&#xff0c;牛顿让一束阳光通过一面三棱镜&#xff0c;光线在墙上被分解成了八种不同的颜色&#xff0c;即&#xff1a;红、橙、…

vue基础知识九:动态给vue的data添加一个新的属性时会发生什么?怎样解决?

一、直接添加属性的问题 我们从一个例子开始 定义一个p标签&#xff0c;通过v-for指令进行遍历 然后给botton标签绑定点击事件&#xff0c;我们预期点击按钮时&#xff0c;数据新增一个属性&#xff0c;界面也 新增一行 <p v-for"(value,key) in item" :key&q…