基于Arduino的XBee与Yeelink结合的温湿度监控网络的搭建

李旷琦 黄梓钊 蔡志岗



摘 要:以Arduino为开发平台,借助XBee模块完成ZigBee局域网组网,利用Yeelink互联网开放平台搭建了一个远程温湿度监控系统。系统以Arduino UNO为控制板,在局域网内利用XBee模块无线传输温湿度传感器所采集的数据,以W5100以太网模块作为ZigBee无线网络网关,实现数据从ZigBee网络向互联网传输。该系统可以实现对温度、湿度等数据的实时采集;通过互联网访问Yeelink可以获取信息,进行在线监测;在数据监测出现异常情况时通过Yeelink向终端发出报警信息,使终端蜂鸣器发出声响,从而提醒周围人,达到报警效果,实现系统的远程实时监控。
关键词: Arduino; ZigBee; Yeelink; 温湿度监控
中图分类号: TN711?34 文献标识码: A 文章编号: 1004?373X(2017)06?0140?04
Abstract: A remote temperature and humidity monitoring system was constructed with Yeelink Internet open platform, which takes Arduino as the development platform, and performs the networking of the ZigBee local area network (LAN) by means of the XBee module. This system takes the Arduino UNO as the control panel, uses the XBee module in LAN to transmit the data acquired by the temperature and humidity sensors wirelessly, and employs the Ethernet module W5100 as the ZigBee wireless network gateway to transmit the data from ZigBee network to the Internet. The system can realize the real?time acquisition of temperature and humidity data. The information is acquired by accessing the Yeelink through Internet to execute on?line monitoring. If the abnormal situation of data monitoring occurs, the system sends the alarm information to the terminal through Yeelink, and makes the terminal buzzer send out the sound to remind the people around, which can realize the alarm effect and remote real?time monitoring of the system.
Keywords: Arduino; ZigBee; Yeelink; temperature and humidity monitoring
0 引 言
無线传感网络(Wireless Sensor Network,WSN)由大量的传感器借助一定的无线网络协议组成,能在一定区域内采集、传输、存储和处理相应的感知信息[1]。
无线传感网络的研究与应用中,Arduino作为一款基于单片机并且代码开源的硬件平台,十分适合用于低成本无线传感网的终端控制;ZigBee是由ZigBee联盟制定的一种可工作在2.4 GHz,868 MHz,915 MHz三个频段上无线自组网技术标准[2],适用于通信数据传输速率要求低、距离短、低功耗的使用场合,因此在传感器网络中应用非常广泛;Yeelink是国内一个对个人用户免费开放的物联网云平台,能借助互联网的优势,实现传感器数据储存、查看、操作等云功能。
本文使用Yeelink作为传感网络云服务器,通过传感器采集数据,借助ZigBee进行局域网内的无线传输,最后借助以太网模块,实现数据向Yeelink的上传,完成湿度监控系统的搭建。该监测系统,可以实现环境远程监控,遇到特殊情况可以远程操控,发出报警,有利于财产保护、日常监管、突发情况预警等。
1 系统框架
本文设计和搭建的无线传感探测系统,由多个终端对应一个协调器组成的ZigBee无线传感网络进行数据采集,以协调器作为局域网网关,Yeelink作为互联网端的数据存储与监控平台[3],实现数据从实验室采集到互联网的上传与监控。用户通过电脑或移动终端登录Yeelink,获取相应的数据信息,实现远程监控。具体来说,ZigBee网络采用星形拓扑,由两个终端A和B加上一个协调器构成。终端A探测温度,终端B用作湿度探测,两个终端采集相应的数据经过ZigBee无线网,传递至协调器端,协调器端利用W5100以太网模块与路由器相连,利用互联网,将数据传送到Yeelink进行存储。
当用户在远程观测到数据出现异常时,可通过Yeelink开关控制功能向终端发出报警信息,报警信息通过互联网传递给协调器端,再经过ZigBee发送给终端,终端在接收报警信息后,驱动蜂鸣器工作,发出报警。系统的具体功能图如图1所示。
2 硬件设计
本文系统采用Arduino UNO,核心处理器为ATmega328,具有14路数字输入/输出口(其中6路可作为PWM输出),6路模拟输入,一个16 MHz晶体振荡器,一个USB口,一个电源插座,一个ICSP header和一个复位按钮。同时UNO预置了Bootloader程序,不需要其他外部烧写器,可直接通过USB下载程序[4]。
温度传感器:LM35系列温度传感器,其输出的电压线性地与摄氏温度成正比,输出电压与摄氏温度一一对应。其工作电压范围4~30 V灵敏度为 10.0 mV/℃,精度在 0.4~0.8 ℃(-55~150 ℃温度范围内),重复性好,低输出阻抗,可单电源和正负电源工作。
湿度传感器:DHT11 数字温湿度传感器,其相应的技术参数为:DC 3.3~5.5 V的供电电压;湿度方面,20~90%RH的湿度测量范围,5%RH的测量精度以及1%RH的湿度分辨率。
蜂鸣器:电磁式蜂鸣器,由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。其接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性振动发声。
ZigBee模块:XBee S2模块,工作频段2.4 GHz,采用802.15.4协议栈,通过串口与Arduino间进行通信,支持点对点通信以及点对多点网络。其基本的参数为:工作电压3.3 V,电流50 mA,最大通信速率250 KB/s,功耗1 mW 输出(0 dBm),通信距离可达100 m。
以太网模块:W5100以太网模块,采用堆叠式设计,直接插到Arduino上,可组成简单Web服务器或者利用网络控制读写Arduino的接口数据。
完成以上硬件设备的物理连接,采用C语言编程,通过Arduino基础开发环境内集成的GCC开源编译器将C语言编译成二进制文件并通过USB端口,写入Arduino平台[5],实现Arduino控制的工作流程,完成系统搭建。
3 工作流程与代码
系统主要由终端、协调器端、Yeelink服务器端三部分构成,分别完成传感数据的采集、传感网络的组建以及数据的传输、数据的云端存储等功能。根据终端、协调器端的功能设计,写入相应的Arduino代码,并对Yeelink服务器端进行设置,从而实现整个系统的逻辑功能。
Arduino的代码编写有着固定的流程和规范,每个程序只有一个setup( ),一个loop( )。当setup( )函数执行完后,就会循环执行loop( )函数内的代码[6]。因此Arduino的代码实现中,setup( )函数主要完成相应的初始化工作,而loop( )函数内完成相应的功能。
3.1 终 端
终端主要功能是采集传感数据,并利用XBee模块透明传输模式(Transparenet Operation),直接替换控制系统中串口间的传输导线,实现无线数据传输[7],将传感器数据发送至协调器;同时监听和接收协调器的报警信息,驱动蜂鸣器,实现报警功能,其工作流程图见图2。
对于终端的XBee模块,首先要通过X?CTU软件进行相应的配置,包括个人局域网ID,即PAN ID的配置,接着配置目标地址的高低位。每块XBee无线模块的背面都有一个64位序列号地址,地址高位部分0013A200,它属于DIGI预先分配的地址空间,而每块模块地址的地位部分都是惟一的。XBee模块间的相互通信是根据其对应节点的序列号地址来进行的[8]。
XBee模块配置完成后,连接传感器和Arduino可以实现温湿度的探测。终端在进行数据探测的同时,监听来自协调器端的信息,没有报警信息时,与蜂鸣器相连的管脚输出低电平,当接收到报警信息时,使与蜂鸣器相连的管脚输出高电平,从而发出报警。其代码如下:

