张予衎 牛犇 杨晨宇 温如春 韩树人
摘 要:针对智能家居市场的消费者需求,设计了一款基于Android操作系统的智能家居系统。该系统以ARM处理器为控制核心,借助ZigBee搭建家庭局域网以实现家居产品之间的互联,通过GPRS技术实现微处理器与服务器的通信,基于Android操作系统设计用户应用实现用户对家居系统的远程监测和控制。经测试,系统运行稳定,数据通信状态良好,用户可实时监测家居环境参数和控制各类家电的工作状态。
关键词:ARM;智能家居;ZigBee;GPRS;Android操作系统;STM32
中图分类号:TP29文献标识码:A文章编号:2095-1302(2020)03-00-03
0 引 言
从最初提出的设备信息化,时至今日,在物联网技术日趋成熟的条件下,形形色色的智能家电产品不断在市场涌现。但现状是不同品牌产品之间相互独立,无法互联,因此,对于大多数中低收入人群而言,智能家居还仅仅是独立的智能家具。当下家电行业竞争激烈,商场中尚无普遍认可遵循的标准,基于此,团队使用ZigBee搭建家庭局域网来连接家居系统,使其成套化,解决不同产品之间的通信障碍问题。
1 智能家居系统总体设计方案
系统总体设计方案如图1所示。
STM32通过网络模块接收来自服务器的指令,根据指令向ZigBee传感网络发送信号控制相应继电器通断[1],以此实现用户对家居系统的控制;同时,家居工作状态和室内烟雾浓度以及温湿度通过网络反馈至ARM芯片,经网络模块发送至服务器。服务器通过广域网接收和发送Android终端的数据,以实现用户对家居系统的远程监控。
1.1 硬件设计
ARM处理器选用型号为STM32F103ZET6的芯片,它是基于高性能ARM?CortexTM-M3的32位RISC内核处理器,芯片主频高达72 MHz,拥有I2C,SPI,PWM等总线接口,同时具有体积小、性能强、便携性好等优点,能够用于实现设备的控制。
传感器用于获取家居环境参数,主要检测对象为烟雾浓度和温湿度。前者选用MQ-2模块,其输出电压信号类型为模拟量,与被检测烟雾浓度成正比[2]。其输出信号为电压模拟量,该引脚接ARM芯片的I/O口,处理器对模拟量进行A/D转换后输出数字量,即为检测到的烟雾浓度值。温湿度传感器选用DHT11模块,与MQ-2不同的是其输出信号为数字量,传输参数无需预处理。
网络模块选用GPRS GA6模块,编程使用串口发送AT指令形式的字符串即可实现ARM处理器与服务器的连接。
1.2 软件平台
用户层基于Android操作系统开发,使用Java語言编写APP。Android操作系统是基于Linux平台开源的移动设备操作系统,该系统具有良好的可植入性、独立性以及开放
性[3]。本设计基于软件的以上特性得以实现,个人设计的软件只需经过系统测试即可接入Android系统,供安卓手机用户使用。
2 ZigBee家居局域网络的组建
本系统使用ZigBee射频模块组建星形网络拓扑结构[4],由1个网络协调器节点和4个家居终端节点组成。协调器作为“网关”,负责组建家居局域网并与广域网进行连接。首先以能量扫描和主动扫描方式进行信道扫描,选择一个存在最少ZigBee网络的信道作为创建网络并选定网络标识符,等待终端节点加入网络。局域网组建设计流程如图2所示。
当终端节点申请入网时,ZigBee协调器根据ARM命令审核申请,本系统的星形网络结构决定终端节点与协调器节点只能以点播方式通信。协调器接收主机命令数据或向主机发送家居监控数据。局域网通信设计流程如图3所示。
终端节点包括烟雾浓度采集节点、温湿度采集节点以及各类电器控制节点。STM32接收到用户通过Android应用程序设置的命令数据,立即发送给协调器节点,后者以点播方式将控制信号发送给家居终端节点;家居终端节点以反向路径将环境数据显示至Android应用程序中,从而实现对家居的远程控制与环境数据的采集。
3 套接字-客户/服务器通信模式的建立
客户端和服务器端程序使用Java语言编写,分别在软件Android Studio和Eclipse上进行程序打包,两者的连接基于套接字Socket。套接字可以分成两个部分,即IP地址和端口号[5]。在TCP/IP协议的基础上实现两者通信的关键在于指定服务器IP地址和客户端连接端口Port。具体实现方法:服务器端创建一个服务器套接字ServerSocket和一个Socket,前者初始化为new ServerSocket(Port),后者初始化为ServerSocket.accept();对应地,客户端创建一个Socket,其输入参数有两个,分别为所连接服务器的IP地址和Port。双方的套接字创建成功后,服务器端将开启对Port的监听,即等待用户连接[6]。服务器端和客户端程序设计流程分别如图4和图5所示。
Android程序成功连接服务器后,调用Socket的成员函数.getInputStream()和.getOutputStream()便可分别获取套接字的输入流和输出流,从而进行数据和指令的发送和获取。需要注意的是,Android程序中,不允许在主线程里连接服务器,否则会导致程序崩溃而闪退。因此,使用Java在客户端创建套接字时应把相关代码放入一个新的子线程中进行处理。
4 GPRS技术-ARM和服务器的数据传输
GPRS GA6使用串口发送字符串建立ARM处理器与服务器的信息传输通道。GPRS模块内部嵌有TCP/IP协议,STM32处理器通过串口与GPRS模块通信,以实现无线网络的连接[7]。GPRS的上网过程可以分为两个步骤,即附着和上下文激活。前者建立移动设备和GPRS网络之间的通信通道,后者连接移动设备和外部数据网。GPRS和服务器的连接同样基于TCP/IP协议,只需在发送的字符串中包含IP地址和端口号Port即可。