沈勇,王亮
(江苏科技大学 计算机科学与工程学院,江苏 镇江 212003)
互联网的迅速发展,实现了信息的高速传输和资源共享,极大地方便了人们的生活。嵌入式系统广泛应用于各种电器产品、智能仪表和控制设备中,它与互联网的结合是一种必然的趋势[1]。
嵌入式系统和网络技术的快速发展,为网络远程控制的发展和完善提供了技术基础[2]。
笔者综合运用嵌入式系统和Web技术,设计了一种可通过互联网进行远程控制的电源插座系统,实现对家用或工业电器的远程实时控制。用户通过网页浏览器访问该系统,对各插座进行打开或关闭的操作,实现对与其相连接的电器的远程控制。
图1 嵌入式Web的体系结构Fig.1 Architecture of embedded Web
嵌入式Web的体系结构如图1所示[3]。客户端和嵌入式系统中Web服务器之间的通信协议采用HTTP(超文本传输协议)。嵌入式操作系统提供TCP/IP协议支持。嵌入式Web服务器提供静态网页,也可以通过CGI(Common Gateway Interface,公共网关接口)与后台程序或嵌入式数据库交互,进行数据访问或处理。
嵌入式Web的工作流程如图2所示。嵌入式Web服务器的主要任务是接收客户端请求、解析客户端请求、响应客户端请求、向客户端回送请求的结果。客户端与Web服务器交换数据之前,首先用TCP/IP建立连接,服务器端程序建立TCP类型的Socket套接字;服务器在接收到用户端的请求后,解析客户请求的HTTP协议头,分析客户的请求,根据客户的请求做相应的处理并返回结果。
图2 嵌入式Web的工作流程Fig.2 Workflow of embedded Web
文中设计采用ARM-Linux架构[4]。ARM处理器具有小体积、低功耗、低成本、高性能等特点。嵌入式Linux操作系统内核精悍,运行所需资源少,十分适合嵌入式系统应用。
远程可控电源插座系统硬件结构如图3所示。
图3 系统硬件结构图Fig.3 Structure diagram of the hardware system
嵌入式Web服务器实现对用户的身份验证、页面解析与交互,根据用户请求产生对电源插座的控制信号。存储器存放系统的程序和页面文件。
以太网接口模块可选用RTL8019AS等以太网接口芯片,实现网络通信[5]。
控制模块实现对连接在市电AC220 V的插座各开关的“打开、关闭”操作,进而控制相连接的电器的工作。由于嵌入式系统使用的DC3.3V电源,且电流较小,控制模块须实现弱电对强电的控制。考虑到响应速度、电路功耗、使用寿命等因素,控制模块设计选用光电耦合器和可控硅。控制模块可控制电源插座的4路开关,其中一路的电路原理如图4所示。
图4 控制模块电路图Fig.4 Circuit diagram of the control module
光电耦合器选用MOC3062,它集光电隔离、过零检测和过零触发为一体,可以自动检测交流电压的过零信息。可控硅选用Q4010NH5,是大功率开关型半导体器件,具有耐压高、容量大、体积小、无噪音等优点。
ARM处理器的GPIO端口输出电平不足以使光耦元件U1(MOC3062)正常工作,需要信号放大。电阻R2和下拉电阻R3组成三极管保护电路。当GPIO端口输出为高电平时,三极管T1(9013)导通,使电阻R1和光耦U1形成通路,U1正常工作,GPIO输入信号得到放大,双向可控硅K1(Q4010NH5)的G控制端得到高电压,K1导通,插座220 V供电打开;当GPIO端口输出为低电平时,三极管T1截止,使电阻R1和光耦U1形成断路,此时U1不工作,K1断路,插座供电被关闭。
在嵌入式Linux操作系统下,设备驱动程序为应用程序屏蔽了硬件的细节。在应用程序看来,硬件设备只是一个设备文件,应用程序可以像操作普通文件一样对硬件设备进行操作[6]。
文中使用GPIO口作为控制端口,每一位信息控制一个电源插座开关。以连接1号插座开关的GP10为例,说明其驱动程序的编写。
将GP10定义为输出状态,并预设插座开关断开时输出0,此时GP10将输出0,输出低电平,并使图4中的三极管T1截止,光耦U1不工作,K1不导通,220 V供电断开;打开供电时,将GP10置1,即输出高电平,T1导通,220 V供电打开。
驱动程序中ioctl函数代码如下:
#define GP10_OUT_MOD (GPDR0|=0x0400)//设置 GP10为输出
#define GP10_OUT_0(GPCR0|=0x0400)//设置 GP10 输出为0
#define GP10_OUT_1(GPSR0|=0x0400)//设置 GP10 输出为1
#define K1_ON 1
#define K1_OFF 0
static ssize_t rcs_ioctl(struct inode*inode ,struct
file*file, unsigned int cmd, long data)
{
switch (cmd){
case K1_ON:{ //插座开关1打开
GPHCON=GP10_OUT_MOD;
GPHDAT=GP10_OUT_1;
break;
}
case K1_OFF:{ //插座开关1关闭
GPHCON=GP10_OUT_MOD;
GPHDAT=GP10_OUT_0;
break;
}
}
}
远程可控电源插座系统采用B/S(Browser/Server)结构,系统内嵌的嵌入式Web服务器可向合法用户提供基于浏览器的操作界面,浏览器便成了与插座相连设备的远端控制板。
由于嵌入式系统拥有的资源有限,构建嵌入式Web服务器须选择一个合适的Web服务器,在不影响整体性能的前提下,既利用自身有限的资源,又必须满足支持CGI的Web应用需求。
文中采用Boa Server[7]作为嵌入式Web服务器。Boa是一个非常小巧的Web服务器,可执行代码只有约60 kB。它是一个单任务Web服务器,只能依次完成用户的请求,而不会创建出新的进程来处理并发连接请求。但Boa支持CGI,能够为CGI程序创建进程来执行。
移植Boa的大致步骤如下:
1)从官方网站(http://www.boa.org)上下载 Boa源代码,解压;
2)根据硬件对Boa进行相应的配置,并交叉编译,编译器选用arm-linux-gcc;
3)编译生成可在ARM上运行的Boa程序,将其和内核一起下载到ARM平台上运行;
4)将系统所需静态页面文件和CGI程序拷贝至相应的路径下。
当Web服务器程序收到用户以HTTP协议的GET方式发来的远程控制指令后,调用CGI程序,在CGI程序中用open(“/dev/rcpo”, O_RDWR)语句打开设备文件,若成功,则将控制参数传递给ioctl函数的cmd,控制对应的插座开关做相应动作。
文中在嵌入式系统开发平台上实现,并制作了控制模块硬件,对电源插座进行了内部连线改装,使之远程可控。搭建测试环境,对一台220 V供电工作的普通电扇进行远程控制,如图5所示。
图5 系统测试环境Fig.5 System test environment
用户用浏览器软件访问本系统,经登录认证后进入控制页面,如图6所示。点击“开启”按钮后,电扇转动;点击“关闭”按钮后,电扇关闭。系统运行正常,响应及时。测试表明,本文设计是可行的、有效的。
文中设计了一种远程可控电源插座,在ARM嵌入式系统上构建嵌入式Web服务器,用户通过网络访问Web服务器,实现对电源插座的操作,进而远程控制与其相连的电器。本文设计采用模块化设计,功能实用,操作简便,易于扩展,可广泛应用于家用或工业电器的远程控制。
随着互联网技术的发展以及与信息家电、工业控制技术的结合日益紧密,具备网络功能的嵌入式系统应用正在成为未来电器的发展趋势。
图6 系统操作界面Fig.6 System operation interface
[1]陈乔云,贾金玲.基于智能手机与PC机的智能家居系统设计[J].电子设计工程,2009,17(9):25-26,29.CHEN Qiao yun,JIA Jin-ling.Design of smart home system based on intelligent mobile and computer[J].Electronic Design Engineering,2009,17(9):25-26,29.
[2]方尔正,王燕.嵌入式系统技术及其应用[M].哈尔滨:哈尔滨工业大学出版社,2008.
[3]丁苍峰,薛宁静,吕茂林.嵌入式Web服务器的设计研究[J].计算机工程与设计,2009,30(18):4188,4194.DING Cang-feng,XUE Ning-jing,LV Mao-lin.Design and research on embedded web server[J].Computer Engineering and Design,2009,30(18):4188,4194.
[4]孙天泽,袁文菊.嵌入式设计及Linux驱动开发指南[M].北京:电子工业出版社,2009.
[5]鲍祖尚.基于嵌入式Internet的信息家电的研究与设计[J].微计算机信息,2011,27(6):97-98,55.BAOZu-shang.The study and design of information appliance based on embedded internet[J].Microcomputer Information,2011,27(6):97-98,55.
[6]周维虎,石良臣,何嘉扬.ARM嵌入式系统设计与开发指南[M].北京:中国电力出版社,2009.
[7]Doolittle L,Nelson J.Boa Webserver[EB/OL].(2000-02-03)http://www.boa.org/documentation/.