基于Android的物联网控制系统的设计与实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于Android的物联网控制系统的设计与实现

摘要:基于Android智能操作系统开发平台,以移动通信网为载体,利用短信方式和GPRS 方式实现在系统客户端信息采集与传输、进行数据分析处理等功能的物联网无线测控系统。用户通过Android设备终端,可以随时随地查看环境数据并进行实时检测与控制,实现物联网嵌入式的无线测控功能。关键词: Android OS;GPRS;SMS;物联网;无线测控目前无线通信处于3G/4G时代,中国移动GPRS业务全面投入运营,无线数据通信的发展和应用向着愈来愈广泛和深入的领域发展[1]。远程测控技术并不是一项新的技术,然而由于移动通信网的介入,使之焕发出新的光辉。因此,随着智能手机的迅速发展,Android操作系统作为最流行的操作平台,充分利用无线通信的现有资源,开展远程物联控制是远程控制充满活力的发展方向,网络远程控制技术也是物联网建设的基本方向之一[2]。本系统是基于Android操作系统平台,将传统的远程控制技术向基于无线通信网的移动终端设备的方向转变,实现了一种为移动客户端提供远程无线测控的方案。该方案能够对远程数据进行实时监控,提高工作效率,也增加了远程控制的灵活性。1 Android操作系统平台Android操作系统是谷歌发布基于Linux平台的开源手机操作系统。该平台由操作系统、中间件、用户界面和应用软件组成,是首个为移动终端打造的真正开放移动软件,其开放的平台允许任何人在终端设备上开发[3]。Android所包含的功能如下:(1)APPLICATIONS(应用程序层):Android 装配了一个核心应用集合,包括短信、日历、地图、通信录等。所有应用程序都是用Java 语言编写的。(2)APPLICATION FRAMEWORK(应用程序框架层):Android具有强大的应用层API和丰富的传感器功能,所有的应用程序其实是一组服务和系统,主要包括如下内容:视图(View);内容提供者(Content Providers);资源管理器(Resource Manager);通知管理器(Notification Manager);活动管理器(Activity Manager)。(3)LIBRARIES(库):Android包含一个C/C++库的集合,用来提供给Android系统多种组件使用,这些功能通过Android的应用程序框架来提供给开发者。(4)ANDROID RUNTIME(Android运行时):Android 包含一个核心库的集合,提供大部分在Java编程语言核心类库中可用的功能。每一个Android 应用程序是Dalvik虚拟机中的实例,运行在自己的进程中。(5)LINUX KERNEL(Linux 内核):Android基于Linux2.6提供核心系统服务,例如安全、内存管理、进程管理、网络堆栈、驱动模型等。作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务[4]。2 硬件平台该物联网无线测控系统的硬件平台主要由STC12C5A60S2单片机、WISMO228无线通信模块、I/O测控接口、本地串行通信接口等资源组成。硬件总体框架设计。

微控制器选用8 bit STC12C5A60S2系列单片机,其指令格式完全兼容8051,但速度要快8~12倍。GPRS模块选用基于GSM/GPRS的工业级无线通信模块WISMO228,可直接由单片机串行口连接并通过AT命令控制等特性,能很好地适应物联网对远程测控的要求。以太网控制器选择高度集成的全双工以太网接口芯片RTL8019AS。固件程序的主要功能包括初始化228模块、生成短消息、解析短消息、有线和无线网络的通信、控制I/O设备等。3 终端应用程序开发3.1 系统方案(1)系统开发环境:本系统使用Android 应用开发工具和API 接口,基于JDK + Eclipse + ADT插件 + SDK的开发环境。(2)系统设计流程:系统通过Activity 管理相应功能。首先进入LOGO界面,然后跳转到登录界面,验证成功即可进入TabView界面,创建异步任务,进行异步操作,这样能够提高处理速度,使软件更加健全可靠。软件系统架构。

(3)模块化设计:系统客户端软件主要包括界面模块、数据库模块和功能控制模块3个部分。3.2 设计与实现3.2.1 UI布局实现Activity是Android的核心类,是一个用来提供

