linux系统中实现智能家居的基本方法

news2024/12/23 20:04:53

      大家好,今天主要和大家分享一下,智能家居物联网的基本实现与操作方法。

目录

第一:智能家居基本简介

第二:测试WIFI模块功能

第三:智能家居物联UI界面开发

第四:核心代码的具体实现

第五:最终效果


 

第一:智能家居基本简介

      使用QT开发智能家居中的一个物联应用,通过云服务器远程控制设备与设备进行通信。在生活中,可以使用WIFI智能插座控制电器开关,比如远程开启热水器,远程打开空调,窗帘等等。包括:WIFI联网,注册到云服务器上,编写QT UI通过网络来与云服务器通信,然后再下发指令到这个连网的设备。

     硬件说明:需要有一个串口转WIFI模块,另外需要加上一个USB-TTL模块,外加一根T口USB连接线,可接入PC电脑调试。

                       

第二:测试WIFI模块功能

       请先测试个人的 ATK-ESP8266 模块是否正常使用,及正常连接云。原子云的设备需要先分 好组,各个设备命名如下。注意需要和笔者命名的名字一样,也就是至少有一个分组及一个名 字为“客厅灯”的设备,并记住编号及密码(密码由云生成,默认“12345678”)。

        默认使用的 WIFI 模块串口通 信波特率为 115200。在 Ubuntu 上设试 WIFI 模块时,一般串口名称为“ttyUSB0”,默认是没有 权限访问这个/dev/ttyUSB0 设备的。所以我们需要使用下面的指令修改权限。

sudo chmod 777 /dev/ttyUSB0

第三:智能家居物联UI界面开发

      项目界面如 下,采用暗黑主题设计,结合黄色作为亮色,让用户一目了然。界面笔者从一些智能家居界面 中找到灵感的,编写设计完成的效果不错!

      如何想与原子云通信,必须使用云平台的API接口。下面是云平台API的使用流程图。

第四:核心代码的具体实现

       写QT应用就应该重点放在HTTPS与WebSocket方向上,与设备信息是通过HTTPS协议接口获得的,通信用WebSocket协议接口。

1 #include "webapi.h"
2 #include <QUuid>
3 #include <QRegularExpression>
4 
5 Webapi::Webapi(QObject *parent)
6 {
7 this->setParent(parent);
8 /* 数组清空 */
9 groupID.clear();
10 deviceID.clear();
11 deviceNumber.clear();
12
13 timer = new QTimer();
14 connect(timer, SIGNAL(timeout()), this, SLOT(onTimerTimeOut()));
15
16 networkAccessManager = new QNetworkAccessManager(this);
17
18 orgURL = "https://cloud.alientek.com/api/orgs";
19 /* 请填写自己的 token 信息!!! */
20 api_token = "bf591984c8fa417584d18f6328e0ef73";
21
22 /* 获取账号机构列表 */
23 getOrgURL();
24
25 QUuid uuid = QUuid::createUuid();
26 random_token = uuid.toString();
27
28 webSocket = new QWebSocket();
29 /* 需要加一些安全配置才能访问 https */
30 QSslConfiguration config;
31 config.setPeerVerifyMode(QSslSocket::VerifyNone);
32 config.setProtocol(QSsl::TlsV1SslV3);
33 webSocket->setSslConfiguration(config);
34
35 connect(webSocket, SIGNAL(connected()),
36 this, SLOT(webSocketConnected()));
37 connect(webSocket, SIGNAL(binaryMessageReceived(QByteArray)),
38 this, SLOT(onBinaryMessageReceived(QByteArray)));
39 }
40
41 Webapi::~Webapi()
42 {
43 delete timer;
44 delete webSocket;
45 webSocket = nullptr;
46 }
47
48 void Webapi::getOrgURL()
49 {
50 getDataFromWeb(QUrl(orgURL));
51 }
52
53 /* 获取设备分组列表 */
54 void Webapi::getGroupListUrl()
55 {
56 getDataFromWeb(QUrl(groupListUrl));
57 }
59 /* 获取设备的信息 */
60 void Webapi::getDevOfGroupUrl()
61 {
62 getDataFromWeb(QUrl(devOfGroupUrl));
63 }
64
65 /* 获取设备连接状态 */
66 void Webapi::getConStateUrl()
67 {
68 getDataFromWeb(QUrl(conStateUrl));
69 }
70
71 /* 从云服务器获取数据 */
72 void Webapi::getDataFromWeb(QUrl url)
73 {
74 /* 网络请求 */
75 QNetworkRequest networkRequest;
76
77 /* 需要加一些安全配置才能访问 https */
78 QSslConfiguration config;
79 config.setPeerVerifyMode(QSslSocket::VerifyNone);
80 config.setProtocol(QSsl::TlsV1SslV3);
81 networkRequest.setSslConfiguration(config);
82
83 /* 设置访问的地址 */
84 networkRequest.setUrl(url);
85
86 /* 网络响应 */
87 networkRequest.setHeader(QNetworkRequest::ContentTypeHeader,
88 "application/json;charset=UTF-8");
89
90 /* 参数二为原子云帐号的 token 信息,填写自己的 */
91 networkRequest.setRawHeader("token", api_token.toLatin1());
92
93 QNetworkReply *newReply =
94 networkAccessManager->get(networkRequest);
95
96 connect(newReply, SIGNAL(finished()),
97 this, SLOT(replyFinished()));
98 connect(newReply, SIGNAL(readyRead()),
99 this, SLOT(readyReadData()));
100}

