分享

面向技术创新的IPv6物联网数据平台

 高校信息化 2022-09-23 发布于北京

提供物联网节点数据的接入、存储、展示、查询功能,为IPv6物联网节点的多用户管理、控制和监测提供了一个可借鉴的解决方案。

近年来,物联网相关的创新产品层出不穷,如智能插座、智能手表、智能音响等,同时,物联网也是大学生进行创新技术设计开发的重要领域。物联网的高速发展使得接入的设备越来越多,网络的地址需求呈指数级增长,地址不足已经成为影响其发展的瓶颈之一,将物联网与IPv6网络相结合,是解决该问题的重要手段。

在校大学生在进行物联网技术类的创新作品设计时[1],经常会遇到测试数据存储难、查询不便的问题。针对此问题,设计基于IPv6网络和HTTP协议的物联网数据Web平台,旨在提供物联网节点数据的接入、存储、展示、查询功能,实现了多用户数据接入,多节点数据并发传输,并提出一种利用HTTP Header验证的物联网节点接入密钥机制。平台的实现为IPv6物联网节点的多用户管理、控制和监测提供了一个可借鉴的解决方案。

01

平台结构

图1是一种典型的IPv6物联网结构,其无线传感节点采集的数据经由物联网传送至网关节点,再通过网关节点接入IPv6网络,数据最终上传至数据平台。其中,网关节点一般是带有简单操作的IPv6嵌入式设备[2]

图1 典型的IPv6物联网结构

设计IPv6物联网数据平台,主要考虑三方面的因素。

1.传感数据接入

数据从网关节点经由IPv6网络上传至服务器,软件一般基于TCP或UDP协议开发,考虑到校园网IPv6带宽足够满足需求,为了适配不同类型的网关节点设备(如STM32、Arduino、ESP32、CC2538、树莓派等主流的嵌入式硬件),平台在应用层采用HTTP协议,并实现相应的编程接口。

2.平台功能

如图2所示,将平台的用户分为两类:传感节点所属的设备用户(普通用户)和管理员,除了数据接入功能(程序开发接口)之外,应面向传感节点所属用户提供友好的注册、登录、节点设备管理、传感数据曲线绘制、数据管理等功能。

图2 IPv6物联网数据平台功能

3.技术路线选择

综合考虑系统的易用性和后期的可维护性等因素后,选择开源Linux、Apache、PHP、MySQL这一Web服务器组合作为底层架构,通过程序设计实现数据接入、管理等功能。

02

服务器端核心功能

传感数据接入服务器端的方法、用户设备的安全秘钥机制、数据的展示是平台的核心功能。

基于HTTP协议的数据接入

由于平台基于IPv6网络的特点,嵌入式网关节点与服务器(上位机)应使用网络通讯方式,并选择合理、便捷的协议,在服务器端设计程序接口,以接入物联网传感数据。

1.网络通信方式选择

传统的嵌入式系统网络通信多使用Socket通信,Socket是应用层和传输层之间的一个抽象层,将TCP/IP复杂的操作抽象为接口函数供应用层调用,其本质是一种编程接口。Socket作为一种特殊的文件,使用“Open→Write/Read→Close”操作过程实现对应的函数接口,具有较高的通信效率,但不易实现标准化的数据接口,对下位机嵌入式系统的程序开发要求较高。

随着各地IPv6网络带宽的不断扩容,加之物联网数据具有流量平稳、格式固定的特点,主流的物联网平台都选择了更易于在网关节点上实现标准化数据接口的应用层HTTP协议(或轻量级的HTTP协议)。

2.HTTP协议报文结构

HTTP是一种基于请求(Request)与响应(Response)方式、无状态的应用层协议。如图3所示,HTTP协议的报文由报文首部和报文主体组成,报文首部包含服务器或者客户端需要处理的请求或者响应的内容及其属性,报文主体为需要发送的数据[3]

图3 HTTP请求报文

