基于Android手机操控智能家电技术的研究与实现

时间:2023-04-26 11:24:04 公文范文 来源:网友投稿

摘 要:伴随信息家电概念的提出和Android手机使用日益普遍,利用Android手机操控传统家电这一想法的提出与实现将具有十分重要的意义。本文给出了通过wifi无线网络建立家电电脑控制网关、Android手机和红外发射装置的局域网络,利用Socket编程传输指令信息,从而搭建起家电红外控制网络的实现方式,并对一些关键技术进行了阐述。

关键词:Android;家电;wifi;socket编程;红外

中图分类号:TP273.5 文献标识码:A 文章编号:1674-7712 (2013) 18-0000-03

鉴于当前通信技术和网络技术蓬勃发展,家用电器的集中控制和远程调控的实现成为了可能。在这个追求高速、便捷的时代,人们迫切地想要有新的生活方式。信息家电(Information Appliance)新概念的提出更是将这种渴望推向极致,使得我们有了实质性的目标需求。一些如何将现代通信技术融入到传统家用电器的设想和尝试层出不穷。由于目前家电在制造和消费中存在着种种阻力,我们认为不改造现有的家电结构的新型控制方式更容易被接受,更市场前景。

另外,一场移动设备的革命也已悄然开启。不同种类的移动智能终端相继问世,Android、IOS、WP等平台的移动手持已经深入到我们的生活中,移动手机的使用量让个人电脑望尘莫及,人们已经离不开了手机。这样一来,通过手机集中控制家用电器的方式就成了一个不错的选择。本文即将展开的是Android操作系统手机作为控制端的设计方式。

一、系统的总体设计

此系统的设计思路是,由个人计算机、无线路由器、Android操作系统手机、wifi红外全向控制器(BULLET公司的产品)、家用电器进行双层组网,在所组成的局域网中传递控制信息,进而驱使控制器发射红外控制信号,形成有效的红外控制网。

现在人们的生活水平不断提高,家中遍布了各式各样的家用电器。由于红外线的波长较短,对障碍物的衍射能力差,适合应用在需要短距离无线通讯的场合进行点对点的直线数据传输。[1]此时对处在不同房间的空调、电视、风扇等家电的控制就不那么容易了。单个红外发射点不能到达各个房间区域,因此我们需要在每个房间放置一个红外控制器,这就使用到了控制器的STA工作站模式。

这种方式的建立需要利用无线路由器作为热点,将wifi控制器、手机接入,构成了一个局域网。其IP、默认网关等参数由路由器设置决定,图1只是给出了一个例子。家庭里的路由器一般是家庭为接入宽带就配备的,所以家庭电脑也接入了这个局域网。现在我们可以在家庭电脑创建一个家电控制网关,用于手机接入控制网的权限鉴定和作为终端控制家电。这些功能的实现都基于SOCKET套接字的TCP连接。

图1 系统设计示意图

手机通过家庭控制网关的鉴定后,即可访问控制点进行家电控制,控制信息不需经过电脑网关。比如,想控制空调1,手机发送密码至电脑进行鉴权,取得权限后手机直接和WIFI红外控制器交换信息,通过控制器的红外信号操作空调1。这样的处理方式的好处是:

(1)不需电脑网关对控制信息处理,节约电脑的资源;

(2)减少控制信息流向通道,提高控制信息送达率;

到这里,我们搭建起了一张家庭局域网和一个红外线网络,只要红外控制器放置合理,就可以在家中的任何地方控制到任何带红外控制方式的家电。

手机或电脑通关局域网和控制器建立起Socket套接字TCP连接,实现控制信息的传输。控制器会对接收到的控制信息进行解析,判断应发送何种信号。控制器配备红外接收学习接口,可以直接从家用电器的遥控器中学习市面上大部分家用电器的红外控制码,特别是日本的空调超长码,不需要我们去解析种类繁多的红外标准。这使得控制器的红外信号能像遥控器的一样方便有效地控制相关家电。当然控制器也有自己的协议标准,这在下面软件设计再作介绍。

二、电脑控制网关软件设计

这里的网关就是一个运行在Windows系统上的程序,借助微软系统强大的软件接口和电脑硬件资源,完成我们所需的功能,使得开发更简单快捷。

本方案中在VC6.0环境中采用C++语言MFC编程开发网关软件,其关键技术为Socket套接字编程。此设计中我们采用了微软的winsoc规范。微软的Windows Socket(简称winsoc)规范是对Berkley的套接字规范进行扩展,利用标准的socket方法,可以同任何平台上的Socket进行通讯;利用其扩展,可以更有效地实现在Windows平台上计算机间的通信。[2]

