智能家居是一种科技应用,旨在通过各种智能设备和互联网连接,提高住宅生活的舒适性、便捷性、效率性和安全性。这些智能设备和系统允许用户远程控制和监控各种家居设备,从而创造更智能、自动化和互联互通的家居环境。
本项目将通过制作一个简单的智能家居系统,来了解智能家居的基本实现原理和设计架,并且以此家居系统项目来熟悉企业的设计思路想法和执行流程。
基本框架
整体流程图
项目功能要求
本次项目涉及三大部分:开发板、服务器、客户端,而功能主要在服务端向开发板给出相应数据实现。而客户端(UI)实则只是方便用户来更加直观看到相应功能,其中包括以下两部分(登录、操作),详情如下:
登录界面
- 支持多用户:可以建立本地数据库来存储。
- 用户验证性提示:账号或密码错误、未输入。
- 注册账号:设置验证方式(邮箱、手机)防止用户忘记密码。
- 记住密码:账号可以采取下拉框方便下一次自动登录。
- 自动登录:自动选择上一次成功登录的用户
- 登录成功:播报当前用户名成功登录系统。
- 扩展属性(待完成):二维码登录。
操作界面
- 连接服务器验证性提示(IP、Port)。
- 成功连接服务器点亮右上角信号图标。
- 连接成功即可自动获取当前环境温/湿度。
- 可以远程控制 LED 、LCD、蜂鸣器、风扇的开关。
- 设置总开控制所有控件开关。
- 可扩展项:光照、语音识别…
开发环境
服务器是利用的 VM + Ubuntu,其中代码主要以 C/C++ 实现:
- 开发板:C 语言控制相应开关的启动和停止。
- 服务器:使用 C 采用套接字建立 TCP/IP 连接。
- 客户端:以 Qt 中类实现各相应控件,C++ 实现逻辑控制。
模块设计
代码量庞大,这里只提供我的一些设计想法和解决方案。
模块一:总开关
想法:总开应该是点击一次就被释放复原,而不是我点了之后再按一下才能启动(也就是电器控制当中的常闭),所以我单独写了一个以 PushButton 为基类重写了按下和释放按钮。
/**************** 按钮控件 ****************/
MyBtn * endOver = new MyBtn(":/res/off.png", ":/res/on.png");
endOver->setParent(this);
endOver->move(this->width() - endOver->width(), this->height()-endOver->height());
connect(endOver, &MyBtn::clicked, [=](){
qDebug() << "关闭";
/******* 复位 *******/
if(flag)
{
Reset();
// TCP/IP : 信号传递->总开关
char buf[] = "0";
tcpsockfd->write(buf,3);
flag = 0;
}
else
{
QMessageBox::information(this, "操作提示", "当前已全部关闭,无需重复点击!");
}
});
单独封装了一个类(MyBtn)来实现总开关的动画效果。
模块二:温湿度控件
封装成一个类(自定义控件)。可以自定义美化,网上都有详细代码。
可以实现滑块或者进度条任意一个值变化另外一个会随之移动,并向外提供给底层开发板给到服务器的一个设置温湿度的信号接口。
模块三:登录模块
上述已有详细说明功能,数据库则采用的是Qt中的sql模块,需要在工程文件(.pro)中添加该模块。
操作界面
上述已说明,放上效果图。(花了我一个下午😥)
可以实施的操作:
-
信号连接成功和失败提示
-
右上角的信号变成青蓝色
-
默认温湿度为 50%,连接成功自动变为开发板上数值。
-
控制操作中每个部件都有相应开关按钮,打开即可点亮
-
右下角为总开关,单机一次可以关闭所有控制控件开关,若没有点击则会重新提示框:重复点击。
-
总开关不会持续点亮,释放该按钮就复位原型。
需要掌握
我在本次项目中用到的知识点,了解即可。
socket 等待连接
QMessageBox 相关成员
Win11 串口无法通信
文件打包
- 将 Debug 调成 Release
- 生成 .exe 文件后找到该文件(最好新建一个空文件夹复制到该文件夹,通过控制台进入到该文件夹)
- 在该文件下进入控制台输入以下命令:
windeployqt FILENAME.exe
即可
总结
智能家居项目的设计和实施是一个动态的过程,它需要跨多个领域的知识和技能。这是一项充满挑战和潜力的任务。在项目的各个阶段,与多个利益相关者的沟通和协作都至关重要。最终,成功的智能家居系统可以提供更加便捷、安全和智能的家居体验,为用户带来实际的价值。整个系统涉及多个平台和技术。在设计和开发过程中,我学会了如何将这些不同的组件协同工作,确保系统的完整性、稳定性、可移植性、可扩展性以及互操作性。
在实现过程中觉得自动化真的是提高生活便捷性的关键。通过合理配置触发条件和规则,可以确保自动化任务既方便又可靠,例如在离开家时自动关闭灯光、调整温度等。当然随着技术的发展,因此项目需要保持灵活性和不断改进。
写在最后
这是学校近期组织的培训,为期5天,其中1天用于答辩。所以四天学习对于我们这个专业来说整个项目的学习难度还是挺大的。特别是在开发板上编程时,不了解相关原理图根本无从下手,但都被编译成功后的喜悦给掩盖住了....
此次学习收获颇多,将QT、服务器、ARM板,软硬件相结合,知晓 QT 的创造性以及 Qt 界面开发中的逻辑性与关联性进行实现与深入。
最后便附上此次学习的每日笔记,相关资料可私信我😎
真的牛
点赞