无线传感器网络、嵌入式处理技术、无线网络技术和无线控制技术的发展, 给智能家居领域的发展带来了实际可行的应用成果。同时, M2M 技术的应用使智能家居系统的设计更加人性化。
目前, 国内外很多公司的智能家居系统已经实现稳定可靠的室内电气设备的控制和各种计量设备(煤气、水和电) 的无线抄表, 但许多公司的智能家居系统还缺乏一种可以迅捷地进行室内电气设备工作状态检测和控制以及可供用户随时查询、记录抄表数据的手持智能显示终端。笔者设计的智能家居系统数字显示终端是一个基于ZigBee 技术和USB OTG 技术的用户和智能家居系统互动的媒介,可有效地帮助用户实现对智能家居系统的监测和抄表数据查询。
1 数字显示终端
数字显示终端是基于M2M 技术的智能家居系统唯一最终面向用户的部分。采用ZigBee 技术和USB OTG 技术完成对无线设备的监控和抄表数据的查询、记录。
1.1 基于M2M 技术的智能家居系统
基于M2M 技术的智能家居系统主要通过Zig-Bee 技术与相关的无线设备组建无线局域网, 采集无线传感器的数据和输出控制信号, 并由坞站将采集到得数据汇总封装后通过M2M网关和Internet传送到提供相关家居服务的公司的服务器上。它主要由5部分组成: 低功耗数据采集系统、数据汇总传输系统(又称坞站), 数字显示终端, M2M网关和服务器, 并主要使用在居家能源管理和居家自动化两个方面。
1) 居家能源管理。坞站将管理安装在家庭中的几个低功耗无线传感器(煤气、水和电)。所有坞站从无线传感器采集到的信息在对接模式时被传送给数字显示终端。数字显示终端将使用文字、图形、图标和图片把这些信息显示出来。
2) 居家自动化。这种情况类似于居家能源管理, 只是其使用的无线传感器可以管理输入输出信号以控制室内电气设备, 如门窗、室内照明等设备。
本套智能家居系统主要将M2M 技术融合在网关, 而最终面向用户的只是数字显示终端(见图1)。
1.2 数字显示终端的设计原理与方案
数字显示终端是智能家居系统与用户互动的关键部分, 通过ZigBee 技术与安装在室内的低功耗无线设备建立无线局域网, 监控无线设备的工作状态, 并通过USB OTG 高速数据传输接口与坞站连接, 将坞站采集到的抄表数据以图、表或文字的形式显示出来, 同时将检测到的室内低功耗无线设备的工作状态发送到服务器, 供用户远程登录服务器监测和控制低功耗无线设备。数字显示终端工作在两种模式下, 一种是对接模式进行, 即通过USBOTG 高速数据传输接口和坞站连接进行数据交换;另一种是移动模式, 即不与坞站连接的工作状态,这时它只能检测和控制相关低功耗无线设备。USBOTG 接口不仅可以传输数据, 当数字显示终端与坞站对接时, 可以通过USB OTG 接口给数字显示终端的蓄电池充电。
数字显示终端主要由无线模块、显示模块、数据存储模块、数据传输接口、电源部分和用户导航键6 部分组成(见图2)。
2 数字显示终端的实现
数字显示终端处理器选用LPC1758.LPC1758是一款基于ARM Cortex-M3 内核的处理器, 集成了USB2.0功能, 包括USB 主机、USB 从机和USBOTG, 拥有512 KB 的Flash和64 KB 的SRAM.无线模块选用的是ZICM2410P0-1模块。显示模块选用DMT32240T035_01WN 模块。数据存储模块选用4 GB 的Flash存储器, 也可升级为16 GB 的存储空间。因处理器已集成OTG 功能, 所以由处理器和USB 收发器芯片ISP1302 共同组成数据传输结论。
导航键具有上下左右导航和选择键。电源部分选用可通过USB 接口充电的蓄电池(5 V~500 mA), 电池容量最小为600 mA/h, 全功能模式供电24 h,休眠模式供电240 h.数字显示终端的软件部分是由μCOS-II 实现。
2.1 数字显示终端的硬件实现
数字显示终端(见图2) 由6 部分组成, 其中主要是无线模块和数据传输接口的实现。
1) 无线模块的实现。无线模块是基于ZiGBee技术的, 该技术是一种在900 MHz 及2.4 GHz 频段, 近距离、低复杂度、低功耗、低数据速率、低成本的双向无线通信技术。它由ZICM2410P0-1 芯片和外围电路组成(包括上电复位电路和工作指示电路)。
ZICM2410 芯片包括多个通用I/O 引脚、定时器、UART 和SPI 等, 而且还有硬件语音编解码器,独有的IIS/SPI/UART 音频输入输出接口, 扩展出500 KB/s 或1 MB/s 的无线传输速率, 通过PCB 走线构成天线, 103 dB 的射频链路预算, 1.5 V 时RX灵敏度为-97 dB/m, 1.5 V 时射频TX 功率为+6 dB/m.在外围电路的设计中, 通过ZICM2410 的UART与LPC1758 处理器连接, 为了保证程序的稳定性和射频性能, 采用了复位芯片CAT809E, 无线模块采用F 型天线拓扑结构, 支持全向辐射模式。为了保证天线的性能发挥, 数字显示终端的主板上要有足够多的接地面, 并且不要在模块的天线下方布线,确保PCB 走线和其他元件远离天线。
2) 数据传输接口的实现。数据传输接口的电路主要是由处理器芯片LPC1758 和USB 收发器芯片ISP1302 组成, 接口插头选用Mini-A插头。处理器LPC1758 集成了USB2.0 功能, 支持OT 模式, 数据传输接口电路。
LPC1758在设计USB OTG接口电路, 需要外接1个USB收发器ISP1302,LPC1758和ISP1302通过I2C总线连接通信,LPC1758内部的收发器负责控制USB信号切换, 而ISP1302 负责实现OTG 功能。此时,LPC1758内部的收发器在VP/VM模式下工作。
3) 其他部分的硬件实现。数字显示终端其他部分还包括显示模块、数据存储模块、电源部分和用户导航键。DMT32240T035_01WN 显示模块集成的功能非常齐全, 它通过RS232 直接和处理器LPC1758 连接, 但在电源的处理上要确保最终接到显示模块上的电压不低于5 V.数据存储模块选用KFW4G16Q2M-DEB6 NAND FLASH.用户导航键采用普通薄膜式按键。电源部分选型比较重要, 作为数字显示终端的能量来源, 不仅要满足显示模块的电压5~6 V, 电流不低于130 mA, 而且能接受USB接口充电, 电池容量不低于600 mA/h.
2.2 数字显示终端的软件实现
数字显示终端的操作系统选用μCOS-II 实时操作系统。它是一种简单高效、源代码公开的实时嵌入式操作系统, 具有良好的扩展性和可移植性, 被广泛应用到各种嵌入式处理器上。
μC/OSII 的核心源代码不用修改, 移植中需要修改的是涉及处理器的OS_CPU_C.C, OS_CPU_A.
ASM, OS_CPU.H 三个文件。
1) OS_CPU.H 文件包含μC/OSII 所需要的常量、宏和自定义类型等。
OS_CPU.H 定义的数据类型。在这次移植中μC/OSII 重新定义了数据类型。
typedef unsigned char BOOLEAN;
typedef unsigned char INT8U;
typedef signed char INT8S;
typedef unsigned short INT16U;
typedef signed short INT16S;
typedef unsigned int INT32U;
typedef signed int INT32S;
typedef float FP32;
typedef double FP64;
typedef unsigned int OS_STK;
typedef unsigned int OS_CPU_SR.
不同处理器的堆栈增长方向是不一样的,LPC1758 的堆栈是从高地址往低地址增长的,OS_STK_GROWTH设为1, 程序为:
#define OS_STK_GROWTH 1.
2) OS_CPU_C.C文件。在OS_CPU_C.C定义的C函数中,OSTaskStkInit()函数与处理器相关,所以移植代码需要修改该函数。其程序为(初始化任务时调用此函数初始化任务使用的堆栈)。
OS_STK * OSTaskStkInit (void (*task) (void
*p_arg),void *p_arg,OS_STK *ptos,INT16U opt)
{
OS_STK *stk;
(void) opt; //防止编译警告
stk=ptos; //装载栈顶指针, 即堆栈数组最后的地址模拟中断发生的堆栈情况
*(stk)=(INT32U)0x01000000L; //xPSR
*(stk)=(INT32U)task; //PC, 任务入口
*(stk)=(INT32U)0xFFFFFFFEL; //R14(LR)
*(stk)=(INT32U)0x12121212L; //R12
*(stk)=(INT32U)0x03030303L; //R3
*(stk)=(INT32U)0x02020202L; //R2
*(stk)=(INT32U)0x01010101L; //R1
* (stk) =(INT32U)p_arg; //R0, 输入参数p_arg 模拟任务进程, 保存其他寄存器到堆栈
*(stk)=(INT32U)0x11111111L; //R11
*(stk)=(INT32U)0x10101010L; //R10
*(stk)=(INT32U)0x09090909L; //R9
*(stk)=(INT32U)0x08080808L; //R8
*(stk)=(INT32U)0x07070707L; //R7
*(stk)=(INT32U)0x06060606L; //R6
*(stk)=(INT32U)0x05050505L; //R5
*(stk)=(INT32U)0x04040404L; /R4
return(stk);
}
3) OS_CPU_A.ASM 文件。μC/OSII 的移植需要编写5 个简单的汇编语言函数。
OS_ENTER _CRITICAL (): 关闭中断源;
OS_EXIT_CRITICAL (): 重开中断源;
OSStartHighRdy (): 运行当前优先级最高的任务;
OSCtxSw (): 一个任务放弃CPU 使用权时调用;
OSIntCtxSw (): 在退出中断服务函数OSIntExit() 中被调用, 实现中断级任务切换。
LPC1758使用OSPendSV()函数快捷地进行上下文切换。OSPendSV()的C语言表述程序为OSPendSV: 关中断;
if (PSP ! =NULL)
{
//保存R4~R11 到任务堆栈SP_process;
OSTCBCur>OSTCBStkPtr = SP_process;
}
OSTaskSwHook ();
OSPrioCur = OSPrioHighRdy;
OSTCBCur = OSTCBHighRdy;
PSP = OSTCBHighRdy>OSTCBStkPtr;
//从新任务堆栈中恢复R4~R11;
/恢复中断;
//异常返回;
完成上述工作后, 只要再根据目标板的实际情况编写Target 目录中的3 个文件, μC/OSII 就可以运行在处理器上了。
3 重点解决数字显示模块的组网问题
1) 角色介绍。ZigBee 标准网络定义了3 种角色, 分别是协作员、路由和端节点。
协作员(coordinator) 负责启动整个网络, 它是网络的第一个设备, 协作员选择一个信道和一个网络ID, 随后就可以启动网络。
路由(router) 的功能是允许其他设备加入网络, 协助网络中其他终端设备通信。
端节点(end device) 没有特定的维持网络结构的责任, 它可以选择睡眠或唤醒两种工作状态, 功耗小, 可使用电池供电。
2) 网络拓扑。ZigBee 网络有星型网、簇型网和网状网3 种组网方式(见图3)。如果直接使用IEEE 802.15.4 底层的还有点对点模式和点对多点模式两种组网方式(见图4)。
智能家居系统综合运用了星型网和点对多点模式的组网方式。由坞站作为路由, 负责管理整个家居系统构建的ZigBee 网络, 其他低功耗无线传感器、无线控制设备和数字显示终端作为端节点。其中低功耗无线传感器、数字显示终端与坞站采用星型网组网方式, 数字显示终端和无线控制设备采用点对多模式(见图5)。
4 结束语
数字显示终端通过采用ZigBee 技术和USB OTG技术, 实现了室内低功耗无线设备的稳定监控和数据采集及存储, 并以友好的用户界面和便携性能改进了智能家居系统和用户的交流方式, 使用户能更加方便地监控到家用低功耗无线设备的工作状态和查询抄表数据。