智能家居远程集控系统方案思考

嵌入式ARM 2019-04-12 15:14

授权转载自公众号:嵌入式IoT


1.简介


物联网近几年的发展非常的火热,各种智能设备的出现使得智能家居的发展越来越快。虽然发展火热,却没有统一的标准,所以智能家居监控系统需要一种稳定统一的解决方案。


本系统主要是利用Exynos4412开发板作为开发环境,借助Linux操作系统来实现软件上的需求,通过WIFI连接互联网,然后在嵌入式系统上搭建BOA服务器,通过移植MJPG-streamer软件采集摄像头数据。用户只需要在电脑或者手机上通过浏览器访问集成控制系统页面,可实现对摄像头的实时监控和对LED的控制。


本文完成了智能家居监控系统的整体设计,采用硬件结合,软件设计和系统整体调试。根据开发的需要,各部分功能协调,交叉的进行,实现一种高效稳定的物联网智能家居监控系统的解决方案。


1.1 研究意义及背景


随着网络技术和各种智能设备技术的不断发展,智能家居也与随着时代的变化而不断发展进步,尤其是万物互联使得智能家居进入千家万户成为可能。利用一个家庭网关可以控制家里的一切,而且还可以采集到用户生活习惯的信息,结合大数据,提供更加人性化的服务,这是时代的进步也是科技给人们生活带来的便捷。


物联网智能家居监控系统研究的意义在于如何提高人们的生活水平,同时对人们的生产生活方式的转变也带来很大的改变。当没人在家时,如果忘记了关掉家里的一些电器,此时只需要一台能够上网的电脑或者拿出手机,登录智能家居远程集控系统,就可以轻松的掌握家里的一切情况,同时控制各种电器的使用。如果需要时时观察家里的情况,还可以打开摄像头,看家里情况,这样有利于照顾家里的老人和小孩。


从宏观上来说,智能家居监控系统可以帮助人们更好的生活,减少电量的损耗,对于实现国家建设资源节约型,环境友好型社会有好处,同时可以预防火灾,小偷等突发事件的发生,维护公共安全有很大的好处。所以,智能家居监控系统的研究是很要必要的,也是未来发展的趋势。


1.2 国内外的发展趋势


智能家居的概念第一次被提出是在1984年,当时在对一幢楼层进行改造,在该楼层里的各种设备进行智能家居的设计,达到能够进行控制的效果。这样,智能家居的概念就第一次被提出来了。智能家居从出现到现在,研究在不断的进行,各个国家也在智能家居的概念上提出新的见解和思路,这个概念的总体目标是:将家庭的一切设备通过总线相连,然后交给一个智能控制系统,通过这个控制系统就能呢个很好的掌控家里的一切环境,并且可感知外部环境的变化,让居住环境和人更好的协调相处。


智能家居是物联网细分领域发展较好的行业,有研究机构发布报告预测,智能家居在未来几年将迅速增长,特别是智能家居设备制造行业和服务行业。在这样大市场下,全球很多的大型企业都将未来的战略定在智能家居市场,包括谷歌、苹果、三星以及国内小米、华为、BAT等各大科技公司,都已瞄准智能家居这一新风口。去年我国智能家居市场规模预计突破1200亿,智能家居的发展形式十分乐观,也将在不久的将来走进千家万户。目前国内的智能家居发展主要的瓶颈在于各大厂商都只是生产单品,没有统一的制定统一的标准,导致很多模块不能在集中控制,同时,智能家居的安全性也有待提高,解决这些难题是智能家居发展的必要之路。


ORVIBO的CEO王雄辉认为,在三年之内智能家居将会有比较大的发展,即使不同的产品也能相互联通,形成一整套的集控解决方案,以及通过智能家居“服务云”的方式打通,这种方式将会淘汰很多小规模的生产厂商,最终形成统一的标准,达到一个集控系统可以控制家庭各种设备的目的。随着大数据的发展,生物智能,指纹安全,人脸检测,语音分析等技术的不断发展,未来的智能家居交互将会越来越友好,越来越智能,物联网资深人士杨剑勇也表示,在不久的将来,智能家居也会更加方便人们的生产生活,随着电脑技术和网络技术发展,人工智能应用智能家居设备中将发挥巨大价值,通过对大数据的处理,准确的分析出人们的需求,能够在生活中替人们解决一些问题。