分析:第 20 行,需要填写自己的原子云平台帐号 api_token 信息,请在原子云》帐号信息中查看! 剩余的代码都按照原子云平台 API 文档编写,首先是通过网络请求 networkRequest,访问 需要访问的地址,然后通过网络回应对象 newReply 来接收网络回复的结果。结果是 JSION 格 式的文本,笔者使用正则表达式提取回复的内容,作为下一个地址的参数,如此反复,就可以 将原子云服务器的帐号下的设备信息提取出来。

第五:最终效果

      利用QT Creator的应用程序窗口输出如下,连接原子云成功后就会启用 定时器,每 15s 向原子云服务器发送一次心跳包,webSocket 应用程序收到后就会显示此设备在 线。

 总结:学习智能家居物联网实现,主要是它的开发流程。点击UI 界面上的开关按钮,就相当于发信息到原子云上,原子云再转发给 ESP8266 WIFI 模块,进而控制开发板上的 LED。

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

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

相关文章

【阅读笔记】《重构》 第三四章

第三章 代码的味道 DuplicatedCode(重复代码) 同一个类的两个函数含有相同的表达式两个互为兄弟的子类含有相同表达式两个毫不相干的类出现重复代码 LongMethod(过长函数) 函数不宜过长&#xff0c;函数越长越难理解如果想利用单个类做太多事情&#xff0c;其内往往就会出现…

联合证券|港股再融资“春江水暖” 资本争购热门赛道企业

进入2023年&#xff0c;港股再融资商场有所回暖。到1月18日&#xff0c;已有27家港股上市公司发布拟配售股份&#xff08;简称“配股”&#xff09;再融资&#xff0c;募资总额164.01亿港元&#xff0c;较上一年同期增加148.16%。其间&#xff0c;微盟集团的配股再融资吸引了众…

fpga实操训练(lcd测试)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 前面我们测试过vga输出,当时是找了一个老式的显示器来完成的,也就是本身自带vga接口的显示器。但是,现在市面上大部分显示器都是默认支持hdmi接口的。所以说,如果真的想用fpga测…

都说InnoDB好,那还要不要使用Memory引擎?

我在上一篇文章末尾留给你的问题是:两个 group by 语句都用了 order by null,为什么使用内存临时表得到的语句结果里,0 这个值在最后一行;而使用磁盘临时表得到的结果里,0 这个值在第一行? 今天我们就来看看,出现这个问题的原因吧。 内存表的数据组织结构 为了便于分…

如何在SpringBoot项目中访问静态资源

在springboot项目中如果要在不集成templates的情况下访问静态资源需要做以下配置 1.在项目的application.yml文件中做如下配置 spring:profiles:active: devmvc:view:prefix: /suffix: .html 重点在 配置后生成为WebMvcProperties 配置类。该配置类中有一个内部类View Conf…

各式各样图标的特点

笔者近期在翻看各种样式的图标&#xff0c;逛了下 Iconfont、IconFinder 等图标网站&#xff0c;现根据自己的经验&#xff0c;总结了一些图标特点的描述用语 线性/面性/线面组合平面/立体无层次感&#xff08;或阴影&#xff09;/有层次感&#xff08;或阴影&#xff09;无填…

Oracle强制加了hint实效三种连接方式使用场合判断

