1 Star 22 Fork 14

ldc / SmartGateway_Base_on_QT

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

SmartGateway_Base_on_QT

一、前言

2022年6月18日的一场毕业典礼,意识到自己真的要离开学校了,真的要和四年的舍友说拜拜了,真的是最后一次在学校打篮球了,马上奔赴人生的下一个战场,多少有点不舍。

想用这篇博客简单记录一下大学四年努力学习的成果,四年的时光里,承认虚度过光阴,但也承认有在认真的努力学习。

一个在大学才拥有自己第一台笔记本电脑的计算机菜鸟,毕业设计能做得有多烂呢?

演示视频:https://www.bilibili.com/video/BV1Ft4y187zu/

二、系统总体架构设计

系统总体架构如下图所示,浅说一下整个系统的结构和通信链路吧,整个系统主要分为三层:

  1. 底层:使用支持ZigBee协议的子设备负责采集和传输传感器的数据,并且负责控制该子设备自身的一下执行器(灯、蜂鸣器),一个协调器负责从ZigBee网络收集两个终端节点采集到的数据,然后协调器通过UART与上层的网关进行通信。
  2. 网络层:该层的核心设备使树莓派网关,给网关配了一块触控屏,外接了两个摄像头,这里的网关不仅仅是完成不同协议间的数据转换,还有更多的与人交互的功能。当然了,网关还得接入路由器。
  3. 应用层:主要是手机APP,实现一些远程控制和查看数据的功能,云端服务器作为一个数据中转和存储的角色。 在这里插入图片描述

三、硬件接线参考图

在这里插入图片描述

四、ZigBee心跳包原理实现

原理描述:心跳包技术是一种用于检测子设备是否在线的常用技术,在本系统中,ZigBee协调器负责构建ZigBee网络,当ZigBee终端节点加入网络成功后,协调器就会给当前的终端节点的心跳值定时减一,而终端节点则会定时发送一个心跳包给协调器,当协调器收到终端节点的心跳包之后,则会把当前终端节点心跳值恢复到最大值,代表终端节点当前是在线的状态,反之就是离线状态。

本系统心跳包功能没有在视频中演示,后面有截图展示。具体效果是,关闭某个ZigBee节点后,在环境与控制模块中,就不能操作该节点的执行器(例如不能开灯)图标旁边也会有离线的字眼提醒。本系统心跳包实现的参考图: 在这里插入图片描述

核心代码:
void zb_StartConfirm( uint8 status ) //加入ZigBee网络成功时调用
{
  if(status==ZSUCCESS) 
  {    
	  //发送加入网络的请求命令通知协调器
zb_SendDataRequest(0X0,SUBNODE_JOIN_NET_CMD_ID,
osal_strlen(deviceI),deviceID,0,FALSE,AF_DEFAULT_RADIUS);

//发送心跳包
     osal_start_timerEx(sapi_TaskID,HEART_BEAT_TIMEOUT_EVENT,1000);
  }
}


void zb_HandleOsalEvent( uint16 event )//处理用户自定义事件
{
if(event&READ_SENSOR_DATA_EVENT) //处理读取DHT11数据事件
{ 
uint8 temphumi[2];
if(Read_DHT11(temphumi,temphumi+1)==0)
{      
//发送传感器数据包
zb_SendDataRequest(0X0,GET_LIVINGROOM_NODE_DATA_CMD_ID,
osal_strlen(temphumi),temphumi,0,FALSE,AF_DEFAULT_RADIUS);

//定时3s触发心跳包发送事件
osal_start_timerEx(sapi_TaskID,HEART_BEAT_TIMEOUT_EVENT,3000);
		}
}

if(event&HEART_BEAT_TIMEOUT_EVENT)//处理心跳包事件
{    
//发送心跳包
zb_SendDataRequest(0X0,HEART_BEAT_CMD_ID,0,NULL,0,FALSE,AF_DEFAULT_RADIUS); 

//定时3s触发传感器发送事件
osal_start_timerEx(sapi_TaskID,READ_SENSOR_DATA_EVENT,3000);
}
}

五、传感器数据传输链路