1.3 本系统的主要任务


本系统主要利用Exynos4412开发板搭建家庭网关服务器。通过适配硬件,移植软件,设计网页等三个方面进行设计。


(1)适配硬件


本文主要使用的是USB2.0的摄像头,同时用LED灯模拟家庭的照明和家电控制系统。


(2)软件移植


该文的软件部分主要包括Linux操作系统内核的定制,根据需求来添加或者移除相应的驱动。同时还包括Linux根文件系统的制作与移植,移植BOA服务器,移植MJPG-streamer网络摄像头驱动,编写LED的驱动程序和应用程序,来模拟家庭一些电器设备,最后是整体综合分析。


(3)网页设计


在网页设计上采用html语言编写静态的网页,在样式上采用CSS3样式,整体设计界面风格看起来优雅简洁,美观大方。同时为了实现动态交互的效果,还要应该用到JavaScript。最后用cgi来编写控制开发板上的LED的控制程序。


2. 总体方案设计


2.1 总体设计


根据系统要求,本智能家居控制系统采用ARM Cortex-A9 处理器作为核心处理器,在开发板上搭载WIFI模块,USB摄像头模块。同时移植BOA服务器作为网页处理服务器。在MJPG-streamer上将摄像头采集到的视频数据实时显示在网页上。总体设计方案如下图2-1所示:


图2-1 智能家居监控系统的整体构成


2.2 硬件方案


本系统硬件部分用Itop4412开发板为核心,外接WIFI模块和USB摄像头模块,该开发板采用Exynos4412的主芯片,并且配置2GB双通道DDR3的内存,在系统的运行速度上比较快,适合处理大量数据的系统。


加上配置16GB的存储,也让本开发板有着更大的存储空间,对视频数据的保存和相关配置信息存储具有重要作用。在摄像头的选择上采用免驱摄像头,该摄像头可以直接插在开发板的USB插座上,只需要将数据通过USB线传输到ARM芯片上,在处理器上进行数据的处理。与此同时,在开发板上的GND,GPJ1(3),GPJ1(2),GPJ0(7),GPJ0(2),GPJ0(3),GPJ0(6)这七个引脚配置对应的模式,由于输出的电压为1.7V,所以可以驱动LED。利用杜邦线连接到另一块板子上,用来模拟家庭被控制的智能设备。


Exynos4412开发板简介


为了保证USB摄像头视频采集的清晰度较高,也为了让智能家居远程监控系统的性能更加稳定。必须要采用性能比较高的处理器作为开发平台。


本系统采用Exynos4412的主芯片,该芯片功能强大,性能好,适用于要求系统具有高稳定性,高可靠性和很好地处理性能的场合。对于智能家居监控系统而言,用户需要很好地体验效果,所以就必须保证系统的稳定和可靠。选用Exynos4412的芯片对于该课题而言是个很好地选择。既满足了设计上的要求,在价格方面也很合理。实物图如下图2-2所示:


图2-2  Exynos4412核心板外观图


Exynos 4412芯片是三星发布的Cortex A9第二代中的其中一款,由于其性能比较高,也比较省电,所以在三星和魅族手机上都可以看到这款芯片的使用。


该芯片的主要特点是采用三星自家的电源管理芯片,在测试过程中表现非常好,不论是发热的控制,还是电能的损耗都控制的非常合理。更重要的是可适配802.11b/g和802.11n的WIFI模块,这样可以让数据传输的更加迅速高效。同时,该芯片还可以根据需求来适配各种硬件,外设扩展十分丰富。


无线连接四合一单芯片MT6620模块


联发科技MT6620在单芯片中整合了FM收发器、GPS、蓝牙4.0+HS和802.11n Wi-Fi这四种功能,由于其性能强大,四合一的芯片MT6620在手机使用比较广泛,与此同时在封装尺寸以及低功耗方面的优势,让开发产品的时间大大缩短。这样让很多便携式设备,包括手机、平板、PAD、PSP等设备具有联网的功能。


