当前位置:文档之家› 基于CoAP协议的数据采集网关设计

基于CoAP协议的数据采集网关设计

基于CoAP协议的数据采集网关设计

摘 要: 针对呼伦湖流域环境大数据采集的需求,同时为了解决不同厂商协议标准的不兼容性,设计了一种基于CoAP协议的数据采集网关。详细讨论了CoAP协议的基本原理和实现方法,并在开源系统RT-Thread和微控制器STM32的软硬件平台上实现。给出了系统整体设计以及各部分软硬件设计,实验结果表明,该设计方案可行,具有传输效率高、兼容性较好的特点。
关键词: 数据采集;网关;STM32;RT-Thread;CoAP
0 引言
近年来,呼伦湖流域生态面临着严峻的挑战,水域污染加重、湖底淤积、生物多样性下降、湿地萎缩等问题日益突出[1]。目前,呼伦湖流域环境监测系统的信息化建设还处于起步阶段,监测点不足、基础数据不完善、数据采集系统自动化程度较低、监测数据不能通过网络共享等问题使得政府部门很难及时有效地做出应对措施。同时,由于各大厂商的技术缺乏兼容性,很难将不同的协议兼容使用。在这种背景下,本文设计了基于CoAP协议的数据采集网关,对多个监测点的传感器数据进行CoAP数据格式转换,上传远程数据库,积累生态环境大数据,为政府决策提供支持。
1 系统概述
基于RT-Thread的CoAP协议网关系统是在传感器节点数据采集基础上,对多个传感器节点的数据进行CoAP数据格式转换,并与远程数据库进行数据交互,实现环境监测数据网络共享的效果[2]。整体设计框图。

2 硬件设计
硬件设计框架图。

传感器节点选择ST公司出产的增强型系列微控制器STM32F103RBT6作为主控制器[3],选择DALLAS半导体公司出产的1-Wire单总线数字温度计作为环境温度采集设备,选择I2C标准通信接口的16位数字输出型环境光强度模块BH1750FVI作为光照强度采集设备。
CoAP网关节点选择ST公司出产的高性能微控制芯片STM32F407ZGT6作为主控制器,该控制器具有符合IEEE 1588 v2标准要求的以太网MAC 10/100[4],同时提供了先进的外设和标准的通讯接口;选择体积小、功耗低、全能型的以太网收发器LAN8720A作为以太网PHY。
串口转ZigBee模块DRF1605H作为传感器节点与CoAP网关节点之间数据交互的桥梁。该模块基于CC2530F256芯片,运行ZigBee2007/PRO协议,具有ZigBee协议的全部特点以及上电自动组网的特色。在传感器节点中,该模块被设置成Router节点使用;在CoAP网关节点中,该模块被设置成Coordinator节点使用。
3 CoAP协议原理及实现
CoAP协议是为物联网中资源受限设备制定的应用层协议[5]。它是一种面向网络的协议,采用了与HTTP类似的特性,核心内容为资源抽象、REST式交互及可扩展的头选型等。客户端应用程序通过URI标

识来获取服务器上的资源,对资源可以进行GET、PUT、POST和DELETE操作。CoAP具有报头压缩、UDP传输、支持资源发现、支持缓存、异步通信等特点。CoAP协议的数据报格式。

CoAP包含一个紧凑的二进制报头以及扩展报头。基本报头只有短短4 B,后面紧跟着扩展选型和有效负载。报头各个部分字段的含义如下:Ver表示CoAP协议的版本号,默认情况下置1;T表示报文的类型:CON类型、NON类型、RST类型、ACK类型;TKL表示选型Token所占的字节数;Code表示消息的类型:请求消息、响应消息或者是空消息;Message ID表示消息编号,用于重复消息检测、匹配消息类型等。
CoAP协议的传输层默认使用UDP协议,为了解决UDP传输的不可靠性,CoAP协议采用了双层结构,定义了带有重传的事务处理机制,并采用尽可能小的载荷,限制了分片。CoAP协议栈视图。

事物层(Transaction Layer)用于处理节点间的信息交换,同时提供组播和拥塞控制等功能;请求/响应层(Request/Response Layer)用于传输对资源进行操作的请求和相应信息。CoAP的双层处理方式使得CoAP没有采用TCP协议也可以提供可靠的传输机制。
CoAP官方推出了一定量的库文件,方便用户在自己的设备移植使用CoAP。本设计是在RT-Thread操作系统环境下进行的,其LWIP协议栈组件能够提供CoAP所需的UDP协议[4],通过编程实现CoAP标准格式数据报就可实现CoAP网关与远程数据库之间的CoAP数据上传。自定义的CoAP数据结构图。

