基于ZigBee自组网络的智能家居系统设计

2022-09-21 01:34王刚王楚楚余亚东金宝根
电子测试 2022年17期
关键词:线程网关客户端

王刚,王楚楚,余亚东,金宝根

(绍兴文理学院 数理信息学院,浙江绍兴,312000)

0 引言

随着计算机网络的快速发展和科学技术的全面进步,人们对生活的便捷性要求越来越高,万物互联的时代慢慢来临,更加智能的日常已经成为必然。然而由于传统家居布线复杂、安装维护成本高昂且存在安全隐患等问题,使得智能家居无法真正实现。因此本系统在短距离通信中查找可行方案。通过对比 ZigBee、WiFi、蓝牙、超宽带通信(UWB)、近场通信(NFC)等等无线传输技术,发现ZigBee通讯技术作为一种基于IEEE802.15.4协议的短距离无线通信技术,具有功耗低、复杂度低、成本低等特点,是取代传统家居布线方案的极好的一种选择[1]。因此本系统决定采用ZigBee通信组建局域网络,作为智能家居系统的通讯网络。至于嵌入式Web服务器,常用的有Boa、GoAhead和Thttpd三种,经过对比虽然各有优势,但考虑到本设计的需求,Boa服务器具有功能强,速度快,安全性高,占用资源少的功能特点,十分适合资源相对有限的嵌入式系统,因此本方案采用的家庭网关选用了Boa服务器,并采用CGI设计与HTML客户端通信,从而实现客户端对本地家电的操控以及环境监测[2]。

1 系统设计

此系统除了M0端并没有设置其他ZigBee终端节点,因此以M0上的风扇、LED等外设作为家电控制的终端节点进行演示。如下图所示系统整体分为三个部分,M0端负责对环境参数进行采集显示,家庭网关充当服务器的作用、网页客户端用于人机交互。其中自组家庭通信网络由ZigBee协调器及其终端节点构成,协调器在家庭网关(A7)及终端节点(M0)之间充当连接桥梁的角色,实现了将M0端采集到的数据信息上传到家庭网关,同样将用户端的操作指令通过家庭网关下传到各终端节实现控制家电的开关。家庭网关和用户客户端采用Internet进行双向通信,服务器和终端节点以自组网络双向通信,因此借助家庭网关为中转,利用Zigbee网络即实现了用户和终端节点的双向通信。

图2 M0数据采集端示意图

2 硬件设计

2.1 数据采集端及家庭网关设计

系统设计M0数据采集端主控芯片选择了NXP Semicon ductors的LPC11C14,该处理器基于ARMCortex-M0内核,是一个低功耗、低成本、32位的处理器,主频可达50MHz,足以满足数据采集端的任务需求。M0端采用的是DHT11温湿度复合传感器对温度及湿度进行采集,此外还有数码管风扇、对其采集参数进行显示、LED、小风扇等外设用于对家用电器的操控演示、蜂鸣器模拟报警器报警等。网关设计考虑到价格以及功耗采用的是,具备优秀的性能、主打低功耗的ARM7芯片。

2.2 自组网络设计

ZigBee自组网络是智能终端系统的核心,根据ZigBee在网络中扮演的角色不同,可分为协调器、路由器和终端节点三类,协调器负责组织网络,其允许路由器与终端节点与其绑定并接收两者发送过来的信息。终端节点负责将终端采集的信息发送给ZigBee协调器[2]。考虑到现实实际情况,可以根据家庭范围大小采用不同的传感网络拓扑结构,经过测试在组网简单的星型网络结构,在80米范围内通信均有效可靠,如果终端节点距离协调器过远则可通过树状网络进行通讯,使用路由器在中间作为中转从而延长通信的距离。

Zigbee模块采用CC2530芯片设计和实现,只需在网络节点安装少量的滤波电路和PCB天线。它与高度可靠的短程无线通信协议IEEE802.15.4兼容,并使用CSMA-CA技术解决数据冲突,16-bits CRC技术保证数据传输的准确性,使其通信具有极高的可靠性,虽然通信速率较低但最大数据传输速率250Kbps远远满足此设计的需求。ZigBee模块具有工作、休眠两种状态,功耗低工作状态瞬间电流仅为25mA,休眠状态电流更是几乎可以忽略不计。因此,此设计供电方式采用2节五号电池对其供电,经过理论计算大概可以使用超过半年时间。此外ZigBee的协调器设计还需要串口模块,用于与家庭网关进行通信。

3 软件设计

3.1 网络通信协议及多线程程序设计