if(Serial.available() >0 //判断是否有来自协调器端的信息
recv=Serial.read(); //接收字符的读取

digitalWrite(warning,HIGH);//输出高电平,蜂鸣器发声报警
delay(1 000); //延迟1 s
}

}

3.2 协调器端
协调器的主要功能是接收来自ZigBee局域网的传感数据并将其传至Yeelink,监听来自互联网端的报警信息,若有报警操作,将此消息通过ZigBee发送至对应终端,其工作流程如图3所示。
协调器作为局域网的网关,通过广播的形式向局域网内所有终端设备节点发送信息,因此X?CTU会将其目标地址默认地设置为广播地址。在ZigBee协议初始化后,协调器通过向周围结点发送广播信标帧以寻求设备同步,终端结点收到协调器广播帧时,得到协调器的地址和信道,通过此信息便可申请加入网络[9],完成系统组网。系统组网完成后,将实现数据在ZigBee局域网内数据的传输。实现协调器接收终端传感器数据的功能部分代码如下:
if(Serial.available() >0){ //判断是否有来自终端的数据信息
recv=Serial.read(); //接收的第1个字符读取
if(recv == ′B′) { //判断是否为B端的信息
Serial.println("the data of B is received "); //提示字符
int a1= Serial.read(); //接收的第1个字符读取
int a2= Serial.read(); //接收的第2个字符读取
a3=a1*10+a2-528;
//利用ASCII码与十进制码对应数字相差48将两次接收到的数据重新组合成接收的数据
}

W5100以太網模块与Yeelink服务器通过DHCP协议进行初始化建立联系。DHCP协议采用客户端/服务器模型,主机地址的动态分配任务由网络主机驱动。当设备登陆网络时,服务器会向客户端发送包含分配的IP地址、子网掩码、DNS服务器和网关等信息的数据包,实现IP地址信息的动态配置[10]。
协调器成功连接服务器后,将传感数据进一步传输至服务器。函数sendData(),利用HTTP协议,实现传感数据向服务器上传的功能:
void sendData(intthisData,int flag) {
//如果连接成功,利用80端口
if (client.connect(server, 80)) { //发送HTTP POST请求

intthisLength = 10 + getLength(thisData);
client.println(thisLength); //计算传感器数据长度

client.print(thisData);

}

函數getData(),监听并获取用户通过Yeelink发送的报警信息:
voidgetData(int flag) {

if (client.connect(server, 80)) { //发送GET请求

client.print(SENSORIDS[flag]);
//通过flag来获取不同开关信息

}

以上函数发送POST请求和GET请求来上传数据和接收服务器的返回信息,从而完成对终端的控制。

if (returnValue.charAt(returnValue.length()-1) == ′1′)

else if(returnValue.charAt(returnValue.length()-1) == ′0′)

当协调器监听到来自服务器端的开关状态值为1时,说明用户发出了报警信息,则向终端发送报警信息,而监听到开关状态值为0时,说明状态正常,不用发送报警信息。
3.3 Yeelink服务器端
Yeelink物联网云平台为用户提供传感器云服务。其通过实时数据处理,提供安全可靠的状态监控[11]。要使用Yeelink,需进行注册并创建相应的传感器设备,最后调用官方的API。API key用来授权对设备、传感器的数据等操作。在Yeelink中创建一个设备,会产生一个URL,该URL的一个HTTP POST请求会为指定的传感器创建一个新的数据点,使用此API来为传感器存储历史数据[12]。设置完成后,Yeelink服务器可以用作数据的云端存储和远程访问,再结合之前的传感器、ZigBee组网以及协调器的功能,温湿度监控网络的搭建基本完成。
4 系统工作的实际测试
给Arduino上电以后,A端探测温度,B端检测湿度,并将数据通过ZigBee进行传输。协调器端数据上传至Yeelink上。此时可以通过协调器端的串口监视与Yeelink网页查看传感器工作情况以及数据的发送情况。系统实际测试过程中,Yeelink网页上对应显示的数据如图4所示。
经测试,监控系统所探测的温度、湿度等传感数据能够顺利上传至Yeelink服务器上,系统的监测功能正常实现。同样,通过改变Yeelink上创建的报警开关状态,终端的蜂鸣器能根据开关状态发出或者停止报警,其控制报警的功能能够正常实现。
为了验证设备工作的稳定性。给设备长时间供电并采集数据,设备工作持续工作时,湿度曲线平稳,变化不大,湿度探测的功能基本正常,能连续长时间工作。和湿度设备一样,温度终端所测温度变化与实际相符。温度探测的功能正常。
5 结 语
本文工作以Arduino作为开发平台,利用传感器、以太网模块、ZigBee无线模块以及互联网平台Yeelink搭建了一个能够探测环境温湿度的监控系统。实现了环境数据的采集及实时上传。并且具有报警功能。通过该系统,实现了系统对实验室长期监测的功能。本文所搭建的系统,采用分布式布局,重点解决了ZigBee无线网络内数据收发的编码转换以及多点通信过程中的识别判断问题,可以进行拓展,利用更多节点扩大检测范围。系统将ZigBee无线网络以及互联网结合起来,在局域网内利用ZigBee无线协议进行传输,减小了采集布线对监控环境本身的影响,增大了探测点设置的灵活性,而结合互联网,实现了远程监控。最后,本系统实现具有数据的双向流通,可实现对温湿度查看以及远程报警的功能,增加了系统在监控网络中的实用性。
注:本文通讯作者为蔡志岗。
参考文献
[1] AKYILDIZ I F. A survey on sensor network [J]. IEEE communications magazine, 2002, 40(8): 102?114.
[2] 王锦.无线网络传感器应用综述[J].中国科技纵横,2013(9):45.
[3] 杨增汪,陈斯,顾明亮.基于XBee的无线振动信号检测传感器节点设计[J].煤炭技术,2010,29(12):51?52.
[4] 王家兵,杨志群,吴洪明.Arduino高精度静压液位测量与控制系统[J].仪表技术与传感器,2013(8):44?46.
[5] 何泽骅,刘国华.基于Arduino的数控稳压电源设计[J].现代电子技术,2012,35(20):63?65.
[6] SCHMIDT M. Arduino: a quick?start guide [M]. US: The Pragmatic Programmers, 2011.
[7] 朱志伟.XBee无线数传模的应用测试[J].电子制作,2014(3):42.
[8] TITUS J A.例说XBee无线模块开发[M].北京:机械工业出版社,2014:3?8.
[9] 胡小俊,赵济景.基于ZigBee?GPRS的土壤墒情检测系统[J].现代电子技术,2014,37(6):59?61.
[10] LEWIS W.思科网络技术学院教程:网络基础知识[M].北京:人民邮电出版社,2009:57?58.
[11] 卞晓晓,方为建,李凡.基于Yeelink的远程室内空气检测系统设计与开发[J].电脑编程技术与维护,2015(10):26?27.
[12] 杜一腾,迟宗涛.基于Arduino与Yeelink平台的实时环境监测系统[J].技术纵横,2014(10):27?28.