屏幕与用户交互的应用组件[5]。Activity类通过onCreat()方法来初始化,由setContentView()方法指定一个布局(layout)文件,显示布局文件的内容。UI布局实现

如下:

(3)账户管理界面在Android中,ListView是一个比较难于使用的控件,一个ListView

通常有两种功能,一是将数据填充到布局;二是处理用户的选择点击等操作[8]。ListView

以列表的形式展示具体内容,并且能够根据数据的长度自适应显示。一个ListView的创建需

要3个元素:ListView中的每一列的View;填入View的数据或者图片等;连接数据域ListView

的适配器[9]。在本系统中设计了account_item.xml和account_manager.xml两个布局文件,分别用来实现ListView中每个item对应的View和管理账户界面AccountManagerActivity对应的布局。本视图通过自定义AccountManagerActivity继承BaseAdapter实现数据绑定、accountList与ListView列表项一一对应。其代码如下:accountList=(ListView)findViewById(R.id.lvAccountList);adapter=new AccountManagerAdapter(this,users);

tabHost=getTabHost();tabHost.addTab(tabHost.newTabSpec ("GPRS").setIndicator("GPRS",getResources().getDrawable (R.drawable.gprs)).setContent(new Intent(this, GPRSActivity.class)));控制器

1完成对电视机的控制功能。当设定的定时时间点击确定按钮,即开始对电视机进行开机或

关机操作;获取控制器的响应信息,显示定时完成状态;在获取控制器响应信息之前,显示

正在定时状态(如控制器2对冰箱的启动或关闭状态控制)。3.2.2 数据库设计本系统在使

用过程中会频繁对数据进行操作,而对存储卡文件进行增、删、改、查操作。为了提高效率,

这里采取占用资源小的SQLite数据库机制[10]。但数据库并不能自身进行操作,只有通过一

个继承了SQLiteOpenHelper的类对象调用相应的函数进行操作。这里定义了一个DBHelper

继承SQLiteOpenHelper。为了代码重用,对账户管理操作和终端数据操作分别写了两个基类UserInfoServices和RmcsInfoServices来处理最底层的访问;数据库里的每一行记录与UI

列表的每一项一一对应。根据需求分析,本系统涉及两个表:UserInfo、RmcsInfo,分别

用于保存账户信息和终端数据信息,其数据结构分别如表1和表2所示。这两个表分别由UserInfoServices和RmcsInfoServices类管理。在DBHelper类的onCreate方法中通过执

行数据库execSQL方法动态创建这两个表。其代码如下:db.execSQL (DBInfo.Table.SQL_CREATE_USER_INFO_TABLE);db.execSQL (DBInfo.Table.SQL_CREATE_RMCS_INFO_TABLE);

另外,在UserInfoServices中主要封装对账户的增、删、改、查操作;在RmcsInfoServices

中主要封装对终端数据的相应操作。主要采用的数据库操作方法如下:(1)db.insert(table,nullColumnHack,values)向数据库中插入一条记录。(2)db.delete(table,whereClause,whereArgs)从数据库中删除一条记录。(3)db.update(table,values,whereClause,whereArgs)更新数据库中的一条记录。(4)db.query(table,columns,selection,selectionArgs, groupBy,having,orderBy)在数据库中查询一条记录,该方法返回的

是一个Cursor对象。3.2.3 GPRS通信模块设计物联网无线测控系统的嵌入式微控制器与

本地电器终端设备进行数据通信,以获得电器设备的运行状态参数,通过GPRS模块发送到GPRS网络中。手机终端的GPRS接收模块可以接收经无线网络传递进来的数据进行处理,同

时还可以由GPRS发送模块将封装后的测控数据传送到终端设备,从而在物联网平台上对电器

终端设备的开关,实现定时、排除异常、报警等监控功能。具体设计如下:(1)首先判断

是否接入网络。在Android手机中可以通过ConnectivityManager类的isAvailable()方

相关文档
最新文档