开发写了一个语句使用了connect by level函数 SELECT DISTINCT CTMID FROM ( SELECT CTMID, REGEXP_SUBSTR(FLTUSERIDSTR, ‘[^;]’, 1, l) AS userid FROM s_userinfo,(SELECT LEVEL l FROM DUAL CONNECT BY LEVEL<300) b WHERE l < LENGTH(FLTUSERIDSTR) - LENGTH(rege…

链表的算法题

目录 题型一、克隆含有rand指针的链表 笔试&#xff1a;哈希表 面试&#xff1a;不用容器&#xff0c;模拟哈希表的功能 题型二、给一个单链表头节点Head&#xff0c;判断是否构成回文 题型三、将单链表按某值划分为左边小&#xff0c;中间相等&#xff0c;右边大 6个变量…

Allegro如何设置创建Pin Pair的快捷键操作指导

Allegro如何设置创建Pin Pair的快捷键操作指导 在做PCB设计的时候需要做一组信号的等长,需要使用到创建Pin Pair的功能,如下图,如果每个网络都右键去选择添加比较浪费时间,如下图 Allegro支持给创建一个Create Pin Pair的快捷键位 具体操作如下 打开规则管理器选择Tools

单调栈与单调队列

单调栈与单调队列一、单调栈1.1 思路1.2 例题&#xff1a;单调栈二、单调队列2.1 思路2.2 例题&#xff1a;滑动窗口一、单调栈 1.1 思路 单调栈主要解决以下问题&#xff1a; 1️⃣ 寻找下一个更大元素 2️⃣ 寻找前一个更大元素 3️⃣ 寻找下一个更小元素 4️⃣ 寻找前一个…

理性和感性 - 如何对待错误

上次的博客&#xff0c; 我写了一些关于 软件开发中的理性和感性决定 的故事。 不论是感性还是理性&#xff0c;我们的目的就是要把软件交给用户去用&#xff0c; 在软件行业中有这样一句俗话&#xff1a; 当你把产品交给用户的时候&#xff0c;你的学习才刚刚开始。 当然每个团…

【设计模式】结构型模式·桥接模式

学习汇总入口【23种设计模式】学习汇总(数万字讲解体系思维导图) 写作不易&#xff0c;如果您觉得写的不错&#xff0c;欢迎给博主来一波点赞、收藏~让博主更有动力吧&#xff01; 一.概述 将抽象与实现分离&#xff0c;使它们可以独立变化。用组合关系代替继承关系&#xff0c…

华为数字化转型之道 结语 数字化转型的8个成功要素

结语 数字化转型的8个成功要素 华为开展数字化转型的过程中,积累了一些经验和教训,总结起来有如下成功要素。 1. 一把手担责 要做好数字化转型,企业家就要有战略决心、信心、耐心。数字化转型一定是企业“一把手工程”,需要企业家自上而下地推动并在企业内达成广泛共识。…

免费开题报告|基于SpringBoot+Vue的校内跑腿平台

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路 关注作者有好处 文末获取源…

Android 深入系统完全讲解(29)

MediaMuxer 封装器 MediaMuxer 最多仅支持一个视频 track 和一个音频 track&#xff0c;所以如果有多个音频 track 可以先 把它们混合成为一个音频 track 然后再使用 MediaMuxer 封装到 mp4 容器中。 MediaMuxer 支持输出格式为 MP4&#xff0c;webm 和 3gp. 默认我们就用 mp4.…

产生聚类数据集sklearn.datasets.make_blobs()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 产生聚类数据集 sklearn.datasets.make_blobs() [太阳]选择题 以下python代码结果错误的一项是? import matplotlib.pyplot as plt from sklearn.datasets import make_blobs data,labelmak…

统计-参数估计-假设检验-总结二

统计-参数估计-假设检验-总结二参数估计—区间估计三大分布卡方分布(Gamma分布的特例)t分布F分布求估计区间假设检验参数检验拟合优度检验通往 统计-参数估计-假设检验-总结一参数估计—区间估计 以某一范围提供对参数θ\thetaθ的估计。寻找统计量θ1∗(x1,x2,...,xn)\theta…

20230120英语学习

How Animals May Have Conquered Snowball Earth “雪球地球”时期&#xff0c;动物是如何存活的&#xff1f; Planet Earth used to be something like a cross between a deep freeze and a car crusher.During vast stretches of the planet’s history, everything from p…

微信小程序开发尚学堂 介绍 项目结构 组件 喧嚷 事件 模板

一、微信小程序介绍1. 微信小程序介绍微信小程序&#xff0c;简称小程序&#xff0c;是一种不需要下载安装即可使用的应用&#xff0c;它实现了应用”触手可及”的梦想&#xff0c;用户扫一扫或搜一下即可打开应用。说明&#xff1a;小程序是需要下载的&#xff0c;小程序的占用…

概论_第6章_统计量及其抽样分布_知识结构

先看知识结构图数量统计的特点是 背记的内容多&#xff0c; 与前面概率论 背记和计算的多 有很大区别。本文从统计量的概念讲起, 一. 统计量定义&#xff1a; 设 ...... 为取自某总体的样本&#xff0c; 若样本函数TT(, ... ) 中不含有任何未知参数&#xff0c; 则称T 为统计…