家庭网关与协调器之间通信需要协议,家庭网关发送给ZigBee网络的指令操作信息及终端节点采集到的数据信息,在信息发送时需要添加不同的表头进行区分,不同的操作设备也要根据约定好相应的编号用以区分。当消息处理线程得到信息首先会对信息类型进行判断,根据不同的类型信息做出相对应的操作[3]。在这个过程中处理器会开启多个线程,如:数据库线程、LED控制线程、Buzzer控制线程、CGI线程、控制命令线程等,根据接收到的事件不同唤醒不透的线程进行处理。考虑到多线程中对临界资源操作时,可能会产生竞争,出现错误,因此这里我们对各个线程引入了互斥锁、条件变量等同步互斥机制。主线程运行后,各任务线程开始运行,被触发后则唤醒各线程的条件变量,做出相应的处理,处理后继续阻塞等待下一次的唤醒。

以数据库线程为例:创建链表头后一直等待条件变量的唤醒,经过对接收数据信息解析发现表头是约定的环境信息,则唤醒数据库相关的条件变量,唤醒后查看是否有信息,若没有继续等待,若有信息则循环对数据库进行相应的操作,操作完毕继续等待下一次条件变量的唤醒。流程如下图3所示。

图3 SQlite 线程工作流程示意图

LED线程如下图4所示:LED线程一直阻塞等待唤醒,服务器接收到客户端下发的指令后,通过对接收的信息分析对比发现是控制LED小灯的命令,则唤醒LED线程,根据led文件掩码信息,识别是控制的哪个小灯,根据事前约定好的协议封装控制状态指令,拼接后发送给控制端即可以控制对应小灯的亮灭。

图4 LED处理线程工作流程示意图

3.2 数据库设计

软件设计中对数据的存储以及一些初始化参数(报警温度临界值等)存储采用的数据库是sqlite3,该数据库具有C语言函数接口,可以用这些接口很容易地对数据库进行各种操作。例如:在c程序想打开一个数据库即可使用int sqlite3_open(文件名,sqlite3 **)函数,若想对数据库进行增删改查等操作使用sqlite3_exec(sqlite3*,const char *sql,sqlite3_callback, void *,char **errmsg )函数就可以在执行各种sql语句,(const char *sql即需要使用的sql语句,详情使用见sqlite官网)。各线程的激活如数据库的激活以及各种操作是在数据接收线程后面,为区分各种操作命令类型,根据接收端和发送端要约定的协议,接收端接收到数据后即对消息进行解析,根据约定的消息头,分为不同的功能执行不同的工作线程、不同的功能函数。

图5 环境参数存储形式图

如上图温湿度记录存储表为例,数据库中根据存储信息类型的不同,分为不同的表,如用户注册表、环境参数表等。例如,通过对table_select_mask掩码进行与操作,就能标记出是对数据库的哪个表格进行操作。以此类推根据操作掩码,就能识别出不同的操作、根据数据掩码就能区分不同种类的数据,从而将数据存储在数据库中相对应的表中。

3.3 嵌入式服务器与客户端设计

BOA服务器采用HTTP超文本传输协议,是一个功能强大、速度快、安全性高、占用资源少的嵌入式系统服务器。BOA使用需要移植及配置,移植方便,这里不进行详述。服务器和CGI程序之间的通信需要环境变量的协作,由于HTML只能显示静态网页,不能与服务器动态数据交互,因此必须通过表单与服务器交互,来解决用户使用网页客户端的动态交互功能。表单提交方法由METHOD标签的属性所决定,当“METHOD=GET”时,信息是通过 QUERY—STRING这个环境变量来传递。而当“METHOD=POST”,表单信息将通过标准输入来进行读取数据,并用环境变量CONTENT—LENGTH记录发送数据的长度(因为CGI中不会出现EOF,所以读取字节长度绝对不能超过发送数据长度)。

如图6所示,客户端的浏览器与嵌入式Web服务器BOA建立连接,要经过初始化socket、bind、listen等初始化过程,浏览器通过以CGI程序的GET或者POST表单传递方式向Web服务器发送表单,服务器通过分析表单信息,调用不同的CGI,例如小灯开关CGI,报警器CGI等,即实现了用户在网页端动态下发操作指令,通过Boa服务器的处理下发到ZigBee网络的终端节点实现家电的控制。

图6 通讯整体框图

图7 cgi调用流程图

同样,终端节点的信息也可以经过ZigBee协调器发到服务器,继而上传到用户端。最终实现了用户通过电脑手机等智能设备,借助家庭智能网关、ZigBee自组网络能够远程控制家电,查看环境参数。

4 总结

此系统经过验证,能够根据家庭大小所需要,采用不同的ZigBee网络拓扑结构调整通信网络范围大小,根据要操控的家电多少增加或减少ZigBee终端端点,使用方便、稳定可靠,达到了预期的功能,具有一定的现实意义。

猜你喜欢
线程网关客户端
你的手机安装了多少个客户端
你的手机安装了多少个客户端
基于FPGA的工业TSN融合网关设计
实时操作系统mbedOS 互斥量调度机制剖析
基于C#线程实验探究
一种主从冗余网关的故障模式分析与处理
基于国产化环境的线程池模型研究与实现
如何看待传统媒体新闻客户端的“断舍离”?
天地一体化网络地面软网关技术及其应用
基于ETC在线支付网关的停车场收费系统设计