无线传感器网络是实现万物互联的基石。在低功耗模式下,基于IPv6实现以太网与传感器网络之间的连接与通信是目前学术界及工业界的研究热点。 本文针对传感器网络与以太网之间的连接问题,使用开源的Contiki系统设计并实现一款多接入6LoWPAN(基于IPv6的低速无线个域网标准)边界路由器,对数据转发速率分别在CC2538和RaspBerryPI平台测试。 实验结果表明,6LoWPAN边界路由器能实现传感器节点与以太网之间的通信,使用MQTT(消息队列遥测传输协议)与CoAP(受限应用协议),能使应用端直接访问传感器节点上具体的某个传感器的数据。 项目背景 无线传感网是由许多无线低功耗嵌入式设备组成的最前沿互联网,它对社会的安全和可持续发展至关重要,比如智能家居和楼宇自动化、医疗健康、能源管理、智能电网和环境数据检测等方面。 目前来说,无线传感网的应用仍然存在很多问题,如传感节点供电、节点地址化、通信距离和硬件平台兼容性等一系列问题。 本文基于6LoWPAN设计并实现传感网边界路由器正是为了适应形势发展的迫切需要。 ■ 文献[1]所使用的是基于GPRS(通用分组无线业务)的社区环境监测方案,其通信使用的是GPRS通信,对于大量的节点不适合,而且还要支付额外的数据流量费用。 ■ 文献[2]使用的是ZigBee(紫蜂)通信,ZigBee通信无法做到节点地址化,且仅限于小型传感网。 ■ 文献[3]虽然使用6LoWPAN传感网,但是其节点只限于具体的几个开发板,如CC2538,不能用于工业应用,而且传输距离较近。 本文针对相关问题,使用6LoWPAN低功耗、节点地址化、对硬件要求低、支持IPv6协议等优点,设计并实现基于6LoWPAN的传感网边界路由器,该路由器可支持市面上大多数硬件平台,在低功耗模式下提高数据通信的距离及数据包的接收率。 需求与总体设计 1.需求分析 对系统进行需求分析,要求满足以下几点: ■ 能使IP网络中的客户端直接通过边界路由访问传感网节点的数据; ■ 要求节点数量庞大,且节点地址在全球网络中唯一; ■ 要求传感器网络系统完整,必须有数据采集、数据传输、数据显示、数据存储。 2.总体架构 根据6LoWPAN边界路由器功能需求,本文设计并实现了一款基于6LoWPAN的边界路由器。 图1 6LoWPAN协议栈 6LoWPAN协议栈如图1所示,其为上层的IPv6层与下层的MAC层提供了一个适配层。该层用于处理IPv6与MAC层的数据交互。 图2 6LoWPAN传感网总体结构 根据图2所示的传感网总体结构,该网络由三部分组成,分别为传感网节点、边界路由器、IP网络。 传感网节点功能为数据采集与传输;边界路由器主要是数据包的转发,连接IP网络与传感网;IP网络为普通的网络,该网中可以部署服务器。 边界路由器的实现所用的是“Linux+SLIP-Radio”技术,其中Linux用于配置6LoWPAN相关服务、SLIP-Radio用于无线传感网节点之间的数据通信。 由此,实现6LoWPAN边界路由器不依赖具体硬件平台,用硬件的串口就可以实现6LoWPAN边界路由。 硬件设计与实现 1.6LoPWAN边界路由器硬件设计 6LoWPAN传感网边界路由器,实现了IP网络与传感网络之间的融合。本文所有的测试都是在IPv6环境下完成的。 6LoWPAN边界路由器硬件部分由ARM控制器、以太网模块、射频模块、电源模块组成,其原理如图3所示。 图3 6LoWPAN边界路由器硬件原理示意 2.节点硬件设计 传感网的节点主要完成数据采集功能,节点一般由传感器、电源、微处理器、AD转换器和射频模块组成。传感网节点硬件原理如图4所示。 图4 节点硬件原理 在这里,边界路由器和传感节点都没有指定使用具体的硬件平台,因为研究的6LoWPAN边界路由器不依赖具体的硬件平台,其服务运行在Linux系统中,射频模块与Linux通信用的是串口,这使得6LoWPAN传感网支持的硬件平台更多,使用更方便。 软件设计与实现 1.6LoWPAN边界路由器实现 从图2中可以看出,节点用IEEE 802.15.4协议与其它无线节点进行数据通信。 由于节点没有以太网口,这里的eth是把节点与ENC28J60模块连接后产生的,其中Linux中配置Packet Filter(分组过滤)、uIP协议栈、RPL(远程启动服务)及WebServer(Web服务器)四个核心服务[4]。 当在浏览器输入6LoWPAN的管理地址时,显示的界面实际上就来自Webserver。图5为6LoWPAN边界路由的管理界面测试结果。 图5 6LoWPAN管理界面 2.CoAP通信协议 (1)CoAP协议实现 上文已经实现6LoWPAN边界路由器,其目的是构成通信子网,但在传感器网络中,还需要资源,CoAP协议可以完成数据的传输。 本部分内容论述CoAP协议的实现,并且能让客户端通过6LoWPAN边界路由器访问CoAP服务器节点。图6是CoAP协议的通信原理。 图6 CoAP 通信原理 从图6中可以看到,CoAP协议的服务器端是运行在节点上的,CoAP服务器与客户端的通信是通过6LoWPAN这个边界路由器来连接的[5]。 在服务器的程序中需要配置传感器,对传感器进行初始化设置,服务器监听来自客户端的请求,当收到客户端对服务器的请求时,通过get和post方法对客户端响应,最后将传感器采集的数据发送到客户端。 (2)CoAP协议测试 Copper是FireFox浏览器提供的一个CoAP协议客户端插件,其运行在FireFox浏览器中,在测试CoAP服务器时,可以完成ping、get、post等服务器操作。在FireFox上安装Copper插件,对CoAP服务器进行测试[6],其界面如图7所示。 图7 CoAP 协议通信测试 3.MQTT通信协议 (1)MQTT协议实现 MQTT是物联网中的一个重要通信协议,该协议的传输层是基于TCP的一个协议,其协议的实现过程中,有三个角色,分别是PUBLISHER、SUBSCRIBER和BROKER[7]。图8为MQTT协议的通信原理图。 图8 MQTT协议通信原理 (2)MQTT服务器 6LoWPAN边界路由器实现过程中,MQTT协议所使用的服务器是Mosquitto,这个服务器相对EMQ服务器来说,搭建起来比较简单。 (3)MQTT发布客户端实现 配置服务器参数,定义了MQTT服务器的ID、密码、默认端口、发布时间等信息。这里定义了订阅客户端向代理服务器发送一次消息的时间间隔。 MQTT客户端配置如下: 在这个结构体中,定义了MQTT客户端的基本信息,如客户端IP、服务器密码、连接服务器的端口号等信息。 消息发布publish()函数中主要定义了几个操作变量。先把BOARD_STRING、seq_nr_value、clock_seconds()中存放的字符串格式化,其中BOARD_STRING中存放的是“Zolertia Re-Mote platform”,seq_nr_value中存放的初始值是0,用clock_seconds()函数来获取当前系统的时间,以秒为单位来获取。 再判断格式化是否成功,成功后修改缓冲区的值,将格式化后的结果存放到buf_ptr变量中,接着格式化def_rt_str,def_rt_rssi两个字符串,def_rt_str中存放客户端的IPv6地址信息。 完成上面数据的格式化后,调用mqtt.c里面的函数mqtt_publish(),将函数的服务器地址及主题信息,传到信息发布的服务器BROKER上。 (4)MQTT订阅客户端实现 发布客户端主要作用是数据采集与传输,MQTT的客户端是在节点上实现的,它从传感器获取数据,然后在开发板对数据进行简单计算与分析,通过6LoWPAN网关连接到服务器。但对于用户来说,不能直接到开发板或从服务器上查看数据,因此,这里需要编写一个客户端,通过客户端从本地访问云服务器上的MQTT服务器来查看数据。 系统测试 为了把数据更好地展示给用户,需要使用JSP+Servlet技术编写一个Web服务器,在Servlet中实现CoAP客户端与MQTT客户端对服务器上的数据进行处理,最后存储到数据库中,图9为CoAP协议获取的温度值测试结果,图10为MQTT协议传输数据的测试结果。 图9 CoAP获取数据 图10 MOTT获取数据 本文使用6LoWPAN理论知识,设计并实现6LoWPAN传感网边界路由器,该路由器能连接IP网络与传感网络,使用Linux系统与SLIP-Radio,使边界路由器与节点不依赖具体硬件平台,通过SLIP就可以工作。 IPv6地址的使用使节点地址化,解决网络地址缺乏的问题,低功耗通信协议的使用解决了无线传感器网络的供电问题。使用CoAP与MQTT实现基于UDP和TCP的数据通信,使传感网数据传输更安全可靠。 参考文献(上下滑动查看↓) *基金项目:2017年度赛尔网络下一代互联网技术创新项目;第五届“下一代互联网技术创新大赛”甲组一等奖 作者:张占平、何辉、邢敬宏、寇海阳、王鹏(兰州工业学院信息中心) |
|