[外链图片转存失败,源站可能有防!在这里插入盗链机制,建描述]议将图片上https://传(imblog.csdnimg.cn/ffbc77bdeGFHV54a05bff4b106bf57a59.png81(https:/`在这里插入代码片`/img-blog.csdnimg.cn/ffbc77bdc3454a05bff4b106bf157a59.png)] 云端服务器中,数据流转的相关细节如下图所示,在Tomcat中部署的Web API是使用Java编写的一个servlet后台程序,如果MQTT代理服务器支出数据直接流转到数据库则可以省略此步骤。 在这里插入图片描述

六、系统测试截图

1、时钟和天气模块: 如果使用GEC6818开发板,获取时钟信息需要移植一个NTP服务,可以参考这位大佬的文章:https://blog.csdn.net/qq_41248872/article/details/83622146

ntpclient -s -d -c 1 -i 5 -h 111.230.50.201    //板子获取网络时间

天气模块的信息从一开始的手动获取,到后面改为了上电自动获取。源码里有两个免费的API接口,一个可用于定位当前网络IP的归属地,另一个接口则是利用该区域名称获取该地区的天气信息。

在这里插入图片描述

2、视频监控和播放器模块: 这里踩过一些坑,本以为QT的QMultiMedia(低版本的QT库没有该模块,需要自己编译移植)模块支持视频服务的,后面查了很多文章发现,仅支持对摄像头模块采集的画面进行截图而已。在指导老师的帮助下,最后采用opencv来获取视频流并显示到屏幕上。此时,使用的是树莓派来开发,安装opencv库都比较简单方便,如果还是用之前的GEC6818开发板,需要自己交叉编译opencv库,并移植上去。

在这里插入图片描述

视频播放器模块也是直接使用opencv库来做的,就是简单直接播放一个视频。一般视频都会用一些编解码的框架来处理,这一块实在太难了,只能替代一下,实现功能够了。之前也试过移植一个播放器来播放。

在这里插入图片描述

3、音乐播放器模块: 这里好像是移植了一个mplayer播放器来实现的,只要调用一些接口,就能实现暂停、播放、切割都功能,其实最难得是进度条的开发,包括视频播放器的进度条也一样,需要考虑的情况挺多的,而且还要实现拖动变化,点击变化等操作。

在这里插入图片描述

4、电子相册模块: 这一个功能就比较简单了,纯逻辑的一个模块,拿到路径中的图片,放到列表里,随意控制即可。

在这里插入图片描述

5、环境与控制模块: 这是整个系统中最难开发的一个功能了,首先从串口拿到数据,实时显示数据,并做成图表来查看数据的走势,然后就是控制部分了。例如,假设现在所有的节点都在线,点击其中一个节点的开灯按钮,网关会通过串口给ZigBee协调器发送开灯指令,这条指令包括了,要发送给哪个节点,操作的是这个节点上的哪个执行器,该执行器的状态要切换成什么,等这些信息。倘若是手机端的远程控制,则网关还要监听MQTT代理服务器发送过来的指令。

在这里插入图片描述

6、手机端功能展示: 远程控制是通过MQTT协议来实现的,和网关上的触控操作是一样的。历史数据下拉页面即可获取到最新的数据,原理是通过http协议访问WebAPI,按理说这种数据应该要做成按日期查询的,奈何安卓太难了。 在这里插入图片描述

七、总结

以上就是我的毕业设计的大概描述,大家也看得出来,我是很简单的描述了几句而已,确实没时间描述太详细,本人也才疏学浅,专业术语懂的也不多,我的作品也没有拿到优,可见,计算机行业有多卷。

如果有人问,大学四年学到的东西对你现在工作有什么帮助呢? 我会说,学了四年的计算机,对现在的工作有帮助的地方就是调试的能力,因为通常代码是写出来了,明明逻辑也没问题,但效果就是和你预期的不一样,另外调试就是一直在熬,挺考验耐心的。

工作之后接触到的技术完全和学校学的东西不一样了,在学校学到的技术和自己自学的技术,所做出来的作品都几乎开源了,而且这个毕业设计也几乎用上了我所学到的所有技术了。

开源也是为了更好奔赴人生的下一个战场,学习某个行业的全新技术,现在总算体会到了,人生的每一个阶段只会越来越难。

最后,感谢所有帮助过我的同学、老师和CSDN上的网友们,谢谢!!

MIT License Copyright (c) 2022 ldc Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

一个基于QT的智能家居网关项目 展开 收起
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
C++
1
https://gitee.com/grldc/smartgateway.git
git@gitee.com:grldc/smartgateway.git
grldc
smartgateway
SmartGateway_Base_on_QT
master

搜索帮助