智能家居系统的设计与实现

2018-06-29 06:00赵翠芹施运应赵家祺
物联网技术 2018年6期
关键词:数组串口智能家居

赵翠芹,施运应,潘 洁,赵家祺,韦 魏

(1.河池学院 计算机与信息工程学院,广西 宜州 546300;2.呈贡区洛龙街道办事处党政办公室,云南 昆明 650500)

0 引 言

互联网技术的广泛应用改变了人们的生活方式。从最初的信息共享、邮件发送、聊天到如今的购物、日常消费、贸易交易等,“互联网+”的世界体系已经建立。但这些远远不够,除人之外的物体也需要传递、共享信息。物体苦于无生命无嘴巴,想要传递信息,就必须先获取信息,然后通过通信手段进行传输。传感器充当了物体的“神经元”,完成物体信息采集的使命,从而使物体有了“生命”;物体借助蜂窝网络,RFID,WiFi,蓝牙,ZigBee,LoRa,SigFox和NB-IoT等通信技术把获取到的信息传递出去,这些通信技术充当了网络层的“神经中枢”和“大脑”[1],从而使物体有了“嘴巴”。随着IoT技术的快速发展,入网终端设备已经从手机、电脑跃升到了普通物体。

IoT概念始于1999年,经过10年酝酿,到2009年IoT被正式列为中国五大新兴战略性产业之一[2]。至此,IoT行业可谓“枯木逢春”,进入了“火树银花”式的爆发期。各大企业、高校和科研院所纷纷站队IoT,争取IoT技术的话语权。该趋势可从各种IoT科技的并购浪潮中略窥一二。滴滴、Uber合作发力车联网;日本软银以320亿美元收购英国ARM,高通以470亿美元收购荷兰NXP。并购层出不穷,有了IoT二维码之后,人们过上了扫码登录、扫码付款、扫码上网、扫码进店、扫描上车等“码”上行动的生活。双十一“剁手党”们乐此不疲地买买买,海量交易带来巨大的物流压力,若在包裹上附上IoT标签,则可利用IoT自动识别技术准确无误地快速分拣包裹。如果说WiFi技术打通了网络连接的最后一英寸,那么共享单车则解决了人们出行的最后一公里,无人超市、无人驾驶、智能家居等新概念、新产品层出不穷。从概念到落地生根,再到今天的遍地开花,IoT已经进入到人们生活的方方面面[3]。

智能家居作为IoT在家具行业的实际应用,已经引起了商家的高度关注[4]。本文针对智能家居应用场景设计了一个智能家居系统。该系统采用TI公司设计的SoC芯片作为主控芯片,其内核为8051的CC2530单片机,开发环境为IAR Embedded Workbench,开发语言为C语言。系统组建了具有1个协调器和3个终端节点的WSN。终端节点带有人体传感器、温湿度传感器、光敏传感器和红外反射传感器,分别采集相应环境温度、湿度、光照等数据。终端节点采集数据后,通过ZigBee技术实时传递给协调器;协调器接收多终端数据,并区分信息来自哪个终端,然后通过串口将数据发送给上位机。在PC端使用Visual Studio 2017软件环境、C语言开发了一个用户界面框架IoT平台,该界面简单易操作。实现了通过ZigBee技术来感知环境情况,进而控制家用设备的目的,使人们的生活充满了智慧。

1 总体系统架构

系统由WSN,串口和PC端IoT平台组成,架构如图1所示。协调器下面有2个终端,每个终端连接的外设有温湿度传感器、光敏传感器、红外反射传感器和人体传感器。终端将传感器采集到的数据经过模数转换后发送给协调器;协调器通过串口把接收到的终端数据转发给上位机,最后通过上位机软件将数据展示在用户界面。

2 硬件设计

硬件部分主要包括ZigBee节点的核心板、传感器等。ZigBee节点选用TI公司生产的51结构的CC2530F256RHAR芯片作为CPU。传感器电路原理图如图2所示。

图2 (a)为光敏传感器的电路原理图。U2为光敏感单元,是一个纯电阻元件。U2端与3.3 V直流电压相连接,另一端经过RC低通滤波电路后与CC2530连接。有光源照射时,U2的电阻大概为1~15 kΩ;无光源照射时,U2的电阻值大约为1~2 MΩ,可根据电路元件参数值计算出输入到CC2530的电压。

