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}}}
相关文章:

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(QObjec…...
stableDiffusion安装
下载git 下载python-3.10.6版本 clone git至本地 使用git clone命令 git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui 更换pip源为为百度镜像 pip config --global set global.index-url https://mirror.baidu.com/pypi/simple 最后的镜像源链接 阿里云 h…...
QT基础教程(QPushButton及信号与槽)
文章目录 前言一、信号与槽二、QPushButton总结 前言 本篇文章来带大家学习QPushbutton和信号与槽,其中信号与槽是QT中的核心也是比较重要的一个知识点。 资料合集地微信公众号:优质程序猿一、信号与槽 信号与槽(Signals and Slots&#x…...

Android 实战项目分享(一)用Android Studio绘制贝塞尔曲线的艺术之旅
一、项目概述 欢迎来到创意之源!我们精心打造的绘图应用程序将带你进入一个充满艺术和技术的奇妙世界。通过使用Android Studio,我们实现了绘制贝塞尔曲线的功能,让你能够轻松创作出令人惊叹的艺术作品。不论你是热爱绘画的大学生还是渴望学习…...

Windows系统关机后自动重启的解决方法
打开控制面板,找到【电源选项】; 方式一,打开Windows终端(管理员),输入“powercfg /h on”然后回车; 方式二,键盘按下开始键,搜索“控制面板”然后打开; 点击…...

微服务如何改变软件开发:实战经验与最佳实践分享
文章目录 什么是微服务?微服务实战经验1. 定义明确的服务边界2. 使用API网关3. 自动化部署和持续集成4. 监控和日志记录 微服务最佳实践1. 文档和通信2. 弹性设计3. 安全性4. 版本控制5. 监控和警报 微服务的未来 🎉欢迎来到架构设计专栏~微服务如何改变…...

安装深度(Deepin)系统
Deepin系统安装 Deepin是和Ubuntu一样,是一个基于Debian的Linux的发型版本。 Deepin相对于Ubuntu,Deepin更适合中国用户的使用习惯。 一 官网工具制作启动盘 制作启动盘、和安装系统,操作非常简单,nice! 官网提供了…...

Leetcode: 645.错误的集合 题解【超详细】
题目 集合 s 包含从 1 到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个数字复制了成了集合里面的另外一个数字的值,导致集合 丢失了一个数字 并且 有一个数字重复 。 给定一个数组 nums 代表了集合 S 发生错误后的结果。 请你找出重复…...

闲鱼自动化软件——筛选/发送系统 V22已经测试完毕
更新 因为闲鱼版本更新,以及闲鱼整个程序维护记录,又增加了一些优化和提升的代码,所以又一次在整体上更新了一版闲鱼的此款软件。 主要更新点: 1、添加显示自定义按钮,可以自动显示最新数据,也可以手动翻…...

数学建模__动态规划
动态规划就是,将任务每一步均记录下来,以便将来重复使用时能够直接调用 问题描述:给定n个物品,每个物品的重量是Wi,价值是Vi,但是背包最多能装下capacity重量的物品,问我们如何选择才能利益最大化。 这里涉…...

【IoT】生产制造:锅仔片上机做 SMT 加工吗?
目录 简介 锅仔片 简介 由于最近做产品用到了锅仔按键,由于单品用量过多,但是成品锅仔按键价格又太高,不适合量产。 这个时候就想到了锅仔片,问题又来了,锅仔片是否可以上机呢? 答案是肯定的。 锅仔片…...
Stable Diffusion代码简介
Stable Diffusion是一个开源的实时数据流处理引擎,用于处理流式数据。其web UI提供了一个可视化界面来展示数据流的处理过程。 以下是Stable Diffusion web UI的详细代码说明: 1. 界面设计 Stable Diffusion web UI使用React框架进行开发,…...
操作系统的运行机制
1.程序的运行原理: 1.CPU执行指令的过程 C语言代码在编译器上“翻译”,得到二进制的机器指令。一条高级语言的代码翻译过来可能会对应多条机器指令。对于CPU来说,机器指令才是"能看得懂"的语言。程序运行的过程其实就是CPU执行一…...

分布式事务解决方案之2PC
分布式事务解决方案之2PC 前面已经学习了分布式事务的基础理论,以理论为基础,针对不同的分布式场景业界常见的解决方案有2PC、 TCC、可靠消息最终一致性、最大努力通知这几种。 什么是2PC 2PC即两阶段提交协议,是将整个事务流程分为两个阶段…...

发现某设备 adb shell ps 没有输出完整信息
某错误示例 并不是都使用 -ef 参数查找都能够返回完整信息,某些版本设备不适用 -ef 也不会返回完整信息。 简单兼容 简单兼容不同版本 Android 设备查找进程列表,没有通过脚本判断 Android 版本,如有兴趣可以自己修改。 :loop adb shell…...
qt模拟鼠标事件
模拟鼠标事件 1、模拟鼠标按下事件2、模拟鼠标松开事件3、模拟鼠标点击事件4、模拟鼠标移动事件 1、模拟鼠标按下事件 QPoint p this->rect().center();QMouseEvent *pressEvent new QMouseEvent(QEvent::MouseButtonPress,p,Qt::LeftButton,Qt::LeftButton,Qt::NoModifie…...

Linux运维基础知识大全
一. Linux组成 1. 内核 内核:系统空间的代码和数据的集合称为内核(Kernel);kernel是操作系统内部最核心的软件,和硬件打交道的 1.对cpu进行管理,进程调度到cpu里进行管理 2.对内存进行空间的分配࿰…...

西门子S7-1200F或1500F系列安全PLC的组态步骤和基础编程(一)
西门子S7-1200F或1500F系列安全PLC的组态步骤和基础编程(一) 第一部分:组态配置 具体步骤可参考以下内容: 如下图所示,新建一个项目后,添加一个安全型PLC,这里以1516F-3 PN/DP为例进行说明, 如下图所示,添加CPU完成后,可以看到左侧的项目树中比普通的PLC多了几个选项…...

负载均衡-ribbon源码解析
负载均衡-ribbon源码解析 1 LoadBalanced注解 /*** 基于ribbon调用服务及负载均衡* return*/ LoadBalanced Bean public RestTemplate restTemplate(){return new RestTemplate(); }Bean ConditionalOnMissingBean public RestTemplateCustomizer restTemplateCustomizer(fin…...
SideBar 侧边导航与内容区域交互重写【Ant Design Mobile】
需求:SideBar 侧边导航与内容区域交互 点击侧边栏某一项时,相对应内容区域滚动到视口顶部滚动视口区域,到某一项内容区域,侧边栏选中状态也会跟着变化 const SideBarAgain: React.FC<PopupProps> (props) > {// 父组件…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...