图3显示了使用平台的物联网网关节点作为HTTP协议的客户端向服务器发送的报文结构。其中服务器端的地址为“240e:635:220::5beb”,端口号为“8080”,采用POST方式;在HTTP协议的Header头部自定义“WSN-Key”字段作为用户的验证密钥;物联网节点采集的数据使用JSON格式[4]作为报文主体发送至服务器,JSON数据包括节点设备ID和各传感器的值对,例如,{"id":"12","temp":"23.6","humi":"45"}表示节点设备ID为12,节点上温度传感器采集的值为23.6℃、湿度值为45%RH。

3.服务器端接口设计

服务器的程序接口实际上就是其对HTTP请求报文的处理过程,程序流程如图4所示。服务器在接收到客户端的请求后,在Header首部行ASCII码中提取出自定义的密钥参数,在报文主体ASCII码中提取出JSON值对;然后根据设备ID查询Header中的密钥是否与数据库中存储的用户密钥匹配,若匹配,则将数据存入相应的数据表中供平台Web端使用,从而实现物联网数据的接入。

图4 服务器端程序流程

关键PHP代码如下:

//跨域处理

header('Access-Control-Allow-Origin:*');

//获取HTTP首部行中的参数

$header=get_all_headers();

//密钥WSN-key

$mi=$header["WSN-key"];

//获取POST内容

$post_array=file_get_contents('php://input');

//解析Json,获取对应的变量值

$obj=json_decode($post_array,TRUE);

$id=$obj['id'];

$temp=$obj['temp'];

$humi=$obj['humi'];

//判断及数据库处理

……

密钥机制

前文已经提到在HTTP的首部行中加入了用户密钥,其作用是验证接入平台的物联网设备的合法性。如图5所示,用户基于密钥机制使用平台的步骤包括三方面。

图5 密钥使用步骤

1.用户与节点设备注册

在平台Web端注册账号,系统自动为其分配专属密钥,用户可查看密钥、添加维护物联网节点设备信息。

2.下位机开发

开发物联网硬件节点,将系统生成的密钥通过程序固化到嵌入式网关节点中。

3.数据管理

在物联网数据平台上观测节点端通过HTTP协议上传的原始数据、数据实时曲线,并进行相关的数据管理。

通过“密钥+设备ID”的机制[5]进行数据接入平台的验证,从而保证了节点数据的真实性和节点的可维护性。包含密钥的HTTP请求与响应的验证结果如图6所示,服务器端能够正确解析POST请求报文,验证密钥后,将数据成功写入数据库。

图6 密钥机制协议分析

实时曲线

为了便于用户观测节点所上传数据的变化趋势,基于Echart组件和AJAX设计实时曲线功能[6],基本思路如图7所示。

图7 AJAX实时曲线

1.程序GetData.php根据用户ID和节点设备ID读取存储在数据库中的传感器数据,并将数据处理成JSON格式。

2.程序Chart.php利用JQuery异步定时调用GetData.php,由其传送最新的数据。

3.Echart前端图表的曲线组件解析JSON序列中的值对,将实时曲线显示在页面Chart.php上。

03

节点设备端适配

在物联网系统中,网关节点负责传感节点的数据汇聚、向IPv6网络的数据传输、物联网网络与TCP/IP网络的协议转换,起到了承上启下的作用。因此,节点设备端的重点是网关节点(图1)。

担任网关节点的设备通常是嵌入式硬件[7],如STM32、Arduino、ESP32、CC2538、树莓派等,下面以最常见的树莓派和STM32微控制器为例说明网关节点如何与平台接口适配。

树莓派作为网关节点

使用树莓派(Linux操作系统)作为物联网网关的优点是可以充分利用Python语言语法简洁的特点,代码及说明如下:

import requests

import json

……

#服务器端接口地址

url="http://[240e:635:220::6be4]:8080/iot6/curl.php"

#JSON序列:包含设备ID、传感数据

data={"id":"12","temp":"23.6","humi":"45"}

#首部行:密钥、数据格式说明

headers={'Content-type':'Application/json',

'Accept':'text/plain',

'wsn-key':'1746682314'}

