首页 > 其他分享 >智能家居项目实现

智能家居项目实现

时间:2023-06-02 11:02:56浏览次数:35  
标签:5.1 项目 实现 智能家居 实训 所示 服务器 服务端 客户端


该项目是嵌入式课程实训内容

其中QT界面不是自己写的,当时实训时间有限,老师直接给的一个打包好的Qt实现的界面,在实训中主要完成的是服务端的实现。


目录

  • 1实训准备
  • 1.1硬件资源
  • 1.1.1智能家居终端
  • 1.1.2 ZigBee 模块简介
  • 1.1.3 ZigBee协调器
  • 1.2 软件资源
  • 1.2.1 Linux操作系统
  • 1.2.2 Qt软件
  • 2 实训原理
  • 2.1整体框架分析
  • 2.1.1整体框架图
  • 2.1.2项目流程图
  • 3 实训目的
  • 4 实训方案
  • 5实训内容
  • 5.1基础学习
  • 5.1.1系统调用和库函数
  • 5.1.2文件I/O
  • 5.1.3标准IO
  • 5.1.4 TCP建立过程
  • 5.1.5 TCP的C/S架构
  • 5.1.6服务器模型
  • 5.2 项目实现过程


1实训准备

1.1硬件资源

1.1.1智能家居终端

所提供的FS_11C14开发板,基于NXP LPC11C14微控制器(ARM Cortex-M0 内核),如下图1.1所示。集成多种传感器、RFID、ZigBee、OLED 显示模块等。该平台有丰富的硬件资源及物联网相关实验程序,适合于物联网教学及工程师作为研发参考平台。还配套有开放的FS_CoLink仿真器,使用者可以在不另外配置仿真器的情况下进入开发。为使用者提供了一个简洁方便可以快速上手的良好开发环境,可以为应用开发节省时间,提高效率。

智能家居项目实现_嵌入式

模拟智能家居终端,使用 cortex-M0 处理器,带有重力、光照、温度 等多种传感器,负责家庭环境信息采集。

1.1.2 ZigBee 模块简介

FS_CC2530 ZigBee 模块采用的是 Ti 公司 CC2530 模块。带有USB转串口芯片,可以方便的连接 PC 机或其它带有 USB 主机接口的设备,从而实现和 FS_11C14 组网通讯。FS_CC2530 模块的扩展资源包含电位器、按键中断、LED 灯等外设。

1.1.3 ZigBee协调器

Zigbee 协调器(如图1.2),负责采集终端和 FS4412 数据透传,协调器采用 USB 延长线连接到 FS4412,最终数据通过 Zigbee 传给 FS4412。

智能家居项目实现_服务器_02

1.2 软件资源

1.2.1 Linux操作系统

本次实训会有服务端的实现,服务端一般会在Linux操作系统上实现,并部署在上面。为了服务端代码编写和调试的相对方便,这里选择了VMware虚拟机下的Ubantu操作系统。
Ubantu是一个以桌面应用为主的Linux操作系统,并且Ubantu是一个开源、免费的系统版本之一。服务器之间的Linux使用率是非常高的,全球大多数的web服务器就是基于Linux系统运行的。尽管Windows和mac之类的操作系统比Linux更为流行,但是Linux依然普及率很高。

Linux系统有如下的优势:

  • 跨平台的硬件支持。
  • 丰富的软件支
  • 多用户多任务
  • 可靠的安全性
  • 良好的稳定性
  • 完善的网络功能

1.2.2 Qt软件

本次实训客户端需要以图形界面的形式来操作,所以选择通过Qt来实现客户端界面和相关逻辑。Qt是由跨平台C++ 图形用户界面应用程序开发框架,它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展以及一些宏,Qt很容易扩展,并且允许真正地组件编程。

2 实训原理

2.1整体框架分析

2.1.1整体框架图

智能家居项目实现_客户端_03

2.1.2项目流程图

智能家居项目实现_嵌入式_04

3 实训目的

在本次实训中需要设计并实现一个智能家居控制系统,主要包括服务端设计和客户端的设计。用户将客户端和服务端连接之后,用户可以在客户端界面收到通过M0板上传感器所传来的实时数据,有温度、湿度、和光照;用户还可以在客户端界面通过点击对应的家居控制按钮来控制对应的家居设备,当然在实训中的“家居设备”是M0板上的一些灯、蜂鸣器、风扇等电子元器件。

4 实训方案

对于整个实训,服务端采用Linux下的C语言编写,客户端采用Qt实现图形界面。智能家居通过STM32f051arm处理器(arm处理器)的M0板进行实时采集环境参数,例如温度、湿度、光感等数据;再通过ZigBee无线通信把采集到的环境参数或物品信息发送给ZigBee协调器,然后通过串口将数据传到linux服务端,由M0线程负责接收环境参数或物品信息,激活数据库线程对数据库进行相应的处理,通过socket通信将数据进一步传送到客户端,在客户端以图形化界面显示采集到的实时数据。M0板上的风扇、LED等“家居设备”可以通过客户端发送控制命令,对命令进行封装,然后将封装好的命令通过socket传输到服务端,在服务端通过ZigBee无线通信传输到M0板,进而对M0板上的风扇、LED等“家居设备”进行远程智能控制。