在实现CoAP数据结构的过程中使用到了几个接口函数:coap_pdu_init函数,用来完成CoAP数据报报头初始化;coap_add_token函数,用来完成添加Token选项;coap_add_option函数,用来添加Option选项;coap_add_data函数,用来添加有效负载选型。在实现的过程中,每一个函数都会改变CoAP数据报结构,必须按照上述顺序调用。
使用维基百科收录的Microcoap-master库来检测上述CoAP实现方法的可靠性。Microcoap-master是一个小型服务器端程序包,支持客户端对“light”资源的GET、PUT、POST操作。在LINUX环境下执行make./coap运行Microcoap-master,CoAP网关发送对“light”资源的PUT操作请求,同时使用wireshake抓包软件进行网络数据抓包,截取的网络数据包。

图6中(a)图抓取的是CoAP网关向Microcoap-mster服务器发送对“light”资源CON类型PUT请求的数据报,其中标识的部分41 03 12 34表示包头Header,49表示选型Token,b5 6c 69 67 68 74表示选型Option,31表示负载Payload;(b)图抓取的的是Microcoap-master服务器对于该CON类型报文做出的ACK类型响应,其中61 44 12 34 表示包头Header,00表示Token,31表示负载Payload,并没有搭载Option部分。实验结果表明,以上所述的CoA

P协议实现方法可行。
4 软件设计
软件设计以RT-Thread实时操作系统基本框架为基础[6],对多任务进行线程化管理。RT-Thread操作系统是采用面向对象风格设计、C语言实现的开放源码的RTOS,其突出的特点是小型、实用和可剪裁性。在RT-Thread中线程是最小的调度单位,线程调度是基于优先级全抢占式的多线程调度算法,支持256个线程优先级;支持创建相同优先级的线程,相同优先级的线程采用设置时间片的轮转调度算法;调度器用来寻找下一个最高优先级就绪线程的时间是恒定的。RT-Thread Kernel核心目前支持多数主流CPU芯片,其bsp分支包含有所支持的各平台代码,移植时选好开发平台后仅需修改rtconfig.h文件即可。
基于RT-Thread操作系统,对于传感器节点和CoAP网关节点进行线程化管理。传感器节点根据任务要求设计了两个线程:rt_sensor_entry负责读取相关传感器数据;rt_dataex_entry线程负责接收解析CoAP网关节点指令,并向其发送传感器自定义数据包。
传感器节点与CoAP网关节点之间的数据交互是通过DRF1605H模块数据透传的方式实现的,为了解决数据在透传过程中的缺失、不按顺序到达等问题,提出了一种自定义的透传数据格式。通过解析数据包中的帧首、功能码、从机地址、结束校验位等信息,就可判断数据包的完整性和正确性。自定义数据包格式。

其中,帧首定义为0xBBEE,占2个字节;长度码表示数据包占用的字节数;从机地址表示节点编号(CoAP网关节点为1号,传感器节点依次为2,3,4…);功能码表示CoAP节点数据查询功能(0)以及传感器节点数据提交功能(1);数据位中存放传感器原始数据(查询功能数据包中的该项为0);结束校验位占用2字节,固定为0x3498。
CoAP网关节点以RT-Thread内核以及LWIP外围组件作为软件平台[7],结构示意图。

根据CoAP网关节点任务的划分,设计了多个线程:rt_dataex_entry线程负责与传感器节点数据交互,并解析传感器节点数据包;rt_coap_entry线程负责将传感器原始数据CoAP格式化;rt_ethsend_entry线程负责定时向远程服务器发送CoAP报文。线程的顺序视图。

5 结束语
本文介绍了基于CoAP协议的数据采集网关设计,通过对相关软硬件实现方法加以分析以及实验测试,证实本设计能够达到预期的效果。本文设计的CoAP协议网关不仅仅适用于呼伦湖流域环境数据采集,根据不同的应用场合,只要对硬件和软件稍作修改即可完成不同的监测任务。本设计在数据采集系统领域具有一定的借鉴价值。

相关主题
文本预览
相关文档 最新文档