MT6620 模块采用先进复杂的无线电共存算法,在硬件架构的设计上也采用比较先进的技术,在各种音频,视频,图像数据的传输上占有很大的优势。联发科技独家Symphony™软件包,对于Android操作系统上先进的无线连接功能有很好的支持,这种良好的特性使得这个模块具有很大的优势。


联发科技MT6620支持很多无线连接标准,也对Wi-Fi标准支持特性很好,由于多种传输的协议使得该芯片有着很高的性价比,在数据传输速度上也比较理想。与此同时,该芯片还支持蓝牙和FM 无线电收发器。本系统采用该模块作为WIFI连接互联网的模块,可具有很高的性能。实物图如下图2-3所示。


图2-3  MT6620核心板外观图


Web摄像头视频采集模块


本文选用的是网络摄像头,也叫WEBCAM ,WEB CAMERA是一种结合了摄像头和网络压缩技术的一种新型摄像头,通过这种摄像头,可以将数据通过网络来传输,更重要的是,这种摄像头使用起来十分简单,将网络摄像头连接到电脑的USB端口,打开网络浏览器就可以浏览摄像头采集到的图像信息了。


网络摄像头主要是将采集的视频数据进行压缩加密后传到电脑上,电脑开启服务器,将传过来的信息通过局域网,因特网或者无线网络传递到用户终端上。远程客户端用户在能上网移动设备或者PC上通过浏览网页,就可以实现对现场状况的时时监控。在需要监控录像的场合用处较大。由于其使用简单,图像清晰,所以在很多地方都使用这种摄像头。下图2-4是网络摄像头的实物图。


图2-4  网络摄像头实物图


2.3 软件方案


本设计的重点主要是软件的编写,软件主要从以下几个方面进行设计。首先是选用什么样的操作系统作为开发环境,由于Linux具有开源而且功能强大的特点,更重要的是他的网络功能十分强大,选择Linux作为本文的系统非常合适。然后在Linux操作系统上搭载网络服务器,通过服务器将数据传输出去,在手机或者电脑上访问对应的网页,就可以检测到摄像头捕捉到的视频画面。也可以将用户发过来的控制指令进行解析,通过ARM处理器控制外围设备,达到远程控制的目的。上位机采用前端开发语言和cgi来进行设计,用户只需要点击按钮或者开关,就可以达到控制的目的。


Linux开发环境的搭建


Linux操作系统是由全世界Linux爱好者共同维护,并且将源码开源在互联网上,在网上由各种程序员进行维护和管理,目前已经是最为流行的一款开放源代码的操作系统。由于其开源的特点,越来越多的程序员自发的维护着这个系统。从1991年Linux的出现到现在,该系统的安全性和实用性正在不断的加强,并且逐渐发展已经成为一个有创造力的操作系统。在服务器市场上,Linux也越来越扮演着重要的作用。在中国市场上,Linux操作系统的作用也越来越重要,很多国产的操作系统也基于Linux内核进行设计和修改。目前比较热门Android手机也用到Linux操作系统。Linux在嵌入式领域也起到举足轻重的作用,由于其系统的稳定和安全,更重要的是需要的硬件资源配置要求不高,使得Linux操作系统很适合做一些嵌入式的项目。


本系统采用的开发环境是Linux,所以必须在Linux的主机上进行相关软件的开发工作。为了设计的方便,采用VMware Workstation 12 Player虚拟机上安装一个ubuntu的操作系统来进行相关源代码的编译。


对于一个基本的Linux的体系结构包括用户层和内核层,底层主要利用内核驱动来控制硬件,上层利用函数库连接内核空间,然后通过应用层来起到控制硬件的作用,Linux的体系结构如下图2-5所示:


图 2-5  Linux的体系结构


根据Linux操作系统的体系结构的特点,Linux操作系统具有很好的耦合性,所以其底层的硬件可以根据内核配置来裁剪。由于我们用到了MT6620模块和网络摄像头的模块,所以将这两个设备的驱动配置进Linux内核之中。

首先先将网络摄像头V4L USB驱动加入到内核中。


在这个过程中,用cd命令进入到内核源码目录,查找到相应的目录后,在控制台窗口输入make menuconfig 命令,可以进入一个图形的配置界面,该界面可以直观的配置内核。