网关软件的一个示例操作界面,如图2:

图2 网关软件界面

点击“允许手机接入”按钮,创建独立线程,开启socket服务器端程序,用于验证手机发送来的密码,返回控制信息,允许或拒绝手机接入控制网。部分代码如下:

void CDeviceCtrlDlg::OnBtnMobileAcess(){ //创建手机密码验证程序线程

m_BtnMobileAcess.EnableWindow(FALSE);

CreateThread(NULL,0,AcessServer,NULL,0,NULL);}

网关密码验证Socket服务器端程序编写步骤如下:

(1)WSADATA m_WSADATA;

WSAStartup(MAKEWORD(2,2),&m_WSADATA);// 加载套接字库,创建套接字

(2)bind(Listening,(SOCKADDR *)&ServerAddr,sizeof(ServerAddr));// 绑定IP端口:

(3)listen(Listening,5)// 监听连接请求

(4)accept(Listening,(SOCKADDR*)&ClientAddr,&ClientAddrLen);// 接收连接请求:

(5)和客户端通信:

接收:recv(NewConnec,buf,MSG_LENGTH,0)

发送:send(NewConnec,buf1, static_cast(strlen(buf1)),0)

(6)返回,等待另一连接请求

(7)closesocket(Listening);

closesocket(NewConnec);

WSACleanup()//关闭套接字:

流程图如图3。

图3 网关密码验证程序流程

设置wifi控制器IP,点击“连接设备按钮”,在电脑和控制器之间建立SOCKET套接字TCP连接,激活示例【电风扇控制器】栏的按钮,点击相关按钮即可发送指令,使控制器发送红外信号控制电风扇。这些指令需要符合控制器的协议,为6字节的16进制数,如表1:

表1 指令表

操作码操作码发送码发送地址预留检验和(后三位异或和)

50fa01??00??

相对服务器端,客户端的SOCKET编写流程较为简单,具体如下:

(1)WSADATA wsaData;

socket(AF_INET, SOCK_STREAM, IPPROTO_TCP ); //加载套接字库,创建套接字

(2)connect(m_sSocket, (LPSOCKADDR)&server, sizeof(SOCKADDR));// 向服务器发起连接请求

(3)和服务器通信:

接收:recv(m_sSocket, buf, len, 0);

发送:send(m_sSocket, buf, len, 0);

(4)CloseServer();

WSACleanup();//关闭套接字,释放资源

流程图如图4。

图4 控制指令发送流程

三、Android手机平台终端设计

(一)Android的体系框架

2007年11月,Google公司牵头组建了开放手机联盟(Open Handset Alliance),随后发布Android这一款针对手机的全新开源软件工具包,引领了一次手机大变革。Android的体系结构由应用层、应用框架层、系统运行库层、Linux内核层4部分组成。

在开发Android应用程序时我们是通过应用程序框架来与Android底层进行交互。应用程序包含了4个重要组件,分别为:

(1)Acitivities:表示程序的显示界面,每个Activities拥有自己的生命周期;

(2)Intent:用于多个应用程序之间的跳转调用;

(3)Services:这个组件好比如一个没有界面的Activities程序,在后台运行;

(4)Content Provider:在不同程序之间的数据共享由它来协助完成。

(二)Android开发环境的搭建

Android应用程序以JAVA作为开发语言,Google提供了Android SDK开发平台,跟JAVA的JDK很相似,为开发提供了极大的方便。同时我们可以在eclipse开发环境中进行开发,其中的好处在开发JAVA程序时能够深刻体会到。下面介绍WINDOWS XP/WINDOWS 7下的开发环境搭建。

(1)下载安装JDK和配置JAVA开发环境变量

Eclipse是基于JAVA语言编写的,它的运行需要JRE支持,所以我们需要下载安装适用于WINDOWS XP/WINDOWS 7的最新JDK。然后为了操作系统能正确找到JRE,必须进行JDK环境变量的配置;

(2)下载安装Android SDK和配置环境变量

SDK软件包可以从http://developer.android.com/index.html直接下载,下载来的SDK以压缩包形式保存,用户直接解压到某个存储区间即可。SDK是开发各种版本Android应用程序的基础,跟JDK一样,我们要在WINDOWS的PATH目录下为SDK配置环境变量。

(3)安装Eclipse、ADT插件

