Linux平台智能家居的本地监控与远程监控
3.1 视频流服务器设计
该服务器主要用于将摄像头采集的视频或者图片显示到网页和LCD(Liquid Crystal Display,液晶显示器)上,这里采用MJPG—stream er作为视频流服务器。MIPG—streamer采用的是V4L2(Video 4 Linux 2)接口,可以通过文件或者是HTTP的方式访问Linux UVC兼容摄像头。视频流服务器将摄像头捕获的图像存入global buffer缓冲区,当客户端有访问请求时,服务器便将global buffer缓冲区中的图像数据连续地发送给客户端。该程序中的server_pthread函数使用多线程技术,为每一个连接请求的客户端创建一个线程。该线程独立地与客户端进行通信,发送图像数据。
此外,MJPG—steamer还用来从网络摄像头采集图像,并将它们以流的形式通过基于IP的网络传输到浏览器的网页上。由于MJPG—steam er可以通过利用网络摄像机的硬件压缩功能来降低服务器CPU的开销,而无需为视频帧压缩浪费大量的资源,因此它为嵌入式设备和一些常规服务器提供了一个轻量级且较少CPU消耗的方案。MJPG—steamer功能强大,但为了符合本项目的需要,仍需对其进行修改,添加我们想要实现的功能。在本设计中,需要向MJPG—steamer视频流服务器的添加LCD输出插件,其代码如下:
3.2 家电物联网服务器设计
该服务器主要负责为网页提供家电的实时状态信息,同时也为Android手机客户端提供服务,让Android手机客户端具有实时显示和远程控制家电的能力,其关系如图3所示。
在网页上显示信息主要是通过.xml文件实现的。首先,网页通过BOA服务器,调用CGI(Common Gateway Interface,通用网关接口)程序控制网页线程,并发送命令给单板。然后,单板将采集到的数据发送给家电物联网服务器,服务器通过向.xml文件中写入采集到的数据,实现网页的实时信息动态显示。当网页客户端在浏览器中发送请求(如设置报警温度等)时,BOA服务器会调用CGI接口解码,区分提交过来的信息,然后把这个信息发送到单板,实现对单板的控制。Android手机客户端与家电物联网服务器的通信则主要是通过套接字进行的。
3.3 Android客户端软件设计
Android是一个专门为移动电话而设计的开放源码的操作系统,它将开辟新的应用,使家居智能化运用于普通家庭。Android客户端控制系统采用模块化的设计思想,主要包括应用层UI(User Interface,用户界面)、JNI(Java Native Interface,Java本地接口)、HAL(Hardwa re Abstraction Layer,硬件抽象层)和底层驱动等的设计。Android应用程序由一个或多个组件构成,组件包括activity、service等,每个组件在应用程序中完成不同的任务,可以被单独激活,也可以由其他应用程序激活,其具体流程如图4所示。
其中,HAL层包括LED灯、蜂鸣器和按键等设备,主要用于实现供JNI调用的接口。在函数实现中,HAL利用底层驱动提供的接口(即ioctl)来控制寄存器,实现对设备的控制操作。JNI层通过封装将Framework层调用的接口关联到JNI层,每个设备都有自己唯一的设备ID。应用层UI显示来自M0的模拟量,主要用于管理A8上各种设备的工作情况,可以实现LED控制、按键检测、蜂鸣器控制、A/D转换、温度传感器的数据读取和方向传感器模拟值的处理等功能,其控制程序客户端主界面如图5所示。图中,上侧为项目菜单栏,通过不同项目菜单下的信息和控制按钮,可以实现对家居设备的远程实时监控;中间部分是对不同设备的控制开关,通过这些开关可以实现对警报灯、电风扇和蜂鸣器等设备的控制,并可以根据需要对报警温度值进行设置;最后,通过对下侧不同测量点的选择,可以实现对不同位置房间的监控。
结语将设计的Android手机客户端软件安装后,经反复测试,手机可以通过无线网络实现对家居设备的控制。同时,也可以通过Internet远程监控网页实现对家居设备的控制。通过本系统,可以实现对家居设备的集中管理和控制,随时随地掌控家中的状态,得到家中的最新状况。
此控制系统采用当前较新的控制方式——远程监控网页和智能手机软件控制,与其他终端控制方式相比优势明显。同时,设计开发的手机软件具有通用性强、易于移植、市场应用价值高、易于推广等特点。本系统的设计不仅涵盖了Linux系统开发的软硬件技术,同时也包含了嵌入式产品设计的各种综合素质和多项技能,具有一定的实用价值。
- Linux嵌入式系统开发平台选型探讨(11-09)
- 嵌入式系统中文输入法的设计(03-02)
- 基于MPC755的嵌入式计算机系统设计(05-10)
- WinCE下光电编码器的驱动程序设计(04-12)
- 为什么嵌入式开发人员要使用FPGA(05-13)
- VxWorks几种常用的延时方法介绍(05-16)