然后根据需求选择Device Drivers --->,点击Mutimedia support --->进入多媒体支持选项,然后在Video capture adapters --->中然后选择V4L USB devices  --->,进入到VL4 USB驱动的目录,现在只需要将V4L USB devices  --->的前面设置成[*],表示直接编译进内核。如图2-7所示:


图2-7 配置USB摄像头驱动


然后将MT6620 WIFI模块的驱动编译进内核。


选择Device Drivers ---> 进入设备驱动选项,选择MediaTek Connectivity Combo Chip Support 将MediaTek Connectivity Combo Chip Support前面设置成[*],这样就把WIFI模块驱动编译到内核里面了,如下图2-8所示:


图2-8 配置WIFI模块


按照上面的步骤裁剪好Linux内核驱动硬件后,就可以返回到源码目录,用管理员root权限开始制作内核文件。配置好驱动信息后就可以开始生成内核文件了。最后将生成的zImage内核镜像文件下载到开发板上。这样一个完整的内核就制作完成了。


Linux操作系统根文件系统的移植


根文件系统是一种文件系统,但是却不同于普通的文件系统,它需要保存Linux启动时的一些配置信息,包括开发板的ip地址,或者一些开机自动启动的一些进程等,无论是程序还是文件,都放在其对应的目录结构之下。内核文件的代码也放在根文件系统中,在开机启动时,会将初始化的脚本和一些重要的程序放在内存中去执行。


根文件系统在本中的作用十分重要,除了挂载BOA服务器外,很多程序和shell脚本都放在相应的目录中,对于后期程序的执行有着十分关键的作用,并且在内核启动的过程中执行一些初始化的脚本。在系统启动时会自动挂载一些操作文件夹。其中包括以下常见的文件夹。下图2-9是一些常见目录结构。


图2-9 常见的Linux根文件系统目录结构


BusyBox 是制作根文件系统有一个比较好的工具,它可以根据需求来配置根文件系统的文件和目录。这个工具里集成了一些比较好用的工具,BusyBox 有一些常用的命令像ls、echo和vi等一些比较常用的命令,这些命令对于大多数的Linux系统操作都能够满足要求,除此之外还包括一些强大的工具软件,像telnet、grep、find、mount等命令,这些命令丰富了嵌入式Linux的功能,使功能更加齐全。


所以BusyBox有着十分强大的功能,在制作根文件系统时利用这个工具就可以根据需求制作一个完整的根文件系统。在本文中,主要利用BusyBox来制作根文件系统,首先将BusyBox安装在宿主机上,在控制台输入指令sudo apt-get install busybox。此时该程序安装在/bin目录下,然后安装源目录,源目录的作用为了编译这个根文件系统的一些源代码,每一个指令实际上就是一段程序。最后安装libncurses-dev,输入指令sudo apt-get install libncurses-dev。进过这三步,一个完整的BusyBox文件系统就在宿主机上搭建起来了,接下来是配置BusyBox。


配置根文件系统时,如果要用图形界面,就可以直观的配置BusyBox。首先进入配置界面,如下图2-10所示:


图2-10 配置BusyBox


由于根文件系统是运行在开发板上,所以需要指定对应的ARM交叉编译器,配置交叉编译器如下图2-11所示:


图2-11 选择交叉编译环境


然而,此时的根文件系统还不是很完整,需要增加几个目录才能称为完整的根文件系统,必须的目录有mnt,用来挂载外界的磁盘或者可移动的设备,还有lib目录,用来存放系统必须的库函数,还有专门存放配置的etc目录等。


交叉编译环境的搭建


交叉编译环境的搭建首先将交叉编译工具移植到宿主机上,解压到指定的目录,此时,宿主机上就能够使用交叉编译函数的库。目的是让开发板上的内核、根文件系统以及可运行的程序都用同一种gcc来进行编译。然后根据下载的交叉编译的gcc设置系统的环境变量,将放置交叉编译工具的目录添加到系统环境之中。


本文的开发环境是利用虚拟机上搭载ubuntu系统,在ubuntu系统上配置gcc4.4.1版本,然后将环境变量添加进去,这样就完成了交叉编译环境的搭建。


BOA服务器的搭建