图2(b)为红外放射传感器的电路原理图。U1为红外反射元件TLP521-1。1,2脚为发射端,3,4脚为接收端。发射端导通发射红外光,在受到人体遮挡时反射,接收端接到红外光信号导通,管脚3输出高电平,导致三极管Q1导通,OUT端输出高电平,LED灯亮。当有人体经过红外反射传感器时,OUT端输出高电平,小灯亮;无人体经过时,OUT端输出低电平,小灯灭。电路中的R1和R2是限流电阻,保护LED灯不被损坏。简言之,红外反射传感器检测到有人,电器自动打开;检测到无人时,电器自动关闭,是一个真正的节能专家,用于点灯、防盗报警等设备。

图2(c)为温湿度传感器DHT11电路连接图。

3 软件设计

软件设计主要包括WSN协议栈应用程序编程和上位机IoT平台开发两部分。

3.1 WSN协议编程

WSN系统在IAR Embedded Workbench软件下开发,借助ZStack-CC2530-2.5.1a协议栈基础编写应用层源码。为了更快更好地进行系统开发,需要理清协议栈的运行机理和应用层源码的实现过程。

3.1.1 协议栈运行机理

ZigBee协议栈中提供了较多集成函数供开发者使用。如果对协议栈的机理和核心函数有一个清晰的认识,那么在项目开发过程中,就可以充分利用协议栈提供的函数实现项目功能。协议栈工作机理如下[3]:

操作系统抽象层(OSAL)的入口为文件ZMain.c中的main函数。在main函数里,系统初始化函数osal_init_system (),启动系统osal_start_system()函数。osal_init_system()函数调用任务初始化函数osalInitTasks(),osalInitTasks()函数负责给每个任务分配一个任务号taskID。osal_start_system()函数可调用osal_run_system()函数。追踪osal_run_system函数后,协议栈中有三个核心变量,分别是保存任务总个数的tasksCnt,指向事件表首地址的指针tasksEvent和tasksArr。tasksArr是一个数组,数组里的每项都是一个函数指针,指向事件处理函数。任务事件处理函数添加在tasksArr数组的末尾,应用层初始化函数添加在osalInitTasks函数末尾。tasksArr数组的下标和osalInitTasks函数里的taskID一一对应。osal_run_system函数的功能是不断查看事件表,如果有事件发生,就处理执行相应的任务事件处理函数。

3.1.2 应用层程序流程

WSN中有协调器和终端节点,红外反射传感器接P0_5,温湿度传感器接P0_7,光敏传感器接P0_1,人体传感器接P1_1,从这四个端口获取数据。节点的工作流程如图3所示。整个工作流程主要分为任务初始化函数和任务事件处理函数。

节点上电复位后,在初始化函数中定义具有SimpleDescriptionFormat_t简单描述格式的节点描述符、串口结构体变量,配置串口参数、I/O口的方向寄存器、状态寄存器和输入输出模式寄存器等。协调器上电初始化后组建网络,并以AddrBroadcast广播模式发送网络信息给终端节点。当有终端节点入网,并有外来消息时,采用osal_msg_receive函数接收消息队列中的消息,并对接收到的消息进行强制类型转换,转换为afIncomingMSGPacket_t类型指针,并对消息头进行判断。如果是AF_INCOMING_MSG_CMD无线数据,则调用接收消息处理函数进行处理;如果是网络状态ZDO_STATE_CHANGE发生改变,则开启相应的定时器;如果是串口指令CMD_SERIAL_MSG,则按串口指令做相应操作。在接收消息处理函数中,根据接收消息的clusterId来区分信号来自哪个终端,并用osal_memcpy()函数把终端号和数据复制到缓冲区,通过串口函数HalUARTWrite()把数据发送给PC机。终端节点主要负责数据采集,红外反射传感器和人体传感器可直接采用数字方式获取数据,只需读取相应IO口的状态即可得到所需数据。光敏传感器获取数据需要模数转换器将模拟数据转换为数字数据,设置ADC输入通道ADCCFG = 0x02,使用单次转换,参考电压为电源电压3.3 V,对P0_1采样,配置寄存器ADCCON3= 0x81。DHT11以单总线方式与CC2530进行数据传输,需传输的数据有40位,具体实现流程如图4所示。