#执行 POST 请求

r=requests.post(url,

data=json.dumps(data),

headers=headers)

……

STM32作为网关节点

基于ARM内核的STM32系列微控制器由于其优越的性能,已发展为当前最主流的嵌入式硬件。STM32微控制器作为网关节点的核心是支持TCP/IP网络协议。目前,无论是ST公司官方的CUBE还是ARM的MDK中均已集成轻量级的TCP/IP协议栈LwIP,下例C语言演示了利用LwIP的Socket函数上传传感数据的方法。

#include"cJSON.h"

#include"lwip/sockets.h"

#include"lwip/err.h"

#include"lwip/sys.h"

……

intmain()

{

……

//构造 HTTP POST 请求

strcpy(pbuf,"POSThttp://[240e:635:220::6be4]:8080/iot6/curl.php");

strcat(pbuf,"HTTP/1.1\r\n");

strcat(pbuf,"Content-Type:

Application/json\r\n");

//密钥

strcat(pbuf,"wsn-key:

1746682314\r\n\r\n");

//构造 JSON 序列

root=create_root_object(12,23.6,45);

json=cJSON_PrintUnformatted(root);

strcat(pbuf,json);

……

//创建Socket

sock_fd=socket(AF_INET,SOCK_STREAM,0);

//连接服务器

ret=connect(sock_fd,(structsockaddr

*)&server_addr,sizeof(structsockaddr));

//发送 HTTP POST 请求

ret=send(sock_fd,buf,strlen(buf),0);

……

}

……

通过上面的两段典型程序可以看出,无论是何种嵌入式设备,网关节点适配平台数据接口的思路均为:构造传感数据JSON序列格式;构造标准的HTTPPOST请求协议格式;发送HTTPPOST请求。该思路可以应用到其它嵌入式硬件网关上。

下一代互联网IPv6已经成为大学生技术创新开发的重要领域,本文针对校园网上缺乏相关数据存储和展示平台的问题,设计并实现了一种基于Web的IPv6物联网数据平台;提出了一种基于密钥机制的设备验证方案,利用HTTP协议的POST请求设计标准的传感设备接入程序接口;实现了AJAX数据实时展示、数据维护、多用户、POST/CURL多种方式数据传输等功能。

同时,本文对平台服务器端的核心功能进行了详细的设计与实现,以树莓派和STM32微控制器为例实现网关节点的通用演示代码。下一步,计划利用WebSocket技术改进数据接入方式,以实现物联网数据的高速接入。

目前,平台已面向兰州工业学院校园网提供服务,并逐渐成为电子信息工程、网络工程、物联网工程等专业的学生的重要创新实践平台。

参考文献(上下滑动查看全部内容)

[1]范群鹏,吴琼,宋彦喜.浅析互联网高速发展下的大学生创业教育之路[J].中国管理信息化,2021,24(9):216-218.

[2]张占平,何辉,邢敬宏等.基于6LoWPAN设计并实现传感网边界路由器[J].中国教育网络,2021(06):43-45.

[3]王派虎.物联网平台系统的设计与实现[D].深圳:深圳大学,2020.

[4]龚成莹,邢敬宏,胡银保.基于JSON的Android移动终端与PHP及MySQL数据通信[J].工业仪表与自动化装置,2013,(01):63-65,69.

[5]杨伟,何杰,万亚东.物联网通信协议的安全研究综述[J].计算机科学,2018,45(12):32-41.

[6]王兆益,周爱平.基于ECharts的数据可视化系统设计[J].计算机与网络.2020,46(19):60-62.

[7]陈文艺,高婧,杨辉.物联网网关实时双向通信模块化设计[J].计算机工程与设计.2021,42(05):1215-1221.

基金项目:赛尔网络下一代互联网技术创新项目(NGII20190306);甘肃省高等教育教学成果培育项目(2019-139)

作者:龚成莹、常玮、何辉、韩玮、石全民、吴国杰(兰州工业学院)

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多