=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l ";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=" ";
if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="
";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
(function(){var g=s.createElement("div");g.innerHTML="
";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"+d+">"},F={option:[1,""," "],legend:[1,"
","
"],thead:[1,"
"],tr:[2,"
"],td:[3,"
"],col:[2,"
"],area:[1,"
","
"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
","
"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="
"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/
联系我们
电话:(852) 2838 3620
邮箱:sales@silverwing.com.hk
地址:香港新界葵涌葵昌路50号葵昌中心4楼02室
IoT网关平台与应用物联网网关和通用网关平台设计
来源:
时间:2017-08-14 10:13:33
浏览次数:
IoT网关的设计挑战
节点连接: 将网关连接到物联网节点,需要选用一种近距离射频(RF)通信技术。选择射频技术时需要比较各种参数,例如频带、调制方法、信道数量、数据速率、延迟、稳健性等。此外,还要考虑本地行业法规的相关规定。如果是节点类型相同的同构网络,射频技术选择就比较容易。相反,如果网内有多种不同的节点,有不同的需求,射频选择就会复杂很多。
后台连接: IoT网关与节点的连接可以使用近距离射频技术,而网关与互联网的连接则需要远距离通信技术。选择这项技术时需要考虑带宽需求和本地现有可用的连接技术,还要考虑是否是关键应用。因为每个地区的网络连接技术都不尽相同,所以准备多个后台连接方法是一个不错的主意。
管理服务器: 物联网节点作为独立的实体,通常不接受网络设备(通过网关)的访问请求。较为普遍做法是通过中央服务器管理网络节点,同时IoT网关为服务器提供通信支持,因此,我们需要选择网关与管理服务器之间的通信协议。
本地智能: 在真云架构中,节点将全部数据发送到云端进行处理和控制。不过,这种设定并不是很理想,因为毫无价值的数据也会发到云服务器,导致带宽浪费、服务器负荷增加,甚至连接断开时还会丢失数据。边缘计算概念解决了这个问题。如果IoT 网关在本地承担大部分决策工作,只向云端发送过虑后的有价值的数据,系统运行将会变得更加高效。出于灵活性考虑,网关决策逻辑可以由服务器设定。本地智能程度和类型取决于实际应用,如果会影响网关设计决策,应给予深度考虑。
需要考虑的功率因素: 网关电源也会影响我们的设计定案。因为广泛用于物联网设备,所以传感器网络应尽可能从环境中汲取能量。
数据安全: 这是决定大规模物联网能成败的关键要素。随着网络成更多应用(某些应用实际上是关键应用)的重要组成部分,数据安全变得更加重要。安全问题应落实到每一个设计阶段,而在设计任务全部完成后再增加安全功能的做法是错误的。
可维护: 这是一个经常被忽视的需求。历史经验告诉我们,没有系统是完美无缺的。不管部署前做过多少测试,部署后还会发现安全缺陷、隐患和漏洞。IoT网关和节点必须支持现场维护和更新功能。设备维护不应只依赖远程维护,还应有更多的联网方法可选。
下面我们详细讨论现有联网技术,以及每种连接技术可用于哪些场景。
节点连接技术
目前,蓝牙、Wi-Fi、NFC、ZigBee是大家非常熟悉的无线通信技术。此外,新兴联网技术,例如Sub GHz、Thread、ANT、Z-Wave,可直接用于智能家居、智慧城市、智能照明和智能表计。 根据实际应用情况,功耗、数据速率、工作频率、电池续航能力是决定选择哪一种或一些联网技术的主要因素。本文后面的表1比较了当今主要无线通信技术的特性。
后台连接
网关与管理服务器(后台)的连接需要选择回程连接技术以及通信协议。回程连接是IoT网关到ISP互联网服务提供商端点之间的远距离连接。2G/3G/LTE等移动通信技术是当前最热的回程链路技术。此外,智能路灯等应用还可以使用电力线通信(PLC)技术。高带宽应用可以选用光纤通信技术。没有被移动网络覆盖的边远地区,可以选用卫星通信或微波点对点连接技术。
通信协议
有很多通信协议可用于IoT网关与云服务器之间的通信。这里我们讨论一些比较热门的技术及其优缺点。
Plain HTTP: 这是目前普及度最高的网络协议,被服务器厂商广泛接受,得到互联网标准的支持,兼容性问题最少,无缝支持RESTful API。不过,这项技术的缺点是开销太大,体现在HTTP报头和基于文本的格式方面。Plain HTTP虽然运行在TCP之上,但还是一种无状态协议,不适合即时通信应用。客户端必须发送一个请求信号,才能收到服务器的应答(命令)。为收到服务器的更新信息,客户端必须不断地轮询服务器。
CoAP: 资源受限型应用协议,可以认为是二进制版的HTTP,对HTTP协议的一些局限性做了改进,拥有非常准确的报头,支持二进制数据格式,因此降低了开销;可运行在TCP或其它传输层甚至SMS之上。CoAP数据包很容易转换成HTTP包。不过,因为缺乏对互联网基础设施的支持,此技术不能很好地兼容防火墙、代理服务器和路由器。因此,这项协议通常只适用于传感器网络内的私有网络。
Web sockets: 这是一个互联网标准支持的新的网络协议,采用与HTTP相同的寻址和握手方法,兼容现有网络基础设施。在完成握手对话后,立即转换成TCP之上的双工通信,适合即时双向通信,特别适合主机共享的虚拟主机环境和代理服务器后面的网关。
MQTT: 也是一个深受市场欢迎的运行在TCP层之上(可选)的网络协议,有一个主题订阅模式,更适合向相关网关广播信息,同时还适用于网关与服务器通信,具有一些适合物联网应用的功能,例如,最后一条消息永久存在和遗嘱消息。
AMQP: 这或许是最适合网关与服务器通信的网络协议。该协议的作用相当于一个存储队列,即便临时断网,也确保数据包不会丢失。
XMPP: 可扩展消息处理与现场协议,是聊天客户端广泛使用的即时通信协议,对很多功能进行了标准化,例如,用户验证和消息ID。不过,因为技术规范十分复杂,数据交换采用冗长的XML格式,所以不适合物联网应用。
图1: 意法半导体的无线网桥解决方案
IoT网关平台架构
这里介绍一个我们自主开发的灵活可变的传感器数据监控设计方案。传感器数据监控是一种普通应用,对安全或可靠性没有特殊的要求。
无线网桥IoT网关: 无线网桥是基于STM32的IoT网关平台方案,提供多种不同的通信连接技术,如图1所示。通信系统由蓝牙、Wi-Fi、Sub-GHz和NFC近距离通信组成。每种通信技术都有自身的优势。Wi-Fi用于在网关平台与云端平台之间传输物或节点数据,蓝牙用于网关平台与安卓应用程序之间交换物或节点数据,而Sub-GHz技术用于在网关平台与物或节点之间传送数据。在无线网桥平台上,蓝牙、Wi-Fi和Sub-GHz模块通过UART线与STM32通信,而NFC收发器通过SPI线与STM32通信,如何确保STM32微控制器与不同的通信设备配合而不会延迟,高效处理所有请求,是这个平台设计的一大挑战。这个网关平台架构可以帮助我们利用不同的通信技术满足不同的用例需求。我们在这个网关方案上增加一个应用层,充当云应用与物之间的网络桥梁。这个6LoWPAN网络的操作系统是Contiki OS。手机应用软件通过蓝牙接口与网关通信。
主要通信元件
Sub-GHz模块: 网关通过SPIRIT1 Sub-GHz模块与6LoWPAN网络中的“物”通信。SPIRIT1模块是超低功耗的高集成度射频模块,支持868 MHz / 915 Mhz ISM双频工作。 该模块基于SPIRIT1 RF sub-GHz收发器(内置SMPS电源)、STM32L1微控制器、内部滤波器/平衡不平衡转换器芯片天线。UART主机接口可通过一个标准固件库直接连接外部微控制器,利用点对点通信和AT命令简化射频配置、数据传输接收。
Wi-Fi模块: Wi-Fi模块将无线网桥网关连接到云端应用。SPWF01Sx智能Wi-Fi模块是一款独立的即插即用的802.11 b/g/n解决方案,内置功率放大器和32位STM32微控制器。模块还集成时钟芯片和稳压器。
近距离通信: 该网关平台将CR95HF收发器用作NFC读写设备,与“物”上的NFC无源标签通信,配置设备。CR95HF是13.56-MHz多协议非接触式收发器。
蓝牙模块: SPBT2632Cxx蓝牙模块是一个小尺寸的功能完成的射频平台,适用于家庭自动化设备与蓝牙设备和手机之间的数据传输。
物架构
在本解决方案中,物基于多传感器-RF平台,共有两个组件(STEVAL-IDI002V2和STEVAL-IDI003V2)。STEVAL-IDI002V2是主板,集成了STM32L1 Cotex-M3微控制器、双接口EEPROM和Sub Ghz通信接口。STM32L1运行基于Contiki3x的6LoWPAN协议栈。选择这款微控制器是考虑到超低功耗的要求。双接口EEPROM使多传感器射频平台能够存储传感器送来的数据,让用户可以选择在NFC手机上查看数据。
图2: 射频传感器节点(物)
在6LoWPAN网络内,多传感器射频平台是‘物’,无线网桥(网关)上的Sub-GHz射频模块是根节点。传感器节点读取传感器数据,并通过6LoWPAN网络将其发送到根节点。传感器节点还有GPIO端口,用于控制致动器。 IoT网关提供本地和远程连接选项,以访问传感器数据和节点上的致动器。
Web访问: 远程用户可以使用管理服务器提供的Web界面查看传感器数据,向致动器发送命令。
安卓应用软件: 本地用户可以用蓝牙手机访问节点。在完成手机与无线网桥平台配对后,手机应用软件可以使用节点的功能。
NFC支持: 无线网桥支持NFC读写功能。这个通信功能可用于配置节点(射频信道等)和网关(Wi-Fi和蓝牙设置等)。
管理服务器应用设计
我们还设计了一个叫做ST Cloud Bridge的云端应用,在内置传感器/致动器的“物”或节点与终端用户之间搭起一座互动桥梁。图3是该云端应用的框图。物或节点将数据上传到ST Cloud Bridge云应用,然后获取命令和配置信息。终端用户可以监视传感器数据流,针对各种情况设置提醒通知。该平台还能开通、控制和配置节点。Cloud Bridge云应用主要由两个部件组成:设备模块和web模块。设备模块与传感器/致动器节点互动,而web模块处理用户所用的web客户端和移动客户端。这两个模块通过共享物体或云端服务总线交互操作,该解决方案运行在Azure网站平台上,提供数据安全功能,只与注册过的节点交互,所以数据完整性不会受到影响。该云应用准许“物”通过网关使用基于REST的标准API。
对于物联网 管理应用来说,支持多个协议十分重要。我们必须有设备管理模块、监视模块、上报模块和开通模块。
考虑到物联网应用固有的负载易变性,IaaS是企业托管云应用的首选方式。现在很多云服务提供商开始提供物联网专用服务,使物联网应用的开发维护变得更加方便快捷。
图3: 节点管理云应用
物联网应用
家庭自动化
智能家居: 这些应用让用户能够远程监控安防设备和家电,还可以提高能源使用效率,例如,当用户外出时,自动关闭家电电源。
智慧城市: 智能路灯: 通过监视环境光和交通流量等参数,市政管理者可以控制路灯亮度和开关灯时间,节省大量电能。如果路灯出现故障,系统会立即报修,降低意外事故风险或犯罪率。
智能表计: 无线连接的表计可实现远程抄表和一些应用,例如,阶梯式电价和双向计量电能表。智能电表还能侦测并上报盗电、电路漏电等事件。
智能停车场: 基于接近检测传感器的智能停车场是另一种物联网应用,能够为驾驶员提前发送空车位信息,避免交通拥堵问题,使按停车时间收费的计价也更加准确。
智慧农业: 通过对湿度和营养进行精确监视,系统可提示浇灌和施肥时间,从而节省水和化肥成本,同时大幅提高产量。实践证明,当与天气预报配合使用时,该系统可让农民切实受益。
健康
这是即将到来的物联网应用,将会给终端用户的健康护理带来革命性变化。各种穿戴传感器收集病患的体温、血压等重要生理参数,然后通过IoT网关发送到病患线上健康档案,为用户建立一个准确的生理参数档案。对于医护专业人士来说,与病患病健康史相关的数据是一个有效的诊断工具,可以实时分析这些数据,在紧急情况下,可以快速行动,立即抢救病患。
工业
在监视和优化工业生产过程方面,物联网同样可以发挥重要作用。低功耗传感器节点的问世在工业自动化领域开辟一条新的途径。低功耗传感器节点在以前还是一个不小的挑战,除用于工业自动化应用领域外,还能进入对人类有害或不能进入的危险环境替代人类工作。
结论
我们提出了一个能够连接6LoWPAN网络中的“物”且支持手机和云应用的通用IoT网关平台方案。“物”所连接的网关是IPv6网络中的IoT无线网关。该系统解决方案可以定制,以适用于不同的用例。高品质开源网格网络协议的出现,例如,Contiki,有助于Harvatek 物联网加快进入消费领域。对于所有的物联网应用,安全性依然是一个充满挑战的问题,这无需言明。虽然现有安全技术还能撑住,但是,随着物联网不断普及,我们将会发现更多安全挑战。业界依然在努力寻找更好的低成本/低功耗的解决方案,建立一个安全的物联网。半导体制程进步、成本降低、更好的电源管理技术以及能源回收技术将会为物联网世界打开另一扇大门。
图4: IoT网关接口