5实训内容

5.1基础学习

老师先带领我们学习了一些完成项目所必须的基础知识。

5.1.1系统调用和库函数

1、系统调用是通向操作系统本身的接口,是面向底层硬件的。通过系统调用,可以使得用户态运行的进程与硬件设备(如CPU、磁盘、打印机等)进行交互,是操作系统留给应用程序的一个接口。用户进程需要发生系统调用时,内核将调用内核相关函数来实现。用户程序不能直接调用这些函数,这些函数运行在内核态,CPU通过软中断切换到内核态开始执行内核系统调用函数。

2、库函数可以理解为是对系统调用的一层封装,是为了实现某种功能封装起来的API集合,提供统一的编程接口,便于应用程序移植。系统调用作为内核提供给用户程序的接口,它的执行效率是比较高效而精简的,但有时我们需要对获取的信息进行更复杂的处理,或更人性化的需要,我们把这些处理过程封装成一个函数再提供给程序员,更方便于程序员编码。

库函数和系统调用的关系如下图5.1所示:

智能家居项目实现_服务器_05

5.1.2文件I/O

文件I/O以系统调用为基础,由posix(可移植操作系统接口)提供的一组用来输入输出的接口,操作核心是文件描述符。其中文每个打开的文件都有一个对应的文件描述符,文件描述符是非负整数,文件描述符从0开始分配,依次递增,默认打开三个描述符,分别是0、1、2,它们对应标准输入、标准输出和标准错误。
对应有函数有open()、close()、read()、write()等。

5.1.3标准IO

标准IO是由C库中提供的一组专门用来输入输出的函数。操作核心是FILE(文件流指针),每个被使用的文件都在内存中开辟一个区域,用来存放文件的相关信息。

相关的函数有fopen()、flose()、fgetc()、fputc()、fgets()、fputs()、fread()、fwrite()、fseek()、fftell()等。

标准IO缓存方式有全缓冲、行缓冲和无缓冲这三种方式。刷新条件有三种,分别是程序正常退出,缓存区刷满,遇到换行符‘\n’。

练习1,计算行缓存区大小,代码截图如下图5.2所示:

通过运行代码观察输出可以得出缓存区的大小为1024字节。

练习2,用fgetc()和fputc()实现linux中cat命令的功能,代码如下图5.3所示:

练习3,用fgets()实现wc -l的功能,代码如下图5.4所示:

练习4:用fgets和fputs实现cp的功能,代码如下图5.5所示:

智能家居项目实现_服务端_06

5.1.4 TCP建立过程

