2022年物联网智能家居系统 .pdf
I 物联网工程(课程)工程技术文档项目名称物联网智能家居系统学院信息科学与技术学院专业班级计科 1 班小组第 6 小组组长王朋任课教师铁玲2014 年 1 月 14 日名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 14 页 - - - - - - - - - I 小组成员组长:王朋 (201110411122) 组 员 : 孙 波 (201110411121), 吴 明 天(201110411123) ,张杰 (201110411125) ,刘涛 (201110411120)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 14 页 - - - - - - - - - I 摘要智能家居系统是以住宅为平台,利用综合布线技术、网络通信技术、智能家居 -系统设计方案安全防范技术、 自动控制技术、 音视频技术将家居生活有关的设施集成,构建高效的住宅设施与家庭日程事务的管理系统,提升家居安全性、便利性、舒适性、艺术性,并实现环保节能的居住环境。利用IP 网和串口进行通信。实现了实时监控、实时温度控制、门禁系统等。并且在娱乐方面利用了QT 与 FFMPEG 开发了嵌入式视频播放器,支持的解码文件有H264、AVI 、MPEG-4、3GP 等。而且提供了文本阅读、电子相册与主题变换等功能。关键词:智能家居;网络通信;实时监控;QT;FFMPEG名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 14 页 - - - - - - - - - I 目录摘要. I一. 设计目的 . I二 实现环境 . I三 设计方案 . II 系统核心控制软件流程及其说明. II Linux 内核移植 . III 四. 实现代码 . V 基于 Qt 的嵌入式播放器的实现. V FFMPEG 及其编解码库的移植 . VIII 五 运行结果 . VIII 参 考 文 献 . IX 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 14 页 - - - - - - - - - I 一. 设计目的随着大量采用电子技术的家用电器面市,住宅电子化(HE,Homen Electronics )出现。80 年代中期, 将家用电器、 通信设备与安保防灾设备各自独立的功能综合为一体后,形成了住宅自动化概念(HA, Home Automation ) 。80 年代末,由于通信与信息技术的发展,出现了对住宅中各种通信、家电、安保设备通过总线技术进行监视、控制与管理的商用系统,这在美国称为Smart Home ,也就是现在智能家居的原型。中国人口众多,城市住宅也多选择密集型的住宅小区方式,因此很多房地产商会站在整个小区智能化的角度来看待家居的智能化,也就出现了一统天下、无所不包的智能小区。欧美由于独体别墅的居住模式流行,因此住宅多散布城镇周边,没有一个很集中的规模,当然也就没有类似国内的小区这一级,住宅多与市镇相关系统直接相连。这一点也可解释为什么美国仍盛行ADSL 、Cable Modem 等宽带接入方式,而国内光纤以太网发展如此迅猛。因此欧美的智能家居独立安装,自成体系。而国内习惯上已将它当作智能小区的子系统考虑,这种做法在前一阶段应该是可行的,而且是实用的,因为以前设计选用的智能家居功能系统多是小区配套的系统。但智能家居最终会独立出来成为一个自成体系和系统,作为住宅的主人完全可以自由选择智能家居系统,即使是小区配套来统一安装,也应该可以根据需要自由选择相应产品和功能、可以要求升级、甚至你对整个设计不感兴趣,完全可以独立安装一套。二实现环境本轮为围绕着基于物联网的智能家居的开发过程进行论述。主要从软件方面进行详尽的描述并且涵盖了硬件的实施。包括相关的移植和应用技术。并且利用了IP 网和串口进行通信。主控部分是建立在操作系统之上,整个系统采用了LINUX 。LINUX 是一个嵌入式平台十分优秀的操作系统。这要可以保证家居系统的稳定运行。 各个功能模块采用物联网的思想进行构建。每个模块若出现故障不会对其他部分造成影响。这样保证了程序的可运行性。 从全局观察本系统的各个功能以及实现过程。并且将Linux 和 QT 的移植进行了简要的介绍。从技术角度将QT 和 FFMPEG 构建的嵌入式播放器进行了表述。包括FFMPEG 及其应用库的移植,以及介绍了 FFMPEG 的 API 和播放器解码流程和逻辑结构。安防监控系统。基于QtNetwork 和 V4L名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 14 页 - - - - - - - - - II 的视频采集传输系统。以及其与主控部分的通信。使用QT 的 MVC 结构,以此来实现的多功能电子相册。三设计方案系统核心控制软件流程及其说明智能家居核心控制博创 PXA270UP-START2410视频监控模块下位机温湿度采集门禁系统家具设备空调系统ID 卡读取正确电灯窗帘图 2-1 智能家居系统控制流程图现代智能家居系统, 对于室内温度的控制要求比较高,比如夏天的温度要在26 摄氏度左右才适合人体。 因此我们决定将温度控制在25至 27 摄氏度的范围内。 一旦温度升高, 超过了 27 摄氏度,这时候空调将自动开启,进行制冷。当传感器温度在27 摄氏度以下时,空调停止工作。由于空调对诗文的调节可能是非线性的。并且传感器与空调的位置也可能会影响对于室温的控制。 这时候我们选择了25至 27 摄氏度这个范围内。 避免了受固定数值的影响。 因为名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 14 页 - - - - - - - - - III 如果将温度设定为一个固定的数值,将可能造成的结果是空调一直工作,不断地调整温度, 反复的开关很可能损害空调的寿命,并且对于电力资源的消耗极大。 我们出于对环保的高要求考虑进行了以上调整由于现代家居对于门禁系统有较高的要求,传统的钥匙已经不再能满足家庭的需求。因此我们采用了门禁系统。用户刷卡,然后由系统自动识别ID 卡,是否开门等。门禁系统的核心采用了 AT89S52单片机来进行控制,通过传感器识别ID 卡,然后进行判断,如果正确将进行开门。如果不正确将保持关门状态。这使得家庭的安全得到了保障。此智能家居系统不但出于安全性的考虑增加了安防系统。而且对于现代家庭的休闲放松还增加了娱乐功能。有嵌入式播放器, 电子相册, 文本阅读等等功能,并且对于智能家居的控制系统主题提供了变换功能,不仅可以使用系统默认的主题,还可以根据用户的个人喜好,进行主题的变换。菜单栏功能栏功能选择按键功能翻页按键选定功能栏与当前功能栏号相等返回事件循环与当前功能栏号不能根据功能栏号选择显示的功能栏图 2-2 智能家居核心控制软件流程 Linux内核移植所谓 Linux 移植就是把Linux 操作系统针对具体的硬件平台做必要改写之后,安装到该目标平台使其正确的运行起来。这个概念目前在嵌入式开发领域讲的比较多。其基本内容是:获取某一版本的Linux 内核源码,根据我们的具体目标平台对这源码进行必要的改写(主要是修改体系结构相关部分),然后添加一些外设的驱动,打造一个适合于我们目标平台的新操作系统, 对该系统进行针对我们目标平台的交叉编译,生成一个内核映象文件,最后通过一些手段把该映像文件烧写(安装)到我们目标平台中。而通常对Linux 源名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 14 页 - - - - - - - - - IV 码的改写工作难度较大,它要求不仅对Linux 内核结构要非常熟悉,还要求您对目标平台的硬件结构要非常熟悉。 同时还要求您对相关版本的汇编语言较熟悉因为与体系结构相关的部分源码往往是用汇编写的。 所以这部分工作一般由目标平台提供商来完成。比如说针对目前嵌入式系统中最流行的ARM 平台,它的这部分工作就是由英国ARM 公司的工程师完成的,我们所要做的就是从其网站上下载相关版本Linux 内核的补丁( Patch) 。把它打到我们的Linux 内核上,再进行交叉编译就行。QT Embedded移植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对中文支持也非常好。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 14 页 - - - - - - - - - V 四. 实现代码基于 Qt 的嵌入式播放器的实现在这部分中,需要写两个类,一个是QPlay,用于实现播放器的初始化和播放器的解码工作。 由于播放器需要实现文件的解码和图像的显示,并且能够接受鼠标的事件, 所以对于 QPlay类需要继承 QThread。使用多线程技术来实现解码工作。类的声明如下:class QPlay :public QThread Q_OBJECT public: QPlay(); QPlay(char *); /带参数的构造函数,用于接收来自主线程的文件名AVFormatContext *oc; AVPacket packet; struct SwsContext *sws; AVCodecContext *pCodecCtx; AVCodecContext *aCodecCtx; AVCodec *pCodec; AVCodec *aCodec; AVFrame *pFrame; AVFrame *pFrameRGB; int audioStream; int videoStream; int fd; unsigned int i; int datasize; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 14 页 - - - - - - - - - VI unsigned char buff6000; /声音解码的工作空间char *filename; int numBytes; uint8_t *buffer; int frameFinished; QString maxtimestr; /视频文件的播放时长int nb_index_entries; float maxtime; float frametime; float timeframe; float nowtimetmp; int nowtime; int max4; void init(char *inputfilename); void stop(); void play(int timestamp); bool initok; void halt(); bool isstop; signals: void threadstop(); void valuechange(int); void imagechanged(struct SwsContext *); void stopright(); public slots: void time_out(); void rightstop(); protected: void run(); private: 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 14 页 - - - - - - - - - VII volatile bool stopped; ; 核心解码部分void QPlay:run() while(!this-isstop) usleep(28000); if(av_read_frame(oc,&packet)nowtimetmp+=this-frametime; this-nowtime=(int)this-nowtimetmp+0.5); emit this-threadstop(); return; if(packet.stream_index=videoStream) avpicture_fill(A VPicture *)pFrameRGB,buffer,PIX_FMT_RGB24,pCodecCtx-width,pCodecCtx-height); avcodec_decode_video(pCodecCtx,pFrame,&frameFinished,packet.data,packet.size); /解码视频 if(packet.stream_index=audioStream) datasize=FFMAX(packet.size*sizeof(*buff),AVCODEC_MAX_AUDIO_FRAME_SIZE); avcodec_decode_audio2(aCodecCtx,(int16_t*)buff,&datasize,packet.data,packet.size); write(fd,buff,datasize); this-nowtimetmp+=this-frametime; this-nowtime=(int)this-nowtimetmp+0.5); emit this-valuechange(this-nowtime); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 14 页 - - - - - - - - - VIII emit this-stopright(); FFMPEG及其编解码库的移植FFMPEG 本身支持多种音视频格式的编解码, 但是有一些是需要在FFMPEG 编译之前编译好,并且在配置的时候指明其库的路径。而且FFMPEG 的各个版本就间存在差异,接口函数并不完全统一。因此,很难做到一次写代码不用修改的就在各个版本之间实现。而且,FFMPEG 的移植也会因交叉编译环境而产生不适应。所以应该选合适的版本。这次, 我选用的是 ffmpeg0.6, 交叉编译环境是arm-linux-gcc3.4.6.主机 gcc版本为 4.2.3. 首先,需要在本机编译和移植以下库libfaad、libfaac、libx264、libxvid 。libfaad libfaac、解码 aac音频格式libx264 更优秀算法的符合H.264/MPEG-4 AVC 视频压缩编码标准格式的编码库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 & make install 五运行结果名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 14 页 - - - - - - - - - IX 参 考 文 献1 Jong Bong Lee. Smart home digitally engineered domestic lifeJ. LecturePersonal and Ubiquitous Computing, 2003, 7(20): 189196 2Orpwood,R.Gibbs,C.Adlam.Thedesignofsmarthomesforpeoplewithdementiauserinterfac easpeets,UniversalAeeessintheInformationSoeiety,2005.2(4):156一164 3 李程. 基于嵌入式智能家居系统的研究D. 电子科技大学 ,2006年4 周立功 .ARM嵌入式系统基础教程 M. 北京: 北京航空航天大学出版社 ,2005. 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 14 页 - - - - - - - - - X 5 魏忠编 . 嵌入式开发详解 M. 北京: 电子工业出版社 ,2003:2544 6 曾宏安 . 嵌入式 Linux c语言开发 M. 北京: 人民邮电出版社 ,2009 8 宋宝华 .Linux设备驱动开发详解 M. 北京: 人民邮电出版社 .2008 9 Jong Bong Lee. Smart home digitally engineered domestic lifeJ. LecturePersonal and Ubiquitous Computing, 2003, 7(20): 189196 10 魏永明 , 耿岳, 钟书毅译 .Linux 设备驱动 (第三版 )M. 北京: 中国电力出版社 .2006 11 陈莉君 , 康华译 .linux内核设计与实现 M. 北京: 机械工业出版社 .2011 12 陈莉君 , 张琼声 , 张宏伟译 .Linux内核详解 M. 北京: 中国电力出版社 .2007 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 14 页 - - - - - - - - -