图3 节点工作流程

3.2 上位机IoT平台

上位机IoT平台采用C语言在Visual Studio 2017软件环境中开发。为了给使用者提供一个方便易操作的界面,窗口界面添加了ComboBox组合框,Label标签,PictureBox控件,GroupBox,Button按钮和TextBox文本框等控件,设置了控件的相应name属性值和Text属性值,编写对应控件的回调函数,就可以把串口中获取到的数据展示在用户界面中。数据从串口中获取,需要添加System.IO.Ports和System.Data名称空间。System.IO.Ports中提供了SerialPort类,该类实现了串口资源操作相关功能。用SerialPort()构造函数初始化一个实例,接着调用SerialPort方法GetPortNames()获取当前计算机串口名称数组,并配置与协调器端相同的串口参数。利用串口的ReadChar()方法读取、解析串口数据,展示在用户界面。

图4 温湿度数据采集流程

4 系统实现

硬件电路如图5所示。该电路由1个协调器和3个终端节点组成。协调器上电后进行组网,并以广播方式向外发送消息。终端节点上电后加入网,并以单播方式把采集到的数据周期性地上报给协调器。PC端打开串口调试助手,设置串口相关参数,如图6所示,点击“打开串口”即可收到数据。串口接收的数据是字符串数组,需要解析,如串口接收到“T1DR01DG061LW20CS21%”,字符数组下标0~2分别代表终端节点号数据头、终端编号和终端节点号数据尾部;数组下标3~6分别代表人体传感器数据头、人体传感器是否检测到有人、红外反射传感器监控的电器状态和数据尾部;数组下标7~11分别代表光敏传感器数据头、光照强度和数据尾;数组下标12~15分别代表温度传感器数据头、温度数据和数据尾;数组下标16~19分别代表湿度传感器数据头、湿度数据和数据尾。经数据解析后,将所获取数据展示在用户界面,如图7所示。

图5 硬件电路连接

图6 串口接收数据

图7 用户界面数据显示

5 结 语

本文在TI公司ZigBee协议栈工程项目的基础上,搭建了一个智能家居IoT系统。通过终端设备采集数据,并定时发送数据给协调器,协调器最终将接收到的数据转发给PC机。PC端采用结合了Java和C++优势的C语言开发了一个IoT数据展示平台,把远程终端采集到的数据展示在用户界面,用户可根据界面显示数据,了解监控场景的温湿度、光照和家电状态等情况。该系统具有操作简单、成本低和功耗低等特点,具有一定的使用价值。

[1]郎为民.大话物联网[M].北京:人民邮电出版社,2011.

[2]赵翠芹.应用需求牵引“物联网导论”课程教学改革[J].电脑知识与技术,2016,12(17):148-149.

[3]王小强,欧阳骏,黄宁淋.ZigBee无线传感器网络设计与实现[M].北京:化学工业出版社,2015.

[4]穆鹏.ZigBee与蓝牙组合通信方式在智能家居系统中的应用研究[D]. 南京:南京理工大学,2017.

[5]孙俊杰,张伟,刘洋.一种智能家居系统的实现[J].物联网技术,2015,5(2):74-75.

[6]张为方,张伦宁,尹子悦,等.物联网技术在智能家居控制系统中的应用[J].物联网技术,2015,5(8):52-53,56.

[7]鲁玉军,刘振.ZigBee技术在智能家居系统中的应用[J].物联网技术,2017,7(4):40-43.

[8]潘子辉,沈苏彬,吴振宇.一种基于ZigBee的智能家居自动服务提供方法[J].计算机技术与发展,2018 (1):200-204.

猜你喜欢
数组串口智能家居
JAVA稀疏矩阵算法
浅谈AB PLC串口跟RFID传感器的通讯应用
JAVA玩转数学之二维数组排序
基于Zigbee的无线通信技术在智能家居中的应用
Excel数组公式在林业多条件求和中的应用
USB接口的多串口数据并行接收方法探索
基于蓝牙串口适配器的GPS接收机与AutoCAD的实时无线通信
寻找勾股数组的历程
基于并行控制的FPGA多串口拓展实现
基于LD3320的智能家居控制