首先 Client 端发送连接请求报文,Server 段接受连接后回复 ACK 报文,并为这次连接分配资源。Client 端接收到 ACK 报文后也向 Server 段发生 ACK 报文,并分配资源,这样 TCP 连接就建立了。
TCP三次握手,如图5.6所示:

  • client–>server:第一次握手,建立连接时,客户端发送syn包(seq=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号。
  • server–>client:第二次握手,服务器收到syn包,必须确认客户端的SYN(ack=j+1)同时自己也发送一个SYN包(seq=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。
  • client–>server:第三次握手,客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK (ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

5.1.5 TCP的C/S架构

1、Server端配置:
socket()产生用于建立连接的套接字–>bind():绑定IP和端口–>listen()监听,化主动为被动–>accept():接受客户端连接请求,产生用于通信的套接字–>recv()/send():数据收发–>close():关闭套接字。
2、client端配置:
socket():产生一个套接字用于建立连接和通信–>connect():向服务器发送连接请求,建立连接–>recv()/send():数据收发–>close():关闭文件描述符。

5.1.6服务器模型

服务器模型可以分为循环服务器和并发服务器。循环服务器:当一个客户端退出后服务器可以继续接收下一个客户端的连接;并发服务器:一个服务器可以同时和多个客户端进行数据收发。
其中并发服务器又可以分为多进程并发、多线程并发和IO多路复用。

5.2 项目实现过程

在这次实训中我主要负责的是整个项目完成的最后一步——调试测试工作。由于实训时间限制,Qt客户端来不及完成,使用的是老师提供的一个Qt实现的客户端,我们完成的部分就是除了客户端之外的服务端。首先看一下整个项目的服务端代码结构,如下图5.7所示:

智能家居项目实现_嵌入式_07


其中的Makefile文件是整个项目文件的编译链接规则,编写好这个文件并添加到工程文件夹中后只需在终端输入一个make命令就可以对整个项目文件进行编译并生成一个可执行文件。Makefile文件里面的内容如下图5.8所示:

智能家居项目实现_服务端_08


编译main.c,如图5.9所示:

智能家居项目实现_服务端_09


运行main.c,如图5.10所示,显示没有客户端的连接,接下来等待客户端的链接:

智能家居项目实现_服务器_10


打开客户端,如图5.11和5.12所示设置好IP和端口后,回到登录界面设置账号和密码,如图5.14点击“登录”:

智能家居项目实现_客户端_11


点击登录按钮后,如图5.13所示,可以立即在终端看到连接成功的提示:

智能家居项目实现_客户端_12


在“主页”可看到M0板返回的实时数据,数据以折线图实时展示,返回的数据有温度、湿度和光照,如图5.15、5.16、5.17所示:

智能家居项目实现_嵌入式_13


接下来进入控制台界面,测试对应的按钮是否有效。这里展示了两个按钮的测试情况,如图5.18点击“卧室灯开”按钮,图5.20显示了终端所受到的控制命令;如图5.19点击“卧室灯开”按钮,图5.21显示了终端所受到的控制命令。

智能家居项目实现_客户端_14


智能家居项目实现_客户端_15


GitHub资源https://github.com/Sunqk5665/LinuxC-Learning/tree/main/%E5%AE%9E%E8%AE%AD


标签:5.1,项目,实现,智能家居,实训,所示,服务器,服务端,客户端
From: https://blog.51cto.com/u_14458591/6400805

相关文章

  • 热泵干燥系统如何实现数据远程在线监控
    传统的热风循环干燥加工技术因能耗大、耗时长、品控差等原因,无法满足加工厂对高品质产品的需求。热泵干燥加工是广泛应用于木材、农产品、药材、食品等场景的生产工艺,通过PLC控制可以实现温度、湿度、重量、风速等型号的自动化控制,从而实现高效率的生产。 热泵干燥现场的PLC接收传......
  • maven创建web项目(springboot)
    创建一个Java项目和创建一个Web项目在IntelliJIDEA中有一些区别。创建Java项目:选择"Java"选项,并选择适当的JDK版本。创建的是一个普通的Java项目,用于编写Java类、库和应用程序。没有默认的Web相关依赖和配置。创建Web项目:选择"JavaEnterprise"选......
  • ECharts点击横坐标事件实现超链接跳转
    需求:微博排行榜,横坐标展示出了微博对应的id,现在需要通过点击横坐标来实现跳转到对应的微博页面。设置横坐标中的triggerEvent属性为true;xAxis:{...triggerEvent:true,...},添加on点击事件。thisChart.on("click",function(params){window.location.......
  • 肖sir__影音视频讲解___项目整理
    一、参考链接直播产品:参考连接:https://www.axureshop.com/a/1401607.html 电商直播后台 二、项目简历:项目名称:xx直播app项目背景:我们是一个基于后台管理的一套电商直播后台系统,让线下的实体户家电卖家通过网络的直播平台来开拓市场,使客户在了解产品各项性能的同时来购......
  • Vue-自定义icon实现
    在项目中引入了element-ui之后,发现其内置的icon有限,无法满足项目的需求,因此需自定义icon来实现需求。在vue项目的components下新建SvgIcon目录,在SvgIcon目录下新建index.vue插入代码:<template><svgclass="svg-icon"aria-hidden="true"><use:xlink:href="ic......
  • react 实现聊天界面,发送消息自动到底部
    <divstyle={{float:"left",clear:"both"}}ref={(el)=>{this.messagesEnd=el;}}></div>scrollToBottom=()=>{this.messagesEnd.scrollIntoView({behavior:"auto"......
  • 正则表达式原理及其简单实现
    本文从文件依赖依赖这个需求切入,详细阐述了文件依赖分析的实现过程,对于其中所使用到的正则表达式进行原理上的分析,说明了状态机的基本架构以及状态机的最小实现。文件依赖分析如果我想获取某个文件的所有依赖(如下图中的紫色部分),应该怎么做呢【方案1】利用webpack......
  • 数据治理核心保障数据质量监控开源项目Apache Griffin分享
    @目录概述定义为何要做数据质量监控基本概念特性架构安装Docker部署Docker镜像批处理使用Docker镜像流处理使用UI界面操作概述定义ApacheGriffin官网地址https://griffin.apache.org/源码release最新版本0.6.0ApacheGriffin官网文档地址https://griffin.apache.org......
  • IDEA+Maven启动SpringBoot项目或Spring项目出现程序包XXX不存在
    博主我主要是IDEA2020.1的版本上出现过这个问题,以下三种方法是网上提供的,但是我都试了一下多多少少都有些问题,最好的方法是直接更换IDEA的版本,换成IDEA2019的版本就不会出现这种问题了。 下面是网上的解决方案:你的pom中的依赖(是否缺少,版本是否兼容)maven仓库等配置没有问题的情况......
  • 如何SpringBoot项目改为外置Tomcat启动
    如何SpringBoot项目改为外置Tomcat启动 正常情况下,我们开发SpringBoot项目,由于内置了Tomcat,所以项目可以直接启动,部署到服务器的时候,直接打成jar包,就可以运行了(使用内置Tomcat的话,可以在application.yml中进行相关配置)有时我们会需要打包成war包,放入外置的Tomcat......