有了JRE运行时环境的支持,就可以/android/eclipse/,选择ADT插件进行下载,eclipse会自动安装插件,完成之后重启eclipse。最后选择WindowsPreferencesAndroid命令,在打开的界面中选择Android SDK所在主目录完成最后配置。

经过以上3个步骤,Android开发环境的搭建就已经完成,可以在Eclipse新建Android project了。从Android1.5开始就引入了AVD(ANDROID VIRTUAL DEVICE)概念。[3]AVD是一个模拟器,可以配置模拟器的界面大小和Android版本。在调试运行Android应用程序时,eclipse会自动运行,使得用户可以脱离真机环境进行开发调试应用程序。

(三)手机终端应用程序终端设计

下面以本设计的Android应用程序来说明应用程序开发的流程。

(1)新建Android Project新项目:FileNewProject菜单,选择Android Project选项创建;

(2)填写项目文件夹名称、应用程序名称、包名、Activities程序名称、最低的SDK版本;

(3)点击Finish按钮,完成新建任务,eclipse自动生成代码模板。

接下打开Android项目layout文件夹中的mian.xml文件进行应用界面设计,在这里我们使用是LinearLayout、FrameLayout两个布局管理器进行界面排版,将图片按钮、文本显示组件、编辑框等排版如图5、图6所示。这两个界面对应着两个**.xml文件。

图5 密码验证界面

图6 风扇控制界面

经过界面编辑器排版完成后,应该为按钮设置监听器,添加触控事件,实现人机交互,这些工作要在Android的JAVA文件中实现。部分代码如下:

public class FanActivity extends Activity {

private ImageButton kaiguan = null;

…//变量声明

Protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.fan_main);

this.kaiguan = (ImageButton) super.findViewById(R.id.kaiguan);

….

this.kaiguan.setOnClickListener(new ClickEventImp());//设置监听事件}

class ClickEventImp implements View.OnClickListener {

public void onClick(View v) {

…//事件处理}

在图5显示的界面是为手机和电脑网关进行密码验证而设计的,在编辑框输入电脑IP和密码,然后点击确定按钮就会向运行在电脑上的服务器端发起连接和发送数据进行验证。图6是为手机向wifi控制器发送控制指令而设计的,点击其中的任意一个按钮,都会向控制器发起连接,发送数据。两者都是一个SOCKET编程的客户端程序。

值得注意的是,Android应用程序用JAVA语言编写,而电脑上运行的网关控制软件是在C++环境中编写的,两者在进行通信时需要处理好以下四个问题:

(1)JAVA和C的数据类型存储的字节数不同,如long型,JAVA以8字节存储;C以4字节存储,在通信前要进行数据类型转换;

(2)Socket是按字节传输数据,JAVA中只有byte是一个字节,应将其他类型都转换为byte数组存储再用于通信传送;

(3)虽然JAVA的byte类型和C的unsigned char都是一字节存储,但C的unsigned char取值范围是0--255,JAVA的byte类型取值为-128—127。处理C语言的字符串时,JAVA需要进行转换来解读C语言的unsigned char;

(4)对于超过一字节的类型数据,高低字节传输次序也是一个值得注意的问题。intel系列采用的是高字节在后传输,而motorola系列采用的是高字节在前传输。

解决好以上几点才能保证通信过程中不出现乱码,提高信息解析效率和正确率,所以必须在Android客户端根据上述4点情况编写一个数据转换类来帮助解决问题。

四、结束语

本设计实现了Android手机系统、电脑网关和wifi红外控制器之间通信连接,达到了利用wifi红外控制器发射红外信号控制家电的目的。该系统的创新点在于通过普通家庭就具备的wifi网络,结合当前流行的Android手机,既不必改造传统家电的设计,又能方便地控制日常家庭环境中不同区域的家用电器。该方案的实施费用不高,可以广泛应用于智能家电的控制。另外也赋予了智能手机新的应用方向,为智能家居的发展提供了一条新颖的实现途径。

参考文献:

[1]刘骊,陈玮.PDA遥控红外家电设备初探[J].红外技术(Infrared Technology),2004,26,2:P7.

[2]李现凡,高建荣.基于SOCKET编程接口的局域网即时通信系统的开发实现[J].常州轻工职业技术学院学报,2006,12(4):P14.

[3]杨丰盛.Android应用开发揭秘[M].北京:机械工业出版社,2010:P18.

[作者简介]林锐文(1990.05-),男,广东揭阳人,广东工业大学,学生,学士,研究方向:楼宇智能化。

推荐访问:家电 操控 智能 研究 手机