基于物联网的智能家居系统设计报告书.docx
- 文档编号:28401095
- 上传时间:2023-07-13
- 格式:DOCX
- 页数:47
- 大小:595.15KB
基于物联网的智能家居系统设计报告书.docx
《基于物联网的智能家居系统设计报告书.docx》由会员分享,可在线阅读,更多相关《基于物联网的智能家居系统设计报告书.docx(47页珍藏版)》请在冰豆网上搜索。
基于物联网的智能家居系统设计报告书
基于物联网的智能家居系统
SmartHomeSystembasedonEPCSystemNetwork
设
计
报
告
摘要
智能家居是以住宅为平台,利用综合布线技术、网络通信技术、智能家居-系统设计方案安全防范技术、自动控制技术、音视频技术将家居生活有关的设施集成,构建高效的住宅设施与家庭日程事务的管理系统,提升家居安全性、便利性、舒适性、艺术性,并实现环保节能的居住环境。
本系统采用S3C2410、PXA270、AT89S52等芯片进行系统控制。
利用IP网和串口进行通信。
实现了实时监控、实时温度控制、门禁系统等。
并且在娱乐方面利用了QT与FFMPEG开发了嵌入式视频播放器,支持的解码文件有H264、AVI、MPEG-4、3GP等。
而且提供了文本阅读、电子相册与主题变换等功能。
关键词:
智能家居;网络通信;实时监控;QT;FFMPEG
Abstract
Intelligenthouseholdisfortheplatform,andusingofcomprehensivehousingmutingtechnology,networkcommunicationtechnologyandintelligenthousehold-thesystemdesignschemesecuritypresentationtechnology,automaticcontroltechnology,audioandvideotechnologywillhouseholdliferelevantfacilitiesintegration,constructingefficientresidentialfacilitiesandfamilyaffairsoftheschedulemanagementsystemmanagementsystem,ascendinghouseholdsafety,convenience,comfort,artistic,andrealizeenvironmentalprotectionandenergysavinglivingenvironment.ThissystemUSESS3C2410,PXA270,AT89S52devicessuchaschipsforsystemcontrol.UsingIPnetsandserialinterfacecommunication.Realizethereal-timemonitoring,real-timetemperaturecontrol,entranceguardsystem,etc.AndinentertainmentuseQTFFMPEGdevelopedwiththevideoplayer,supportembeddeddocumentsareH264,decodingofAVI,mpeg-4,3GP,etc.Butalsoprovidestextreading,electronicalbumsandthemetransform,andotherfunctions.
Keywords:
Intelligenthousehold;networkcommunication;real-timemonitoring;QT;FFMPEG
第一章绪论
1.1智能家居的现状与开发意义
20世纪80年代初,随着大量采用电子技术的家用电器面市,住宅电子化(HE,HomenElectronics)出现。
80年代中期,将家用电器、通信设备与安保防灾设备各自独立的功能综合为一体后,形成了住宅自动化概念(HA,HomeAutomation)。
80年代末,由于通信与信息技术的发展,出现了对住宅中各种通信、家电、安保设备通过总线技术进行监视、控制与管理的商用系统,这在美国称为SmartHome,也就是现在智能家居的原型。
中国人口众多,城市住宅也多选择密集型的住宅小区方式,因此很多房地产商会站在整个小区智能化的角度来看待家居的智能化,也就出现了一统天下、无所不包的智能小区。
欧美由于独体别墅的居住模式流行,因此住宅多散布城镇周边,没有一个很集中的规模,当然也就没有类似国内的小区这一级,住宅多与市镇相关系统直接相连。
这一点也可解释为什么美国仍盛行ADSL、CableModem等宽带接入方式,而国内光纤以太网发展如此迅猛。
因此欧美的智能家居独立安装,自成体系。
而国内习惯上已将它当作智能小区的子系统考虑,这种做法在前一阶段应该是可行的,而且是实用的,因为以前设计选用的智能家居功能系统多是小区配套的系统。
但智能家居最终会独立出来成为一个自成体系和系统,作为住宅的主人完全可以自由选择智能家居系统,即使是小区配套来统一安装,也应该可以根据需要自由选择相应产品和功能、可以要求升级、甚至你对整个设计不感兴趣,完全可以独立安装一套。
2.2论文主要内容
本轮为围绕着基于物联网的智能家居的开发过程进行论述。
主要从软件方面进行详尽的描述并且涵盖了硬件的实施。
包括相关的移植和应用技术。
并且利用了IP网和串口进行通信。
主控部分是建立在操作系统之上,整个系统采用了LINUX。
LINUX是一个嵌入式平台十分优秀的操作系统。
这要可以保证家居系统的稳定运行。
各个功能模块采用物联网的思想进行构建。
每个模块若出现故障不会对其他部分造成影响。
这样保证了程序的可运行性。
第一章介绍了智能家居的现状和与当今的开发意义。
第二章主要从整体的软硬件构建流程进行详尽的描述。
将整体的流程图与说明结合。
从全局观察本系统的各个功能以及实现过程。
并且将Linux和QT的移植进行了简要的介绍。
第三章从技术角度将QT和FFMPEG构建的嵌入式播放器进行了表述。
包括FFMPEG及其应用库的移植,以及介绍了FFMPEG的API和播放器解码流程和逻辑结构。
第四章是介绍了安防监控系统。
基于QtNetwork和V4L的视频采集传输系统。
以及其与主控部分的通信。
第五章讲述了QT的MVC结构,以此来实现的多功能电子相册。
第六章简要的讲述了电子书的实现过程和原理。
第七章简明扼要的概括了本系统的优点以及特色。
附录部分展示了程序的主要部分源代码。
第二章智能家居的总体设计方案
2.1系统核心控制软件流程及其说明
图2-1智能家居系统控制流程图
现代智能家居系统,对于室内温度的控制要求比较高,比如夏天的温度要在26摄氏度左右才适合人体。
因此我们决定将温度控制在25至27摄氏度的范围内。
一旦温度升高,超过了27摄氏度,这时候空调将自动开启,进行制冷。
当传感器温度在27摄氏度以下时,空调停止工作。
由于空调对诗文的调节可能是非线性的。
并且传感器与空调的位置也可能会影响对于室温的控制。
这时候我们选择了25至27摄氏度这个范围内。
避免了受固定数值的影响。
因为如果将温度设定为一个固定的数值,将可能造成的结果是空调一直工作,不断地调整温度,反复的开关很可能损害空调的寿命,并且对于电力资源的消耗极大。
我们出于对环保的高要求考虑进行了以上调整
由于现代家居对于门禁系统有较高的要求,传统的钥匙已经不再能满足家庭的需求。
因此我们采用了门禁系统。
用户刷卡,然后由系统自动识别ID卡,是否开门等。
门禁系统的核心采用了AT89S52单片机来进行控制,通过传感器识别ID卡,然后进行判断,如果正确将进行开门。
如果不正确将保持关门状态。
这使得家庭的安全得到了保障。
此智能家居系统不但出于安全性的考虑增加了安防系统。
而且对于现代家庭的休闲放松还增加了娱乐功能。
有嵌入式播放器,电子相册,文本阅读等等功能,并且对于智能家居的控制系统主题提供了变换功能,不仅可以使用系统默认的主题,还可以根据用户的个人喜好,进行主题的变换。
图2-2智能家居核心控制软件流程
2.2Linux内核移植
对于PXA270这样的基于ARM10系列的CPU和S3C2410这样基于ARM9系列的CPU,支持内存管理单元,可以采用传统的Linux内核,对进程进行保护,提高了嵌入式系统中多进程的保护能力。
使用户应用程序的可靠性得以提高,降低了用户的开发难度。
现在的Linux版本为2.6.x,最新的内核已经升级到2.6.38,本系统采用了2.6.24内核版本。
所谓Linux移植就是把Linux操作系统针对具体的硬件平台做必要改写之后,安装到该目标平台使其正确的运行起来。
这个概念目前在嵌入式开发领域讲的比较多。
其基本内容是:
获取某一版本的Linux内核源码,根据我们的具体目标平台对这源码进行必要的改写(主要是修改体系结构相关部分),然后添加一些外设的驱动,打造一个适合于我们目标平台的新操作系统,对该系统进行针对我们目标平台的交叉编译,生成一个内核映象文件,最后通过一些手段把该映像文件烧写(安装)到我们目标平台中。
而通常对Linux源码的改写工作难度较大,它要求不仅对Linux内核结构要非常熟悉,还要求您对目标平台的硬件结构要非常熟悉。
同时还要求您对相关版本的汇编语言较熟悉因为与体系结构相关的部分源码往往是用汇编写的。
所以这部分工作一般由目标平台提供商来完成。
比如说针对目前嵌入式系统中最流行的ARM平台,它的这部分工作就是由英国ARM公司的工程师完成的,我们所要做的就是从其网站上下载相关版本Linux内核的补丁(Patch)。
把它打到我们的Linux内核上,再进行交叉编译就行。
其基本过程是这样的:
1)到ftp:
//ftp.arm.Linux.org.uk上下载Linux2.6.24内核及其关于ARM平台的补丁。
2)给Linux2.6.24打补丁。
3)准备交叉编译环境。
交叉编译环境工具链一般包括binutils(含AS汇编器,LD链接器等),arm-linux-gcc,glibc等。
4)修改内核目录下的makefile文件,主要是以下几行:
ARCH:
=$(shelluname–m|sed–es/i.86/i386/-es/sun4u/sparc64/-es/arm.\*/arm/-es/sa110/arm/)这一行。
ARCH:
=改为ARCH:
=arm
CROSS_COMPILE:
=改为CROSS_COMPILE=交叉编译工具中arm-linux所在目录/arm-linux-
例如:
CROSS_COMPILE=/opt/crosstool/arm-Linux/bin/arm-linux-
5)此后就可以进行编译。
6)以上可以使他在目标板上跑起Linux系统。
有了操作系统对于V4L,UDP,无线网卡等驱动就简单了很多。
并且多任务的调控完全交给了操作系统支配。
2.3QTEmbedded移植
Qt/Embedded的底层图形引擎完全依赖于FrameBuffer,因此在移植时需考虑目标平台的Linux内核版本和FrameBuffer驱动程序的实现情况,包括分辨率和颜色深度等在内的信息。
当前嵌入式CPU大多内部集成LCD控制器,并支持多种配置方式。
Qt/Embedded能够较好地根据系统已有的FrameBuffer驱动接口构建上层的图形引擎。
Qt/Embedded图形引擎中的图形绘制操作函数都是由源代码目录src/kernel/中的src/kernel/qgfxreaster_qws.cpp所定义的QgfxRasterBase类发起的声明。
对于设备更加底层的抽象描述,则在src/kernel目录qgfx_qws.cpp的Qscreen类中给予相应定义。
这些是对FrameBuffer设备直接操作的基础,包括点、线、区域填充、alpha混合和屏幕绘制等函数均在其中定义实现。
在FrameBuffer驱动程序调试通过后,配置Qt/Embedded的编译选项,可以保证Qt/Embedded的图形引擎正常工作。
Qt/Embedded中的输入设备,同样分为鼠标类与键盘类。
其中鼠标设备在源码目录中的src/kernel/qwsmouse_qws.cpp中实现,从该类中又重新派生出一些特殊鼠标类设备的实现类。
当然也可以根据具体的硬件驱动程序实现的接口,实现类似的接口函数。
Qt/Embedded中对于键盘响应的实际函数位于src/kernel/qkeyboard_qws.cpp
中,在qkeyboard_qws.h中,定义了键盘类设备接口的基类QWSKeyboardHandler。
具体的键盘硬件接口依然要建立在键盘驱动程序基础上,移植时需要根据键盘驱动程序从该类派生出实现类,实现键盘事件处理函数processKeyEvent()即可。
Qt/Embedded内部对于字符集的处理采用了UNICODE编码标准。
Qt/Embedded同时支持两种对于其他编码标准(如GB2312和GBK)的支持方式:
静态编译和动态插件装载。
通过配置config.h文件添加相应的编码支持宏定义,可以获得其他编码标准向UNICODE的转换支持,从而在Qfont类中得以转换与显示。
由于UNICODE涵盖了中文部分,所以Qt/Embedded对中文支持也非常好。
安装交叉编译工具链arm-linux-gcc3.4.1。
并设置环境变量
安装QT4.6forARM
./configure-makelibs-embeddedarm-xplatformqws/linux-arm-g++-qt-libjpeg-qt-zlib-qt-libpng-qt-freetype-little-endian-no-qt3support-no-libmng-no-mmx-no-sse-no-sse2-no-3dnow-no-openssl-no-webkit-no-qvfb-no-phonon-no-nis-no-opengl-no-cups-no-glib-no-xcursor-no-xfixes-no-xrandr-no-xrender-nomakeexamples-nomaketools-nomakedocs-nomakedemo-D__ARM_ARCH_5TEJ__
由于在系统中没有使用触摸屏,所以没有对tslib进行编译。
而是使用usb鼠标进行控制。
这样触摸屏与视频显示之间的冲突将可以避免。
第三章智能家居多功能娱乐系统
3.1基于QT和FFMPEG的嵌入式播放器
3.1.1FFMPEG简介
FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件)。
它提供了录制、转换以及流化音视频的完整解决方案。
它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的。
电影文件有很多基本的组成部分。
首先,文件本身被称为容器Container,容器的类型决定了信息被存放在文件中的位置。
AVI和Quicktime就是容器的例子。
接着,你有一组流,例如,你经常有的是一个音频流和一个视频流。
(一个流只是一种想象出来的词语,用来表示一连串的通过时间来串连的数据元素)。
在流中的数据元素被称为帧Frame。
每个流是由不同的编码器来编码生成的。
编解码器描述了实际的数据是如何被编码Coded和解码DECoded的,因此它的名字叫做CODEC。
Divx和MP3就是编解码器的例子。
接着从流中被读出来的叫做包Packets。
包是一段数据,它包含了一段可以被解码成方便我们最后在应用程序中操作的原始帧的数据。
根据我们的目的,每个包包含了完整的帧或者对于音频来说是许多格式的完整帧。
FFmpeg是一个集录制、转换、音/视频编码解码功能为一体的完整的开源解决方案。
FFmpeg的开发是基于Linux操作系统,但是可以在大多数操作系统中编译和使用。
FFmpeg支持MPEG、DivX、MPEG4、AC3、DV、FLV等40多种编码,AVI、MPEG、OGG、Matroska、ASF等90多种解码.
FFmpeg主目录下主要有libavcodec、libavformat和libavutil等子目录。
其中libavcodec用于存放各个encode/decode模块,
libavformat用于存放muxer/demuxer模块,
libavutil用于存放内存操作等常用模块。
FFMPEG常用的数据结构有:
AVFormatContext音视频文件输入和输出保存数据的结构
AVCodecContext保存AVCodec指针和与codec相关的数据
AVCodec编解码器信息
AVFrame帧
AVPacket包
AVPicture图像的存储格式
AVStream流结构
FFMPEG常用的接口函数有:
av_register_all();初始化函数
avcodec_find_decoder();查找解码器
avpicture_fill();初始化帧存储空间
img_convert();色彩变换
av_free_packet();释放包空间
av_free();释放解码空间
等等。
3.1.2FFMPEG及其编解码库的移植
FFMPEG本身支持多种音视频格式的编解码,但是有一些是需要在FFMPEG编译之前编译好,并且在配置的时候指明其库的路径。
而且FFMPEG的各个版本就间存在差异,接口函数并不完全统一。
因此,很难做到一次写代码不用修改的就在各个版本之间实现。
而且,FFMPEG的移植也会因交叉编译环境而产生不适应。
所以应该选合适的版本。
这次,我选用的是ffmpeg0.6,交叉编译环境是arm-linux-gcc3.4.6.主机gcc版本为4.2.3.
首先,需要在本机编译和移植以下库libfaad、libfaac、libx264、libxvid。
libfaadlibfaac、解码aac音频格式
libx264更优秀算法的符合H.264/MPEG-4AVC视频压缩编码标准格式的编码库
libxvid开放源代码的MPEG-4视频编解码器
FFMPEG交叉编译环境的配置如下
./configure\
--cross-prefix=/usr/local/gcc-3.4.6-glibc-2.3.6/arm-linux/bin/arm-linux---enable-shared\
--disable-static--disable-yasm--disable-armv6--disable-armv6t2--disable-armvfp--disable-asm
--disable-optimizations--disable-ffmpeg--disable-ffplay--disable-ffserver--disable-doc\
--disable-ffprobe--disable-network--target-os=linux--arch=arm--enable-libfaac\
--enable-libfaad--enable-libfaadbin--enable-libxvid--enable-libx264--enable-lib
make&&makeinstall
3.1.3FFMPEG解码流程
●注册全部文件格式和编解码器
●打开输入文件
●查找输入流
●确定输入的音频流和视频流
●打开音频、视频解码器
●初始化声卡设备,并打开声卡设备
●初始化解码所需空间开辟新的内存区域
●初始化图像缩放结构
●等待解码指令
●解码成功执行下一条,不成功退出
●判断包的数据类型,音频或者视频
●如果是音频,则解码并将数据写入到声音设备中
●如果是视频则将其保存在固定的内存地址中
●循环解码直至完毕,或者接受到终止指令
3.1.4基于Qt的嵌入式播放器的实现
在这部分中,需要写两个类,一个是QPlay,用于实现播放器的初始化和播放器的解码工作。
由于播放器需要实现文件的解码和图像的显示,并且能够接受鼠标的事件,所以对于QPlay类需要继承QThread。
使用多线程技术来实现解码工作。
类的声明如下:
classQPlay:
publicQThread
{
Q_OBJECT
public:
QPlay();
QPlay(char*);//带参数的构造函数,用于接收来自主线程的文件名
AVFormatContext*oc;
AVPacketpacket;
structSwsContext*sws;
AVCodecContext*pCodecCtx;
AVCodecContext*aCodecCtx;
AVCodec*pCodec;
AVCodec*aCodec;
AVFrame*pFrame;
AVFrame*pFrameRGB;
intaudioStream;
intvideoStream;
intfd;
unsignedinti;
intdatasize;
unsignedcharbuff[6000];//声音解码的工作空间
char*filename;
intnumBytes;
uint8_t*buffer;
intframeFinished;
QStringmaxtimestr;//视频文件的播放时长
intnb_index_entries;
floatmaxtime;
floatframetime;
floattimeframe;
floatnowtimetmp;
intnowtime;
intmax[4];
voidinit(char*inputfilename);
voidstop();
voidplay(inttimestamp);
boolinitok;
voidhalt();
boolisstop;
signals:
voidthreadstop();
voidvaluechange(int);
voidimagechanged(structSwsContext*);
voidstopright();
publicslots:
voidtime_out();
voidrightstop();
protected:
voidrun();
private:
volatileboolstopped;
};
核心解码部分
voidQPlay:
:
run(){
while(!
this->isstop){
usleep(28000);
if(av_read_frame(oc,&packet)<0){
this->nowtimetmp+=this->frametime;
this->nowtime=((int)this->nowtimetmp+0.5);
emitthis->threadstop();
return;
}
if(packet.stream_index==videoStream)
{
avpicture_fill((AVP
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 联网 智能家居 系统 设计 报告书