基于ZigBee 的嵌入式智能家居网关设计
2023-12-08刘基成田祎然李国锋
刘基成,田祎然,李国锋
(牡丹江师范学院,黑龙江牡丹江,157000)
0 引言
随着物联网所依靠的信息采集、数据传输等技术的快速迭代,以及人们对生活品质安全性、舒适性与便捷性的不断提高。物联网的相关技术逐渐渗透到各个领域。智能家居被定义为“配备计算和信息技术的住宅,它可以预测和响应居住者的需求,通过家庭内的技术管理来提升舒适度、便利性、安全性和娱乐性”。基于物联网的智能家居,采用无线局域网技术可以为各种设备提供更强的灵活性、流动性,更符合家庭网络简洁性、便捷性、模块化、开放性及独立性的通信特点,表现为利用无线通信设备(同居住环境中的各种物品松耦合或紧耦合)将日常生活相关的各种子系统协调地结合在一起,并与Internet 连接起来,进行监控、管理信息交换和通讯,实现家居智能化。因此将无线网络技术应用于智能家居已经成为主流趋势[1]。
在智能家居系统中,传感器用于监测温度、湿度、煤气泄漏等一般参数。因此,随着无线网络技术的发展,人们更喜欢低数据速率、长电池寿命、不太复杂的协议作为高数据速率协议的替代方案。
ZigBee 技术是一种基于IEEE802.15.4 标准的无线网络技术,主要用于小范围内多节点间的协调通信,只需要很少的能量就能以自组网多跳的方式进行数据传输。因此被认为智能家居领域内的热门通信协议。并且由于Wi-Fi 技术具有传输速率高、建设便捷等特性,将二者在智能网关中结合应用可以弥补ZigBee 技术只能进行低速率传输的缺陷,还可以将系统与Internet 连接,便于用户在远程通过支持Wi-Fi的设备控制家居设备。
本文在现有研究成果的基础上提出了一种智能家居体系结构,并设计了该体系结构中的关键部分,如智能网关和智能终端软件等。本文提出的体系结构具有廉价实用的特点。并且在智能家居管理应用程序中运行良好。系统解决了以下问题:(1)实现安全、节能、舒适、便捷的房屋管理;(2)将家庭安全防护系统与电源控制系统集成在一起,统一数据采集和控制;(3) 进行节能策略控制和远程控制,必要时发出警告;(4)集成不同的通信协议如WSN 中的Zigbee、局域网中的TCP/IP 等。(5)数据管理,安装了一个名为SQLite 的轻型数据库,用于管理家庭网关的真实数据和历史数据。
1 智能家居系统的架构及工作流程
该系统网关由控制器模块(家庭网关核心)、LCD 显示模块、Wi-Fi 模块、ZigBee 模块(网络协调器)、终端家居设备(烟雾探测器、语音助手、台灯、智能开关等)构成[2]。系统整体结构如图1 所示。
图1 系统整体架构示意图
系统中的无线传感器网络是信息的采集节点和动作的响应节点,是整个系统的关键部分,网关起着信息传递的作用,实现了异构网络ZigBee 与Wi-Fi 之间的交互通信,无线传感器网络收集的信息首先传送到网关。远程用户发送的信息通过Internet进入家庭网关,在网关中对数据进行分析,并根据设定好的控制策略发出控制指令,通过无线局域网传输给智能终端设备。为了进一步对数据进行控制与处理,协调器集成了数据库而且将所有家居设备的状态存储在其中。此外,用户在智能终端设备上的操作也通过网关传输到底层传感器网络。
2 系统硬件结构实现
该系统硬件电路由MCU(Microcontroller Unit)电路、Zigbee 无线传输模块接口、Wi-Fi 模块、晶振电路、电源模块等构成。系统硬件结构如图2 所示。
图2 系统硬件结构示意图
MCU 选用意法半导体公司推出的STM32F103RCT6,它是一款带有 Cortex-M3 的低端 32 位 ARM 微处理器,具有独立的指令总线和数据总线来获取指令和数据。可以同时访问,互不影响。这种不占用指令总线的数据访问方式提高了系统的性能。STM32F103RCT6 作为系统的主控制器,负责处理各种任务和协调不同模块之间的通信。电源引脚(VDD 和VSS)连接到主电源电路,提供稳定的电源。LED模块通过数据引脚与MCU 的GPIO 引脚连接,触摸信号引脚(INT)连接到MCU 的中断引脚。
本系统采用TI 的CC2530 芯片作为ZigBee 无线通信的核心。CC2530 使用的8051 CPU 内核是单周期8051 兼容内核。在串口通信模式下,将CC2530 的TXD 引脚连接到MCU 的UART 接收引脚(PA2),将CC2530 的RXD 引脚连接到MCU 的UART 发送引脚(PA3)。RESET 引脚连接到MCU 的PB12 引脚,用于复位CC2530 模块[3]。ZigBee无线通信模块接口电路如图3 所示。
采用ESP8266 芯片作为 Wi-Fi 模块控制器,ESP8266属于串口型Wi-Fi,支持802.11 b/g/n/e/i 标准。采用TCP/IP 协议进行无线数据传输。由于ESP8266 芯片已经高度集成,使得其外围电路设计比较简单,只需要1 个无源晶振、1 个SPI Flash 及若干电阻、电容、电感。将ESP8266 的TXD 引脚连接到MCU 的UART 接收引脚,将ESP8266 的RXD 引脚连接到MCU 的UART 发送引脚。
3 家庭网关软件设计与实现
连接两个或多个相互独立的网络时,家庭网关作为建立在传输层以上的协议转换器发挥着重要作用。通常情况下,家庭网关接收一种协议的数据包后,将其转换为另一种协议的格式进行转发。Zigbee 协议栈采用分层结构,包括物理层、数据链路层、网络层、应用支持层和应用层,每一层为上一层提供服务。采集节点将节点地址信息和监测数据打包成Zigbee 帧形式,并发送给网关节点。当数据通过物理介质进入网关后,首先经过Zigbee 协议栈的解封装过程,得到原始数据。网关可以利用操作系统上的应用软件对原始数据进行必要的处理。随后,原始数据经过TCP/IP 协议的封装,通过USB 接口与Wi-Fi 通信模块相连接[4]。Wi-Fi 网卡通过AP 路由器将数据传输到Wi-Fi 网络中,并通过AP 路由器接入Internet,从而实现网关与Internet 的连接。为了实现系统的监测和控制功能,数据帧的设计包括前导码、数据模式、目标地址、数据长度、数据信息和校验等部分。其中,数据信息字段进一步划分为方向位、功能类型和数据。方向位分为上行和下行两种情况,上行传输监测数据,下行传输控制命令。
■3.1 ZigBee 无线网络软件设计
本系统采用星型拓扑结构,即将一个协调器作为中心节点,连接所有的终端设备。这种星型拓扑结构适用于设备数量较少且分布范围不大的小规模智能家居系统。由于通信距离较远,可以确保各个设备与协调器之间的稳定通信。然而,如果协调器发生故障,则整个系统将失去功能。
Zigbee 协议定义了协议的 PHY 层和 MAC 层。本设计模块采用TI 的CC2530 作为主芯片。它基于 Z-stack 协议栈。ZStack 协议栈对Zigbee 网络的每一层进行封装,以函数的形式实现具体的功能,并为用户提供API 编程接口。
因为ZigBee 无线网络是由事前被定义为协调器的节点来建立的,所以协调器软件程序的设计是ZigBee 组网的核心。主要负责建立和管理 ZigBee 网络,通过串口实现与客户端的信息传输,如终端节点接入网络的应用、数据采集、命令解析等。网络建立的过程如图4 所示。具体步骤如下:(1)初始化协议栈。(2)创建协调器,每个网络只能有唯一的协调器,初始化PAN 协调器的操作在事先设定好的设备上进行。(3)选择PAN ID 和协调器的短地址,PAN ID 通过侦听其他网络的ID 然后选择一个不会冲突的ID 来获取,每个PAN 协调器都已经有一个64 位固定的MAC 地址,但是作为组网的标识,还必须分配给自己一个16位的网络地址,即短地址,通常被定义为0x0000。(4)选择射频频率通道,PAN 协调器进行一次能量扫描来找到一个相对空闲的通道,并以此建立网络[5]。
图4 ZigBee 标准网络建立过程
协调器的主要功能是对ZigBee 网络中的各个子节点进行管理,将上位机监控终端下达的测控信息通过ZigBee 网络发送到需要监控的子节点,接收各子节点的状态信息并将信息发回给上位机进行数据处理和保存。ZigBee 网络协调器设备软件流程如图5 所示。
图5 协调器软件流程
网络组建成功后,PAN 协调器设备将开放对应加入网络的请求应答,在启动网络的同时,还要配置网络的最大深度、最大路由设备个数以及最多的子节点个数,以便在子设备加入网络时应用,在应用程序中,通过eEventId 的值来确定网络是否已被启动[6]。
一个设备如果需要加入网络,首先要完成自己的初始化过程,然后进行通道扫描,它将在特定的频率通道中发送信标请求,协调器检测到信标请求后,将回应相应的信标请求来标识自己。网络中出现PAN 协调器和至少一个子节点后,网络就可以进行数据传输。
■3.2 Wi-Fi 模块软件程序设计
Wi-Fi 模块用于Wi-Fi 模块中的数据收发,支持三种通信模式:AP 模式、STA 模式、AP+STA 模式。本文将其配置成AP 组网方式,通过无线路由与其他设备交换数据.
(1)Wi-Fi 模块上电后,初始化硬件和软件;(2)设置Wi-Fi 模块的参数,包括Wi-Fi 网络的热点名称和密码,连接超时的时间,多连接的设置;(3)判断网络中是否有客户端连接。如果连接成功,可以在输入正确的密码后发送数据或接收命令。如果连接不成功,判断其他客户端的访问。
■3.3 嵌入式数据库SQLite 的实现
SQLite是一种轻量级的嵌入式关系型数据库管理系统。它被设计为无服务器、零配置的数据库引擎,意味着它不需要单独的服务器进程或配置来运行。SQLite 非常小巧,核心库的大小通常不超过几百KB(根据编译选项和版本而定)。SQLite 的使用非常简单,只需要创建数据库文件即可开始存储和检索数据,无须繁琐的配置过程,SQLite 可以在处理器速度较慢、内存容量有限的设备上运行,同时不占用大量存储空间和系统资源,这使得SQLite 成为嵌入式系统开发中常用的数据库解决方案[7]。
SQLite 数据库的编译主要有以下步骤:(1)获取SQLite源代码,从SQLite 官方网站下载最新版本的SQLite 源代码,并解压到本地目录;(2)配置交叉编译环境:确保已经安装适用于ARM-Linux 的交叉编译工具链,并将其添加到环境变量中。(3)配置SQLite 编译参数:进入SQLite 源代码目录,在命令行中执行以下命令:配置SQLite 编译参数:进入SQLite 源代码目录,在命令行中执行以下命令:./configure --host=arm-linux --prefix=/path/to/install。(4)在命令行中执行以下命令进行编译和安装:
(5)移植到目标ARM-Linux 系统:将安装好的SQLite库文件和头文件拷贝到目标ARM-Linux系统中的相应位置。通常,库文件应该被放置在/lib 或/usr/lib 目录下,头文件应该被放置在/include 目录下。(6)在应用程序中使用SQLite:在ARM-Linux 平台上开发的应用程序中,可以使用SQLite 的API 进行数据库操作。确保在应用程序中链接SQLite 库文件,并包含正确的头文件。
4 系统测试
为验证该Wi-Fi—Zigbee 网关的性能,进行了如下实验以测试两组性能指标:(1) 在无障碍物和干扰状态下,距离增加时数据丢包率和响应时间的变化情况;(2) 在有障碍物情况下,分别测试了多组数据,在不同传输距离下丢包率和响应时间的性能变化。测试图如图6 所示。
图6 三种网关在不同环境下的测试图
实验结果表明,在无障碍物传输距离不超过50m 的情况下,Wi-Fi—Zigbee 网关相比Wi-Fi—蓝牙网关具有明显优势。随着传输距离的增加,丢包率稳定在约3%左右,相较于有线网关高出约2%左右,而响应时间波动在1ms 以内。这足以满足正常家居环境的通信需求,并且其接收功率较低,非常适合家庭使用。
在有障碍物和干扰的情况下,Wi-Fi—Zigbee 网关的丢包率和响应时间略高于有线网关,但远优于Wi-Fi—蓝牙网关。这意味着Wi-Fi—Zigbee 网关在面对有障碍物和干扰的复杂环境时表现良好,具有较好的稳定性和性能。
因此,实验结果证明了Wi-Fi—Zigbee 网关在智能家居系统中的优势,尤其在无障碍物传输距离较短的情况下表现出色。它能够稳定地传输数据并具有较低的接收功率。即使在有障碍物和干扰的情况下,它仍然比有线网关效果稍差,但明显优于Wi-Fi—蓝牙网关。
5 结语
考虑到人们对智能家居的新需求和以往智能家居系统集成度不高的问题,本文提出了一种较为先进的智能家居网关设计和实现的方案,将系统划分成几个不同模块逐一阐述,以低价高性能STM32 处理器为主控制器,内嵌TCP/IP协议的Wi-Fi 模块用来连接本地与远程网络。以 ZigBee 和Wi-Fi 为主构成的网关为系统各层次的连接提供了便捷的平台。实验结果显示该系统具有很好的通用性、通信传输性能稳定优良,使得用户能高效地控制智能家居设备。