BOA是在嵌入式里比较常用的一种服务器,其功能比较强大,底层是由C语言来编写服务端,所以占用资源比较少。功能上对于处理一般的问题是足够的。在动态页面的管理上也能很好的支持。当客户通过浏览器来访问时,就可以借助这个BOA服务器实现网页与硬件的交互,达到控制的目的。具体移植过程如下:


(1)BOA服务器官网上下载源码压缩包,将压缩包进行解压,然后进行编译。

(2)将编译好的配置文件复制到根文件系统的/etc目录中。

(3)建立主要的文件结构,不同的文件夹有着不同的功能,将网页源码放在/www目录下,动态的处理代码和函数放在/www/cgi-bin目录中,其他的文件就放在/var目录中,这样就能很好的保持程序各个部分的分工明确。

(4)修改配置文件,指定对应的文件和网页源码文件对应的目录。

(5)将编译好的BOA极其文件夹转移到开发板上,然后开启BOA服务即可。

可以通过手机或者可上网设备连接开发板上的ip地址,就可以在设备上看到我们刚放在服务器上的网页的效果。具体的效果如下图2-12所示:


图2-12 BOA服务器效果展示


MJPG-streamer的移植


MJPG-streamer是网上的一种比较通用的网络摄像头的一种处理程序,它的功能很强大,可以直接把网络摄像头的视频数据通过无线网或者有线网传到客户端的浏览器上,用户只需要浏览网页就可以看到采集到的视频信息。本文采用的是MJPG-streamer结合BOA服务器的方式来实现远程智能家居的监视与控制。其具体移植过程如下:


首先在官网下在MJPG-streamer的源代码,解压到宿主机的指定的目录。指定交叉编译工具./configure --prefix=/home/vmuser  --host=ARM-none-Linux-gnueabi,在完成上述操作后就可以进行源码的最后编译了。


GPIO口的配置使用


该程序主要的部分是如何配置并且使用ARM板的硬件资源,通过配置GPIO口的使用方式,配置成输出模式。该部分主要作用就是对ARM引脚的使用进行配置。然后在远程监控系统上进行控制。


首先,在内核源码目录中对GPIO引脚进行申请,将没有使用的GPIO引脚释放,然后使用vim include/Linux/gpio.h打开文件。查找到该函数对应的硬件引脚的连接,最后编写对应引脚的驱动程序。该程序主要使用的是开发板上的GND,GPJ1(3),GPJ1(2),GPJ0(7),GPJ0(2),GPJ0(3),GPJ0(6)这八个引脚。在对ARM引脚使用时必须使用相应的驱动程序来控制底层。所以先写驱动程序来配置引脚。


驱动函数框架


对于智能家居控制系统而言,主要是利用弱电控制强电的方法,一般只需要操作引脚输出一个比较小的电压,然后通过继电器来起到控制家庭电器开关的作用。所以核心的功能是让ARM引脚根据特定的环境产生一个输出信号。本文主要是采用LED来模拟家庭里的各种电器设备。


Linux的驱动函数主要作用是连接硬件资源,然后将资源交给用户空间来管理。应用层主要的作用就是操作这些驱动函数,从而达到控制硬件的作用。Linux系统函数的整体特点如下图2-13所示:


图2-13 Linux系统函数的整体特点


在Linux操作系统中,其驱动函数主要包括入口函数,出口函数,内核空间到用户空间的映射函数这几个方面,所以在明确功能的情况下来配置驱动函数。Linux系统函数的控制方式如下图2-14所示:


图2-14 Linux系统函数控制方式


驱动函数的入口函数


在Linux用insmod命令安装一个驱动后,会在/dev目录上创建一个节点,而这个节点的控制就是内核空间到用户空间的一种方式。当安装驱动时,会自动进入驱动函数的入口处。入口函数主要的作用是注册一个设备,并且分配设备号。进入到驱动函数入口函数时,首先要注册设备,再在内核空间创建设备号。本文采用的是字符设备驱动程序,所以借助杂项设备类即可实现,下面是GPIO驱动的入口函数。


/*函数的入口*/static int my_dev_init(void){
/*注册设备*/ major=register_chrdev(0,"mydev",&fops); //自动创建设备号 myclass=class_create(THIS_MODULE,"mydev"); if(IS_ERR(myclass)) { /*错误的创建杂项设备的类*/ return -1; } mydevice=device_create(myclass,NULL,MKDEV(major,0),NULL,"mydev"); printk("mydev ok!"); return 0;
}


