基于Android平台的无线WiFi控制方法
2012-07-25陈雪娟
王 雷,蓝 箭,陈雪娟,陈 峰
0 引言
随着网络时代的到来以及第三代通信技术的发展,各种智能移动终端相继问世,以Android平台为代表的智能手机正伴随着3G技术开始获得人们的广泛接受。在这场移动设备的革命中,移动终端设备己经跨越了仅仅将通信作为唯一目标的模式,而变成具有广泛应用价值的计算、控制与管理的服务平台。将智能手机与控制系统相结合,使传统的PC机工作平台具备便携能力,为实现真正的移动的通信方式提供了可能。本文实现了一种基于Android手机的无线控制系统,系统中Android手机可利用周围无线网络资源与其他设备进行交互并实施控制,不仅为现有智能控制系统提供了新的控制方法,也为实现机器与人的信息交换提供了新的交互手段[1]。特别是在我国酝酿的物联网开发与应用的大潮中,这样一种新型的控制方法,将对我们的工作方式及生活方式,甚至对周围世界都产生着巨大的影响。
1 系统的总体设计
系统的总体设计思路,是以一个嵌入式微处理器为核心的控制模块负责提供服务并与用户的Android手机通信。手机作为控制其他设备的管理器,提供交互界面,例如遥控停车入库、入位,手机远程检查并控制家居灯光和电器等[1]。这实际上是一个C/S结构的系统,以嵌入式微处理器为核心的控制器作为服务器,Android手机作为客户端。系统的总体结构,如图1所示:
图1 系统结构图
用户携带Android智能手机进入控制区,手机客户端接入无线网络,搜索网络中的可用设备服务,发现目标设备后与之进行信息交互。Android手机与控制模块通过Socket进行通信,通过手机客户端软件对设备进行控制和管理[1]。
2 嵌入式控制模块的设计
系统硬件平台是基于 ARM920T架构的处理器三星S3C2440,并采用802.11标准的D-LINK DWL-G122无线网卡实现WiFi网络通信。根据硬件资源和接口特性以及软件开发复杂度的需要,系统搭建了嵌入式Linux开发平台,基于2.6.31内核开发ARM9平台上的硬件设备驱动以及应用程序,从而可以利用开源项目来实现PWM电机驱动等控制功能模块。系统硬件结构,如图2所示:
图2 无线控制系统硬件结构图
2.1 嵌入式Linux及无线网卡驱动的移植
为了满足系统实时性的要求,针对ARM9开发平台,需对Linux做必要的裁剪和配置后再安装到目标机中。具体过程:在安装好Linux操作系统和针对目标板的交叉编译器的PC机上,对Linux源码进行必要的配置,包括添加PWM驱动文件、修改makefile和kconfig文件、选择处理器类型及板级支持;选择对设备驱动和文件系统的支持[2]。完成配置之后进行内核编译,生成定制的内核镜像。
为了支持系统所使用的D-Link DWL-G122无线网卡,需将RT73 wifi通信芯片组的驱动程序编译进内核。加载驱动模块后,下载 wireless-tools源码并移植 iwconfig,iwlist等无线扩充命令以配置无线网卡[2]。为使无线网卡自行启动,在ARM板上电运行时,操作系统将初始化配置无线网络的属性,包括模式 MODE、ESSID、IP地址等,需编写无线网卡配置脚本文件init_wireless如下:
#!/bin/sh,ifconfig wlan0 down,iwconfig wlan0 ap auto iwconfig wlan0 essid "raybotest",ifconfig wlan0 192.168.0.12 ifconfig wlan0 up。然后将其拷贝到根文件系统的/bin目录中,在根文件系统中的/etc/init.d/rcs最后一行添加/bin/init_wireless&,最后增加其可执行属性:chmod+x init_wireless[3]。这样,就完成了RT73芯片组的驱动移植。
2.2 PWM控制模块软硬件实现
PWM控制模块是采用三星公司的S3C2440ARM芯片作为核心处理器,其内部有5个16位的定时器。 其中定时器0、1、2、3有脉宽调制功能。每个定时器模块从时钟分频器接收其自己的时钟信号,其分频器从相应的8位预分频器接收时钟。8位的预分频器是可编程的且根据装载的值来分频PCLK,其值存储在TCFG0和TCFG1寄存器中[2]。
S3C2440芯片的PWM模块,具有递减计数器TCNTBn和比较计数器TCMPBn双缓存触发的特点,当递减计数寄存器的值递减到与比较计数寄存器的值相同时,定时器控制逻辑就改变输出电平,即递减计数器的预存值与PWM输出地频率有关,比较寄存器的预存值与PWM输出地占空比有关,两者相协调即可得到所需的PWM波形。
在系统中,由定时器1直接作为舵机的控制信号,控制多级的方向。电机控制则采用两片大功率BTS7960构成的全桥电机驱动电路,需使两路PWM控制信号存在占空比差,差越大电机转速越高。两路PWM输出频率均为25kHz,以PWM1为基准,通过控制PWM2输出不同占空比,实现电机的正反转控制。控制器应用层PWM控制程序部分代码如下:
服务器端通信软件是通过套接字编程的方法实现的,服务器要先于客户机启动,首先使用Socket()方法建立一个Socket连接对象并设置一个访问的端口号,以便服务器能侦听客户的连接请求,本系统设置为7070。然后调用bind方法将Socket与本地网络地址绑定。之后就可以通过listen函数来侦听是否有客户端进行连接。如果侦听到客户的请求,就调用accept()方法建立连接[1]。与客户端连接建立成功后,按照控制流程的要求,使用收发函数,进行数据传输。服务器应用程序流程图,如图3所示:
图3 服务器通讯程序流程图
3 Android手机平台控制终端的设计
3.1 Android操作系统的软件架构
Android是2007年11月由以Google公司牵头组建的开放手机联盟(Open Handset Alliance)发布的智能移动设备软件平台。其前所未有的标准化和开放性使Android操作系统成为一套真正意义上的开放性移动设备综合平台[1]。
Android采用了层叠式的软件架构,它包括Linux内核层、函数库和组件库以及虚拟机组成的中间层、应用程序框架和应用程序组成的上层,如图4所示:
图4 Android平台结构
3.2 Android应用程序开发平台的搭建
Android以Java作为开发语言,以开源IDE Eclipse作为开发环境,使用Android SDK、Java开发包JDK、开发插件ADT进行软件开发与调试。如此强大的开发平台完全能够满足手机终端的Java应用开发。下面介绍在Windows XP下开发应用程序的环境搭建方法[1]。
[1]JDK的安装和Java开发环境的配置
安装 Eclipse的开发环境需要 JRE的支持,下载Windows XP下的最新JDK并设置JDK的环境变量[1]。
[2]Eclipse和Android SDK的安装和配置
完整安装好JDK和Eclipse后,下载所要使用的Andriod SDK,这里使用了2.3版本并把tools目录添加到Windows XP的PATH环境变量中。
[3]安装和配置ADT
启动Eclipse,依次点击"Help->Software Update...-> Ava ilable Software->Add Site...",输入dl-ssl.Google.com/android/eclipse/,点击OK完成。依次选择"Preferences-> Android",点击"Browse..."选择Android SDK的安装路径,设置Android SDK主目录从而把Eclipse与SDK绑定在一起[1]。
至此,经过上述安装配置过程 Android应用程序的开发环境已经搭建完成。可以在Eclipse中创建Android项目了。从 Android1.5开始就引入了 AVD(Android Virtual Device)的概念[1]。AVD是一个经过配置的模拟器,在运行程序时,Eclipse可以自动运行虚拟机,因此运行和调试Android应用程序可以脱离实体手机,极大地方便了应用程序的开发。PC机上运行Android虚拟机的界面,如图5所示:
图5 模拟器运行界面
3.3 手机控制终端应用程序的设计
Android应用程序是以许多Android API组件为基础进行开发的,下面是几种主要的API组件:
当前活动程序 Activity是最常用的应用程序组件,可以把Activity简单的理解成一个用户所看到的屏幕,称之为“活动”[1]。它主要用于处理程序的整体性工作,通过调用onCreate ()、onStart()、onRestart ()、onResume ()、onStop()、onDestory ()等方法来实现运行、暂停、停止等状态。例如监听按键、触摸屏等事件,指定图像显示 View,启动其他Activity。Android用Intent类实现启动其他Activity,它调用startActivity (myIntent)方法触发解析myIntent动作,新的Activity接收到myIntent通知后,开始运行,例如通过Activity的切换实现显示布局的切换。ContentProvider类是一个特殊的存储数据的类型,它实现了数据的存储与共享。Service是运行在后台的应用程序组件,不直接与用户交互。当前活动程序可以使用Context.StartService ()开启一项后台服务,还可以通过Context.bindService ()与后台服务通信[1]。
系统以PWM控制器的Android控制界面为例,介绍了Android应用界面的创建过程[4]:
1、通过 File -> New -> Project 菜单,建立新项目"Android Project"。
2、填写新项目的所在文件夹名称、包名、主类名和应用程序标题。
3、编辑自动生成的代码模板。
打开一个Android项目的main.xml文件,即可以切换到UI设计界面,通过Layouts中的线性布局完成界面的布局排版,如图6所示:
图6 Android界面布局编辑器
在界面编辑器(图6)中完成布局之后,添加按钮的触控事件,编辑应用程序代码。在Android的Java程序中,实现人机交互的控件是通过事件处理的,需要指定控件所用的事件监听器[4][5]。事件响应部分代码如下:
程序的通信部分采用了C/S 的结构来实现,服务器与客户端通过Socket进行网络通信。手机客户端Socket编程实现与服务器端有所不同,在使用socket()方法创建完套接字接口后,直接通过connect()方法与服务器端建立链接并可使用收发函数进行控制命令的数据传输[1]。使用close()方法可以断开链接。客户端应用程序流程图,如图7所示:
图7 客户端通信程序流程图
客户端应用程序开发完成之后,可以将应用程序打包调试。为使Android应用程序可以在模拟器上运行,必须创建AVD。模拟器创建步骤如下[1]:
1、在Eclipse工具栏中,依次选择Windows -> Android SDK and AVD Manager。
2、在Virtual Devices新建一个模拟器。
3、填写Name,选择Target的API、SD Card大小、Skin、以及Hardware配置。
4、点击Create AVD即可创建AVD。
完成模拟器上的调试后,可以在项目文件夹下 bin目录中的Carcontroller目录中找到Carcontroller.apk文件,即为本程序的发布apk包。可将此apk包安装实体手机并启动。运行界面,如图8所示:
图8 测试效果图
经过在中兴U880上反复测试,如图8所示。手机连接控制模块的时间小于5s,远端服务器对手机控制命令的响应时间为ms级,基本上完成了手机无线PWM控制功能。
无线网卡工作在2.4GHz频段,其信号频率高,波长短,使其具有较弱的障碍物的穿透能力。再加上发射功率不大(一般小于100mw)如果遇电磁干扰比较大或者较为封闭的环境下,会影响数据的传输效果。根据无线信号在自由空间传播时的通信距离的计算方法:通信距离与发射功率、接收灵敏度和工作频率有关。有传播损耗公式:
其中Lbs为传输损耗,d为传输距离,f为工作频率。
对于工作在2.4GHZ的无线网卡,f=2400MHZ,则有无线网卡自由空间损耗距离公式:
传播损耗与传播距离的关系,如表1所示:
表1 WLAN信号在自由空间传播的损耗与距离关系
实际中,信号还会受到障碍物阻挡、物体吸收、反射等影响。一般穿透一层木板,信号衰减5dB;穿透一堵砖墙,信号衰减8dB;穿透钢筋混凝土墙,信号衰减25dB。系统实际测得在在室内可达65m,在有障碍物的环境下,隔一堵墙传输可达30m,而隔两堵墙时,最大控制距离降为10m,室外环境下无线信号最大控制距离可达100m。
4 结语
系统实现了一种基于Android系统下的无线PWM控制模块设计,并在遥控模型汽车上测试成功。系统采用了嵌入式ARM9平台作为硬件控制模块,完成了Android应用程序开发,编写了一个手机客户端软件,解决了手机与控制器端之间的数据传输,实现了手机远程控制 PWM 调速等功能。
该嵌入式控制系统能够在日常环境下一定距离范围内成功地实现了无线PWM控制功能,可广泛应用于智能家居、智能停车以及不易布线的PWM控制场合。设计的创新之处,在于系统将智能手机通过无线通讯技术与控制系统相结合,扩大了智能终端的应用范围并为现有智能控制系统提供了新的控制方法,为物联网的发展提供了一种新颖的实现途径。
[1]杨丰盛. Android应用开发揭秘[M].北京:机械工业出版社, 2010.
[2]徐英慧,ARM9嵌入式系统设计—基于 S3C2410 Linux[M].北京:北京航空航天大学出版社,2007.
[3]胡双喜,吴长,奇李林娟.USB无线网卡在嵌入式平台上的应用[J].工业控制计算机.2008年21第5卷期:P48.
[4]赵亮,张维.基于Android的界面设计与研究[J].电脑知识与技术, 2009(29) : 8183~ 8185.
[5]蔡罗成. Android后台监听实现机制浅析[J].信息安全与通信保密, 2010(6): P39~ 41.