驱动函数的框架


在注册设备,调用register_chrdev函数时,分配一个fops结构体,这个结构体主要用来操作底层的硬件,并且和应用层的函数一一对应。所以先编写出这个结构体框架,然后再完善函数功能。


/*写出驱动的框架*/struct file_operations fops={    .owner=THIS_MODULE,    .open=my_open,    .read=my_read,    .write=my_write,    .release=my_release,};

在本文中,用到的比较重要的两个函数是my_open和my_write两个函数。


/*打开设备*/static ssize_t my_open(struct inode *inode, struct file *file){    int ret;    int i;    for(i=0; i<6; i++)    {                //申请6个gpio口        ret = gpio_request(my_gpios[i], "LED");        if (ret) {            return ret;        }        s3c_gpio_cfgpin(my_gpios[i], S3C_GPIO_OUTPUT);//将引脚设置为输出模式        gpio_set_value(my_gpios[i], 1);    }    return 0;}


在open函数中,主要是申请使用这六个gpio引脚,然后将这六个引脚设置成输出模式,并且设置成高电平。


static ssize_t my_write(struct file *file, const char __user *in,             size_t size, loff_t *off){
int abc; copy_from_user(&abc,in,sizeof(abc)); switch(abc) { case 1: gpio_set_value(my_gpios[0], 1); break; case 2: gpio_set_value(my_gpios[0], 0); break; case 3: gpio_set_value(my_gpios[1], 1); break; case 4: gpio_set_value(my_gpios[1], 0); break; case 5: gpio_set_value(my_gpios[2], 1); break; case 6: gpio_set_value(my_gpios[2], 0); break; case 7: gpio_set_value(my_gpios[3], 1); break; case 8: gpio_set_value(my_gpios[3], 0); break; case 9: gpio_set_value(my_gpios[4], 1); break; case 10: gpio_set_value(my_gpios[4], 0); break; case 11: gpio_set_value(my_gpios[5], 1); break; case 12: gpio_set_value(my_gpios[5], 0); break; default: break; }
return size;}


本函数中将用户空间传递过来的值进行判断,不同的数字对应着不同的操作,从而达到控制硬件的目的。


应用层函数的编写


应用层主要是控制逻辑,不需要关心底层驱动如何控制。在Linux系统中只需要将设备当成文件操作即可。实际上编写应用函数只需要关心写什么数据就可以达到什么效果,所以大大简化了操作的难度。这也是Linux将驱动层和应用层分开的一个好处。操作方式可以总结为为打开设备,向设备读数据或者写数据,关闭设备,这三个步骤。用open函数打开fd=open(LEDs,O_RDWR|O_RDONLY|O_NONBLOCK)),打开设备后就可以操作该文件的读写函数了,本文主要用到写函数write中向设备里写数据,这样达到控制的目的,最后close(fd)关闭设备文件。


3.监控系统平台的客户端


本文的控制平台主要是利用浏览器,在电脑或者手机的浏览器上输入相应的ip地址就可以进入后台管理系统。而用户只需要操作网页上的相应的链接即可达到控制的目的。利用网页的最大好处就是可以随时随地的利用各种能上网的平台控制家庭的各种设备。Web前端采用html语言来展示,同时利用cgi对后端的服务器进行控制。


3.1 登录界面的设计


对于一个智能家居的控制管理系统,其安全性和保密性非常的重要,所以只能是智能家居系统的所有者才可以进入后台管理系统,对设备进行控制和管理[18]。在这里需要输入用户名和密码才能进入。登录界面如下图3-1所示:


图3-1 远程智能家居集控系统的登陆界面


3.2 客户端管理的总体布局


在集控系统中,主要集成数据管理和数据展示,还有集成控制。这里前端用CSS3和html,服务器采用BOA,在后台控制上采用cgi来操作应用函数。下图3-2是智能家居集控系统的照明系统界面。


图3-2 远程智能家居集控系统的照明系统


在网页与服务器的交互上,采用的是ajax技术,该技术可以在不刷新网页的情况下向服务器提交数据。用按钮及控件的数据改变事件或者点击事件就可以触发交互。在本文中,当用户点击网页上的开关按钮时,会触发相应的事件。当BOA服务器接收到事件后,可以在后台处理cgi程序。


4. 智能家居监控系统综合调试分析


调试部分在整个项目的测试过程中有十分关键的作用,对于系统整体的稳定性和后期的评估和维护有着关键性的作用。为了防止后期出现问题,整体项目的耦合性必须非常的好。然后在此基础上添加功能才不用项目重构,只需要添加部分功能即可。所以这个项目必须是可更新的。本文主要在硬件,软件,web这三个块进行调试。在使用开发板时,必须搭建好相应的开发环境,然后用特地的调试方法进行调试,将每个部分的问题降低到最小。而且要不断的思考符合大众的操作方式。让不懂电路设计的用户也能很容易的操作这套系统。


4.1 系统硬件调试


在硬件方面,前期的选材,中期的控制,后期维护这三个方面。在选择器件方面要结合功能和现有的资源。ARM适合运行操作系统,而且ARM的性能也比较高,适合像这种视频处理这种大数据量的操作。智能家居也需要稳定,不容易出现故障。智能家居还应该包括各种设备,空调,电视,灯,等设备。实际上设备只用操作GPIO即可,所以选择ARM芯片的另一个好处是引脚资源丰富,便于后期的扩展。选择网络摄像头好处是这种摄像头是通用的,在市面上很容易购买到,增加了系统的耦合性。系统硬件调试比较关键的部分是中期控制,这个也是难点。首先要了解Linux操作系统,然后在此基础上操作ARM上的硬件资源。然后是知道如何操作WIFI模块,网络摄像头,串口的通信协议,udp以及网络的数据传输方式。


4.2 系统软件调试


本系统的开发环境是利用ubuntu系统来作为系统的开发平台,在此基础上搭建嵌入式的gcc进行uboot,内核,根文件系统的编译和制作。对制作好的完整的Linux进行查看,主要是将开发板通过串口连接到电脑就可以看到内核的打印信息。然后在控制台上进行各种命令的控制。如果系统正常运行。表示制作的Linux没有问题,接下来只需要调试驱动程序和服务器即可。当开启BOA服务器,同时在同一个局域网内的电脑或者手机进行测试,输入相应的ip地址,就可以看到在www目录下的的网页了,一般而言,都会在配置文件中指定www目录下的默认显示文件。本文配置的是index.html表示默认文件,该网页就是登录界面。


4.3 系统网页调试


系统网页是给用户来进行控制和操作的,力求简洁,美观,功能齐全[20]。在这个方面上需要设计,所以样式表很重要,采用CSS3可以设计出很多的特效,让网页看上去更加的美观。通过连接服务器,然后连接到同一WIFI,登录开发板的ip,可以看下图4-1所示的结果。


图4-1 远程智能家居网页登录界面


该网页界面主要是来验证登录是否成功。在输入帐号或者密码之后,判断该帐号密码是否正确,如果正确则进入主控制界面,可以看到摄像头采集到的视频信息。如图4-2所示:


图4-2 远程监控采集摄像头数据


4.4 系统整体联接调试


进入系统时首先开启WIFI模块,在这里由于ip地址可变,所以这里直接用命令来连接WIFI。用shell脚本来开启WIFI。Shell脚本的编写如下面的代码所示。


#!/bin/sh
wpa_passphrase abc “12345678”>> /etc/wap_supplicant.conf
/etc/init.d/mt6620


执行该脚本程序,进行控制启WIFI后可以看到WIFI模块上的LED灯闪烁,表示WIFI模块正常开启。开启BOA服务器和MJPG-streamer。这里也用shell脚本来执行。

当开启这两个服务后,就可以在手机或者电脑上修改和控制开发板上的硬件了,此时在手机上输入开发板的ip地址可以看到可以进入服务器的网页,如图4-3所示:


图4-3 手机登录智能家居监控系统登录界面


手机端的远程集控系统也是以网页的形式展示的,通过输入用户名和密码,进入后台管理系统。在该界面的操作即可远程操作开发板上的硬件资源。手机端视频展示效果如下图4-4所示:


图4-4 通过手机进入智能家居集控系统


5.实物及代码



主要的客户端代码(主界面)视频监控


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>智能家居管理界面</title><link rel="stylesheet" type="text/css" href="css/style.css" /><script type="text/javascript" src="js/jquery-1.6.min.js"></script><script type="text/javascript" src="js/index.js"></script></head>
<body>
<script language="Javascript" type="text/javascript"> setInterval("timer.innerHTML=new Date().toLocaleString()"); window.onload = function (){ setInterval("timer.innerHTML=new Date().toLocaleString()",1000); }</script>
<div class="nav-top"> <span>智能家居远程集控系统</span> <div class="nav-topright"> <p id="timer"> </p> <span>您好:管理员</span> <span>注销</span> </div></div><div class="nav-down"> <div class="leftmenu1"> <div class="menu-oc"><img src="images/menu-all.png" /></div> <ul> <li> <a class="a_list a_list1">家电控制</a> <div class="menu_list menu_list_first"> <a href="light.html">照明系统</a> <a href="kongtiao.html">空调控制</a> <a href="chuanlian.html">窗帘系统</a> <a href="door.html">门禁系统</a> </div> </li> <li> <a class="a_list a_list2">实时数据</a> <div class="menu_list"> <a href="hint.html">照明时间</a> <a href="hint.html">空调时间</a> <a href="hint.html">开机时间</a> <a href="hint.html">电量统计</a> </div> </li> <li> <a class="a_list a_list3">视频监控</a> <div class="menu_list"> <a href="home.html">开启视频</a> </div> </li> <li> <a class="a_list a_list3">设备信息</a> <div class="menu_list"> <a href="#">服务信息</a> <a href="#">联系方式</a> </div> </li> </ul> </div> <div class="leftmenu2"> <div class="menu-oc1"><img src="images/menu-all.png" /></div> <ul> <li> <a class="j_a_list j_a_list1"></a> <div class="j_menu_list j_menu_list_first"> <span class="sp1"><i></i>家电控制</span> <a href="light.html">照明系统</a> <a href="kongtiao.html">空调控制</a> <a href="chuanlian.html">窗帘系统</a> <a href="door.html">门禁系统</a> </div> </li> <li> <a class="j_a_list j_a_list2"></a> <div class="j_menu_list"> <span class="sp2"><i></i>实时数据</span> <a href="hint.html">照明时间</a> <a href="hint.html">空调时间</a> <a href="hint.html">开机时间</a> <a href="hint.html">电量统计</a> </div> </li> <li> <a class="j_a_list j_a_list3"></a> <div class="j_menu_list"> <span class="sp3"><i></i>视频监控</span> <a href="home.html">开启视频</a> </div> </li> </ul>
</div> <div class="rightcon"> <div class="right_con">

<div style="text-align:center;"> <!-- number -->
<li> <font color="#4A374A" size="20">33</font> </li> </div>
<!--                        <div  style="text-align:center;">   

<li> <img src="images/mylogo.png" width="200px" height="48px" /> </li> </div>
--> <div style="text-align:center;"> <!-- number --> <li> <font size="5" color="red">远程摄像头数据监控</font> </li>
<li> <img src="http://192.168.23.2:8080/?action=stream" width="512px" height="384px" /> </li> </div> </div> </div></div></body></html>


6.总结


本文根据物联网的发展趋势,结合硬件和软件,设计出智能家居控制系统的解决方案,同时搭载的系统和使用的硬件都是自由裁剪,使得适配性很强。不同于很多的物联网摄像头,物联网灯等单一的产品,采用统一集成管理的模式,让操作更加简洁明了。采用Linux操作系统作为开发系统的平台除了占用内存等资源比较少,用户体验性也很好。


科学技术的不断进步,带给人们很多好处,同时也促进了智能家居的发展。物联网智能家居的崛起将是大势所趋,在人们的生产生活中发挥着举足轻重的作用。目前物联网智能家居正在不断发展,由近几年的车联网可以看出,在不久的将来,人们的生活越来越智能化。虽然智能家居的概念近几年很火热,但是缺少统一的标准,使得各种方案没法统一,让管理变得复杂。相信在不久的未来,这些问题都会被克服。


嵌入式ARM 关注这个时代最火的嵌入式ARM,你想知道的都在这里。
评论
热门推荐
相关推荐
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