IoT开发实战:CoAP卷.html.pdf

上传人:紫竹语嫣 文档编号:5514153 上传时间:2020-05-27 格式:PDF 页数:187 大小:35.71MB
返回 下载 相关 举报
IoT开发实战:CoAP卷.html.pdf_第1页
第1页 / 共187页
IoT开发实战:CoAP卷.html.pdf_第2页
第2页 / 共187页
IoT开发实战:CoAP卷.html.pdf_第3页
第3页 / 共187页
IoT开发实战:CoAP卷.html.pdf_第4页
第4页 / 共187页
IoT开发实战:CoAP卷.html.pdf_第5页
第5页 / 共187页
点击查看更多>>
资源描述

《IoT开发实战:CoAP卷.html.pdf》由会员分享,可在线阅读,更多相关《IoT开发实战:CoAP卷.html.pdf(187页珍藏版)》请在三一文库上搜索。

1、前言 为何写作本书 几年前我作为一名嵌入式工程师参与了一个关于低功耗车载终端的研发项目,该低功耗车载终端中包含一个GPS模块和一个GPRS(2G)模块,工程师们希望通过最少的能量消耗把终端的GPS坐标上 传至Web服务器中。虽然需求直截了当,但是在开发的过程中却出现了各种各样的分歧。例如传输协议采用UDP还是TCP,有的工程师认为UDP没有连接过程,传输时间更短,有的工程师认为TCP更加可 靠而UDP也许会出现“丢包”现象。经过多次争论最终选择了UDP传输加自定义重传的方式。所谓自定义重传,就是车载终端把相同的数据包按照一定的时间间隔连续传输三次,每个数据包都包含一个递 增的子序号,服务器通过

2、子序号来剔除重复内容。通过增加这种容错机制似乎解决了UDP的“缺陷”,但是由于终端设备采用单向传输方式,并不要求服务器返回响应,所以终端根本不知道它上传的数据 是否被正确处理。 在项目开发的过程中,工程师们在终端设备与Web平台的衔接方式的选择上也出现了不少分歧。在定制应用层协议时嵌入式工程师更喜欢二进制协议,但对于Web开发工程师来说JSON和XML才是他 们所擅长的内容。因此,Web开发工程师单独做了一个UDP套接字服务,使终端设备可以把二进制内容转化为JSON格式的数据包,再把这个JSON数据包“POST”到一个HTTP服务器。此时对于Web开 发工程师来说,设备其实是在提交表单。 经过

3、工程师们的不断努力,这个低功耗车载终端如期完成。但是项目完成之后我不禁思考:这个项目是不是可以做得更好一点,是不是可以打破嵌入式工程师和Web开发工程师的技术鸿沟,是不是有 更好的应用协议可以满足项目需求,是不是低功耗终端也可以提交表单?查阅了众多资料之后,我找到了CoAP。 回想硕士毕业之后我“执着”地成为一名专注于物联网的软件工程师,而我本科和硕士的专业都与机械工程相关。与其他计算机或电子专业不同,机械工程特别强调规范和标准,所以设计过程必须严 格遵守规范。虽然表面上这显得异常死板,但是这种规范却大大提高了系统的互换性,节约了开发成本。在这种理念的指导下,我总是先寻找标准解决方案而不是随时

4、随地准备“造轮子”。CoAP是一个由 IETF(Internet Engineering Task Force,互联网工程任务组)组织编写的面向低功耗设备的物联网应用层协议,协议编号为RFC 7252。我非常高兴找到了应用“标准”,而不是又找到了一组“轮子”。 CoAP有很多优点,而这些优点正好可以解决上文提到的低功耗车载终端所遇到的问题: 1)CoAP传输层协议采用UDP,对于终端来说UDP的确可以减少一部分能耗。 2)CoAP采用请求/响应工作模式,当终端设备发送CoAP请求之后,服务器将返回响应码,终端通过响应码可以判断服务器的处理结果。 3)CoAP包含重传机制,不用再重新设计重传方法

5、。 4)CoAP参考了HTTP的大量成功经验,如CoAP请求方法、CoAP选项定义和CoAP响应码等,所以Web开发工程师也可以非常容易地掌握CoAP。 CoAP可以帮助低功耗智能终端接入网络,通过这种标准协议也可以降低物联网系统的开发难度,尤其可降低物联网Web平台的开发难度。对于应用CoAP的终端设备来说,同样会遵守REST标准,使 用类似的资源描述方法,使用相同的请求方法,应用相同的JSON数据包。对于物联网Web平台来说,处理一次终端设备的数据上传和处理一次Ajax表单提交同样容易。 我个人喜欢阅读技术图书,通过阅读图书可以系统地掌握一门新技术,我也希望本书可以帮助读者熟练掌握CoAP

6、,并把它应用于物联网系统中。 目标读者 本书适合物联网爱好者、嵌入式工程师和Web开发工程师。 对于物联网爱好者而言,本书的示例可以让你更快地熟悉物联网系统。本书包括很多与物联网系统相关的基础知识,通过这些基础知识的学习可以加深你对物联网系统的理解。通过本书中的多个动 手示例,你可以掌握物联网系统的调试方法。 对于嵌入式工程师而言,本书可以帮助你从不同角度了解低功耗设备如何连接网络。通过CoAP的学习可以从另一个角度熟悉HTTP。CoAP和HTTP都是设备连接网络的常见手段。 对于Web开发工程师而言,可以从另一个角度了解设备如何提交“表单”,通过学习CoAP你会发现低功耗终端设备也可以很流畅

7、地接入系统,而不需要做多余的协议转换。 如何阅读本书 本书的主要内容大致分为三部分: 第一部分:第13章。第1章介绍与物联网应用直接相关的各种协议,这些协议包括IP、6LoWPAN协议、IEEE 802.15.4协议、HTTP、MQTT协议和CoAP等;第2章介绍与物联网应用相关的开源硬件 Arduino和树莓派,无论是Arduino还是树莓派都是开源硬件领域的“明星产品”,在这些硬件平台上可以快速实现CoAP;第3章与前面两章不同,该章通过多个示例详细介绍与CoAP息息相关的网络协议 IP、UDP、TCP和HTTP,掌握这些协议是学习CoAP的基础。 第二部分:第48章。在第4章中先通过一个

8、简洁示例让读者对CoAP有一个大致的了解,该示例包含CoAP客户端和CoAP服务器两个部分,CoAP服务器使用Arduino UNO实现,通过一个安装了 Copper插件的Firefox浏览器便可访问该CoAP服务器;第5章与第6章详细分析与CoAP相关的RFC文档,这两章是掌握CoAP的理论基础;第7章介绍多种CoAP客户端和服务器的实现方法,这些实现方法 包括C语言、Python、Node.js和Java;在实际项目中使用CoAP难免出现问题,第8章介绍CoAP的多种调试方法,通过Copper插件和Wireshark网络抓包工具可以快速地发现CoAP的细节错误。 第三部分:9.10章。最后

9、两章设计一个微型的物联网系统,试图通过该系统向读者展现物联网系统从设计到实现的整个过程。微型物联网系统包括服务器和设备两部分。服务器部分(第9章)包括 Web前端、后端和数据库部分的实现内容,与其他Web系统不同,该系统还包括CoAP服务器实现;设备部分(第10章)使用一个低功耗受限制设备作为CoAP客户端,该设备使用Contiki作为嵌入式操作 系统,使用IEEE 802.15.4这样的无线方式连接网络。 相关资料 本书提供多个基础示例,这些示例代码可以帮助读者深入了解CoAP。 示例代码仓库:https:/ 本书还提供一个CoAP测试服务器,该测试服务器部署于阿里云,国内用户可以非常方便地

10、访问该服务器。 CoAP测试服务器:coap:/wsncoap.org。 勘误和支持 由于时间和水平方面的限制,书中难免出现错误或者描述不准确的地方,恳请读者批评指正。如果读者在阅读过程中发现问题,可通过个人博客或邮箱与我取得联系。 我的邮箱:。 我的博客:http:/ 致谢 感谢机械工业出版社华章公司的编辑,没有你们的鼓励就不会有这本书。感谢我的同事崔红鹏、王耀庭、许静和伊明,感谢你们与我一同讨论CoAP的各种细节问题,并把CoAP真正应用到实际产品 中。最后感谢我的妻子左文娟,在这一年多的时间里始终支持我的写作,是你的鼓励让我最终完成本书。 第1章 物联网与网络协议 1.1 本章主要内容

11、CoAP是受限制应用协议(Constrained Application Protocol)的简称,CoAP是物联网应用层协议之一。当前市面上有很多物联网应用层协议,它们之间既相互关联也存在明显区别。本章将重点介 绍三种物联网应用层协议CoAP、HTTP和MQTT,三种协议具有各自不同的适用场景,在物联网领域均有广泛的应用。 HTTP和MQTT使用TCP作为传输层协议,而CoAP则使用UDP作为传输层协议。无论是UDP还是TCP均依赖于IP技术,IP技术是现代网络通信的基础。IP又分为IPv4和IPv6两个版本,IPv4已经广为人 知而IPv6才刚刚投入使用。随着智能设备的发展,越来越多的设备

12、需要接入网络,IPv4地址枯竭的问题越来越严重。6LoWPAN技术是一种IPv6头压缩技术,通过6LoWPAN头压缩技术可以有效地解决智能 设备通过IPv6接入网络的问题。图1-1可以很好地概括本章的具体内容。 图1-1 物联网协议概述 第1章 物联网与网络协议 1.1 本章主要内容 CoAP是受限制应用协议(Constrained Application Protocol)的简称,CoAP是物联网应用层协议之一。当前市面上有很多物联网应用层协议,它们之间既相互关联也存在明显区别。本章将重点介 绍三种物联网应用层协议CoAP、HTTP和MQTT,三种协议具有各自不同的适用场景,在物联网领域均有

13、广泛的应用。 HTTP和MQTT使用TCP作为传输层协议,而CoAP则使用UDP作为传输层协议。无论是UDP还是TCP均依赖于IP技术,IP技术是现代网络通信的基础。IP又分为IPv4和IPv6两个版本,IPv4已经广为人 知而IPv6才刚刚投入使用。随着智能设备的发展,越来越多的设备需要接入网络,IPv4地址枯竭的问题越来越严重。6LoWPAN技术是一种IPv6头压缩技术,通过6LoWPAN头压缩技术可以有效地解决智能 设备通过IPv6接入网络的问题。图1-1可以很好地概括本章的具体内容。 图1-1 物联网协议概述 1.2 物联网与IP 毫无疑问IP技术是当今互联网应用的基础,同时IP技术也

14、是物联网应用的基础。本章中IP技术分为IPv4、IPv6和6LoWPAN三个部分进行介绍。 1.2.1 IPv4 IPv4即互联网协议版本4,又称互联网通信协议第4版。IPv4为标准化互联网络的核心部分,也是使用最广泛的互联网协议版本,其后继版本为IPv6,直到2011年IANA IPv4 pool地址已经完全用尽 时,IPv6仍处在部署的初期。IPv4是一种无连接的协议,此协议会尽最大努力交付分组数据,IPv4不保证任何分组数据均能送达目的地,也不保证所有分组数据均按照正确的顺序无重复地到达。 IPv4使用32位(4字节)地址,因此地址空间中只有4294967296个地址。不过,一些地址为特

15、殊用途所保留,如专用网络(约1800万个地址)和多播地址(约2.7亿个地址),专用网络和多播地址也 减少了可在互联网上路由的地址数量。随着地址不断被分配给最终用户,IPv4地址枯竭问题也随之产生。基于NAT(网络地址转换)等地址结构重构的技术显著地降低了IPv4地址枯竭的速度。 毫无疑问IPv4技术是物联网应用的基础。关于终端设备,具有网络连接能力的设备很有可能包含IPv4协议栈,这就意味着该设备可以很容易地访问网络中的任意一个IPv4应用;关于网关设备,对于那 些尚没有网络连接能力的设备来说,也可以通过定制的网关设备转发有用内容,这些定制的网关设备往往把非IP数据包转换成IP数据包;关于服务

16、器,绝大多数Web应用、数据库存储应用和搜索服务器均 依赖于IPv4技术。对于终端设备、网关设备和服务器而言,当前IPv4技术支撑着整个物联网应用。 但是IPv4技术也不是万能的,随着物联网终端设备的爆发,IPv4地址枯竭的问题显得越来越严重,已经被长期依赖的IPv4技术并不一定是物联网应用未来发展的方向。 1.2.2 IPv6 IPv6即互联网通信协议第6版,是互联网协议的最新版本,旨在解决IPv4地址枯竭问题。在因特网中,数据以分组的形式传输。IPv6定义了一种全新的分组格式,目的是为了最小化路由器处理的报文首 部。由于IPv4报文和IPv6报文首部存在很大不同,因此这两种协议无法互操作。

17、IPv6具有比IPv4大得多的编码地址空间,IPv6采用了128位的地址,而IPv4使用的是32位。因此新增的地址空间支持 2128(约3.41038)个地址。从IPv4到IPv6最显著的变化就是网络地址的长度,RFC 23731和RFC 23742定义的IPv6地址有128位长,IPv6地址的表达形式一般采用32个十六进制数。如图1-2为IPv6 Ready认证标签。 图1-2 IPv6 Ready认证标签 IPv6技术摒除了IPv4技术的多数局限,是一种更加进步与优化的互联网协议,它具有以下优势: 1)强大的地址空间:正如上文所述IPv6的地址长度为128位,而IPv4的地址长度仅为32位

18、,强大的地址空间可以满足物联网终端设备数量增长的需求。 2)即插即用:IPv6采用即插即用的机制实现与各种设备的网络连接,相关配置可以自动生成而并不需要向服务器申请。 3)更高的安全性:IPv6特性描述中要求通过加密有效载荷和通信源认证等方式增强网络的安全性。 4)更加灵活与完善的首部:IPv6中移除了IPv4中并不常用的字段,如分段与校验和等,采用了固定头加可选扩展头的组合方式。 1 https:/datatracker.ietf.org/doc/rfc2373/。 2 https:/datatracker.ietf.org/doc/rfc2374/。 1.2.3 6LoWPAN 虽然IPv

19、6协议是更为高效和完善的互联网协议,但是对于大多数受限制的物联网设备来说,IPv6协议依然冗余而复杂。为了让IPv6技术能够适用于低功耗受限制物联网设备,6LoWPAN技术应运而 生。 IETF组织于2004年11月正式成立了6LoWPAN工作组,着手制定基于IPv6的低速率无线个域网标准,即IPv6 over IEEE 802.15.4,该工作组将IPv6引入以IEEE 802.15.4为标准的无线个域网中。IEEE 802.15.4是无线个域网技术的典型代表,已经获得了广泛的应用。但IEEE 802.15.4标准只规定了物理层和媒体访问控制层两部分,并没有涉及网络层以上规范。 图1-3可以

20、很好地说明6LoWPAN与IPv6、IEEE 802.15.4之间的关系。图1-3的左侧部分说明了那些非受限制设备如何与互联网建立连接,大多数Linux主机都属于非受限制设备,这些设备往往具备足够 内存空间和很好的运算能力,如市面上常见的树莓派。对于树莓派这样的非受限制设备,可以使用IPv4层作为网络层协议,使用IEEE 802.3作为物理层和链路层协议。而对于那些具有IEEE 802.15.4无线连 接能力的受限制低功耗设备来说,并不能直接使用IPv4协议,而需要使用IPv6加6LoWPAN方式,把IPv6首部经过6LoWPAN技术压缩之后再填充到IEEE 802.15.4协议中的有效载荷部

21、分。 1.IEEE 802.15.4简介 IEEE 802.15.4标准定义了物理层(PHY层)和数据链路层(MAC层)。市面上有不少符合IEEE 802.15.4标准的SoC,这些SoC虽然资源(内部RAM和Flash)受限,功能较低,但是成本低廉。 图1-3 6LoWPAN适配层作用 IEEE 802.15.4标准的主要特征如下: 1)低速率:在2.4GHz频段最大速度为250Kbit/s。 2)地址短:支持16位短地址。 3)低功耗:可支持电池供电应用。 4)低成本:可适用于资源受限制设备。 5)短距离:节点信号覆盖范围一般为10100米,覆盖范围有限。 6)低复杂度:相比于IEEE 8

22、02.11和IEEE 802.15.1,IEEE 802.15.4相对简单,容易实现。 7)短帧长:IEEE 802.15.4数据链路层的最大传输单元为127字节,只能为输出的数据提供较少的有效空间。 8)多种拓扑结构:IEEE 802.15.4标准支持点对点和星形网络。 2.6LoWPAN简介 因为IPv6要求数据链路层支持的最小传输单元为1280字节,而IEEE 802.15.4链路的最大传输单元仅为127字节,所以需要在网络层之下定义一个适配层,负责IP数据包的压缩、分片和重组等工作。 6LoWPAN适配层之下采用IEEE 802.15.4规定的物理层和数据链路层,6LoWPAN适配层之

23、上的网络层采用IPv6协议。由于在IPv6中数据链路层支持的载荷长度远大于IEEE 802.15.4所能提供的最大载 荷长度,为了实现IEEE 802.15.4与网络层(IPv6)的无缝链接,6LoWPAN适配层被增加至网络层和IEEE 802.15.4之间,6LoWPAN适配层用来完成头压缩、分片与重组以及网状路由转发等工作。 6LoWPAN技术具有如下优势: 1)普及性:IP应用非常广泛,作为下一代互联网核心技术的IPv6也在加速其普及的步伐。 2)适用性:IP网络协议栈架构受到广泛的认可,低速率无线个域网完全可以基于此架构进行简单、有效的开发。 3)更多地址空间:IPv6应用于低功耗无线

24、个域网的最大亮点就是庞大的地址空间。这恰恰满足了部署大规模、高密度设备的需要。 4)支持无状态自动地址配置:IPv6中当节点启动时,可以自动读取MAC地址,并根据相关规则配置好所需的IPv6地址。 5)易接入:低速率无线个域网使用IPv6技术,更易于接入其他基于IP技术的网络及下一代互联网,使其可以充分利用IP网络的技术进行快速发展。 图1-4可以很好地说明6LoWPAN头压缩技术如何与IEEE 802.15.4标准配合工作。IEEE 802.15.4标准的物理层部分一般包括先导码、同步字和物理层长度指示域和物理层有效载荷等部分;在数据链路 层部分又可分为帧控制域、序列号域、地址域、数据链路层

25、有效数据载荷与校验区域等部分;在数据链路层有效载荷部分又可分为IPv6压缩头部分和IPv6有效负载部分。 图1-4 6LoWPAN头压缩技术与IEEE 802.15.4之间的关系 1.3 物联网与HTTP 在互联网领域HTTP是应用最为广泛的应用层协议,在物联网领域HTTP也是不可或缺的重要组成部分。HTTP的成功应用也影响了物联网领域的专用协议,如本书讨论的CoAP借鉴了HTTP在应用过程中 大量的成功经验。熟练掌握HTTP对物联网领域的专项内容学习绝对大有帮助。 1.3.1 HTTP HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络协议。设计HTTP最初的目的是为了提供一种发布和

26、接收HTML页面的方法。通过HTTP或HTTPS请求的资源由统一资源标识符(Uniform Resource Identifier,URI)来标识。 HTTP采用客户端请求-服务器响应这样的工作模式。图1-5可以很好地描述这种请求/响应工作模式。通常客户端使用网页浏览器向服务器上指定端口(HTTP的默认端口为80)发起一个HTTP请求。服 务器上存储着很多资源,如普通文本、HTML文本、图片或视频文件等。我们称这个应答服务器为源服务器。在用户代理和源服务器中间可能存在多个“中间层”,比如代理服务器、网关或隧道等。HTTP 采用TCP作为其传输层协议。通常,由客户端发起一个HTTP请求,创建一个

27、到服务器指定端口的TCP连接。HTTP服务器则在那个端口监听客户端的请求,一旦收到请求,服务器将会向客户端返回状态, 如“HTTP/1.1200 OK”,以及具体的响应内容,如文本文件、HTML文件、图片和视频文件等。 图1-5 HTTP请求/响应工作模式 1.3.2 REST风格 REST(具象状态传输)是Roy Thomas Fielding博士于2000年在他的博士论文“Arch-itectural Styles and the Design of Network-based Software Architectures”中提出来的一种Web软件架构 风格。目前在三种主流的Web服务实现

28、方案中,REST模式与复杂的SOAP和XML-RPC相比更加简洁,越来越多的Web服务开始采用REST风格设计和实现。REST是设计风格而不是标准,REST通常基于使 用HTTP、URI、XML、JSON和HTML这些现有的协议和标准来实现。 REST风格具有以下特点: 1)资源一般由URI来指定。 2)无状态通信。 3)对资源的操作包括创建、获取、修改和删除等,这些操作对应HTTP的GET、POST、PUT和DELETE方法。 4)资源的表现形式可以是XML、JSON或HTML格式文件。 REST设计风格确实可以带来一些好处,这些好处使Web开发更加简洁且易于实现。REST风格可以使资源的定

29、义方式更加清晰,Web服务器中常常保存很多不同类型的资源,这些资源需要通过某种约 定俗成的方法加以编号,若遵循REST风格那么www.wsncoap.org中某个具体的资源可能采用这样的URI定义:http:/wsncoap.org/resources/15。 REST风格使得对资源的操作变得更加简洁,若采用REST风格可充分利用HTTP中已经使用的各种“动词”GET、PUT、POST和DELETE。GET代表获取、PUT代表更新、POST代表创建而DELETE 代表删除,这就避免了在HTTP负载部分还需要创建诸如Create或Update这样“非标准”的动作。另外,HTTP中4个常用方法也对

30、应数据库中的“增删改查”四大操作。表1-1可以很好地说明在REST风格 指导下如何使用HTTP中的4个常用方法操作wsncoap.org/resources/15资源。 表1-1 REST风格资源操作说明 1.4 物联网与CoAP CoAP是受限制的应用协议(Constrained Application Protocol)的简称。随着最近几年物联网技术的发展,越来越多的设备接入互联网。据预测未来将有更多的设备需要相互连接,而这些设备的数 量将远超人类的总和。在这种大背景下,物联网IoT和M2M技术应运而生。虽然对人们而言,接入互联网显得非常方便,但是对于那些低功耗受限制设备而言接入互联网却异

31、常困难。在当前由PC和智能手 机组成的世界里,信息交换多是通过TCP和应用层协议HTTP实现的。但是对于低功耗受限制设备而言,实现TCP和HTTP显然是一个过分而苛刻的要求。为了让低功耗受限制设备可以接入互联网,CoAP应 运而生。CoAP是一种应用层协议,它运行于UDP之上而不是像HTTP那样运行于TCP之上。CoAP非常小巧,最小的数据包仅为4字节。 1.4.1 CoAP CoAP并不能孤立存在,而是TCP/IP协议族的一部分。TCP/IP为人熟知,从字面意思上理解TCP/IP指TCP与IP这两种协议,但实际上TCP/IP是一类协议集合的统称,具体来说TCP/IP包括IP和ICMP、 TC

32、P和UDP、TELNET和FTP等。虽然CoAP并没有使用TCP作为传输层协议,但CoAP也属于TCP/IP协议族中的一员。CoAP借鉴了HTTP的大量成功经验,CoAP和HTTP一样均使用请求/响应工作模式。通 常由客户端发送CoAP请求,服务器一旦侦听到该请求便会根据请求内容返回响应码和响应内容。图1-6可以很好地说明CoAP请求/响应工作模式的大致流程。虽然CoAP和HTTP有很多相似之处,但是 CoAP专门为低功耗受限制设备设计,它比HTTP简单很多。 图1-6 CoAP请求/响应工作模式 1.4.2 RFC文档汇总 俗话说“没有规矩不成方圆”,这些TCP/IP相关协议均由IETF组织

33、讨论并制定,IETF组织是一个坚持开放性和适用性的国际标准化组织,该组织产生的标准化文档被称为RFC(Request For Comment)文档,所有RFC文档完全公开并在互联网上公布。RFC文档不仅记录了协议规范内容,还包括协议的实现和运用的相关信息。RFC文档通过编号的方式组织每个协议的标准化请求,如著名的IP 规范由RFC 279规定,而著名的TCP规范则由RFC 793规定,本书讨论的CoAP由RFC 7252规定。RFC编号采用递增方式编号,著名的IP和TCP的编号仅为3位数字,而CoAP的编号已经超过7000。 通过上面的分析不难得出,若需要熟悉并了解CoAP可从RFC文档入手,

34、通过CoAP相关的RFC文档可以了解它的“前世今生”。 1.CoAP核心与扩展协议 CoAP包括核心协议RFC 7252和扩展协议RFC 7641、RFC 6690和RFC 7959等部分,具体内容见表1-2。本书后续章节将结合示例详细解释这几份RFC文档。 表1-2 CoAP核心协议和扩展协议 2.TCP/IP相关RFC文档汇总 CoAP的应用还依赖于其他RFC文档,在这些RFC文档的共同支持下才可以组成完整的CoAP应用。CoAP依赖的RFC文档见表1-3。 表1-3 TCP/IP相关RFC文档汇总 1.5 物联网与MQTT协议 与HTTP和CoAP不同,MQTT协议由IBM牵头制定,而H

35、TTP与CoAP均由IETF组织制定。MQTT协议采用订阅/发布模式,这与HTTP和CoAP的请求/响应模式存在明显区别。MQTT协议虽然不是为物 联网应用专门设计的协议,但是在物联网领域依然取得了不俗的成绩。 1.5.1 MQTT协议 MQ遥测传输(MQTT1)是轻量级基于代理的发布/订阅模式的消息传输协议,MQTT协议开放、简单、轻量级且易于实现。该协议的特点有: 1)使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。 2)对负载内容屏蔽的消息传输。 3)使用TCP/IP提供网络连接。 4)小型传输,网络传输开销非常小(固定长度的头部是2字节),协议交换最小化以降低网络流量。

36、 5)使用Last Will和Testament特性通知有关各方客户端异常中断的机制。 1 http:/mqtt.org/。 1.5.2 MQTT主题 MQTT协议包含一个主题的概念,MQTT的主题与HTTP中的资源URI较为相似。MQTT协议通过主题对消息进行分类,主题本质上是一个UTF-8编码的字符串,可通过斜杠表示多个层级关系。主题还 可以使用通配符进行过滤。其中,“+”可以过滤一个层级,而“#”只能出现在主题最后,表示过滤任意级别的层级。 下面是几个常见的MQTT主题: 1)building-b/floor-5:表示B栋楼第5层。 2)+/floor-5:表示任何一栋楼的第5层。 3)

37、building-b/#:表示B栋楼的所有楼层。 1.5.3 MQTT服务质量 针对不同的应用场景,MQTT协议提供三种不同消息发布服务质量: QoS=0“最多一次”:服务质量级别QoS0是最快的传输方式,有时称为“触发并忘记”。消息将最多传递一次,或者可能完全不会传递。网络中的传递不会得到确认,并且不会存储消息。如果客户 机断开连接或者服务器发生故障,那么消息可能会丢失。以某个时间间隔发送实时数据时,可使用服务质量级别QoS0。丢失单条消息实际上不会产生很大影响,因为之后很快将发送包含较新数据的另一条 消息。在此场景中,使用较高服务质量会带来额外成本,却不会获得任何实际优势。QoS=0的情况

38、如图1-7a所示。 QoS=1“至少一次”:使用服务质量级别QoS1时消息会始终至少传递一次。如果发布者收到应答之前消息传递失败,那么一条消息可能会传递多次。该消息必须存储在发布者本地,直到发布者收到 关于接收者已发布此消息的确认消息为止。QoS=1的情况如图1-7b所示。 QoS=2“恰好一次”:服务质量级别QoS2是最安全也是最慢的传输方式。消息始终传递恰好一次,并且必须存储在发布者本地,直到发布者收到关于接收者已发布此消息的确认消息为止。使用服务 质量级别QoS2时会采用比QoS1更复杂的握手和应答序列,以确保消息不会重复。QoS=2的情况如图1-7c所示。 图1-7 MQTT消息发布服

39、务质量 与HTTP和CoAP的请求/响应模式不同,MQTT协议这样的订阅/发布模式总是存在三个不同的角色发布者、代理器(Broker)和订阅者。订阅者向MQTT代理器订阅单个或一系列主题,发布者发 布某个主题的具体消息。在MQTT代理器的协调下,所有订阅者将及时收到该主题的消息。MQTT协议的工作过程经常被称为“推送”,在推送过程中某些消息必须保证稳定可靠,而某些消息允许丢失或 收到重复内容。为了实现这种灵活可变的机制,MQTT协议提供了以上三种不同的消息发布服务质量。 1.6 本章小结 本章介绍了物联网应用相关的多种协议,这些协议包括IPv4、IPv6、6LoWPAN、HTTP、CoAP和M

40、QTT等,灵活使用这些协议将组成各种各样的物联网应用。IPv4、IPv6和6LoWPAN是物联网应用的基 础,IPv4在互联网领域取得卓越的成就,但是IPv4地址空间短缺依然是物联网大规模应用的“痛处”,IPv6无疑将会在物联网中取得越来越多的应用。现阶段物联网设备依然属于受限制低功耗设备,这些 设备无法像非受限制设备那样完整地使用IPv6,需要通过6LoWPAN头压缩技术降低协议本身的传输开销。除了这些基础协议之外,本章还讨论了3种应用层协议HTTP、CoAP和MQTT,HTTP和CoAP均 采用请求/响应模式,而MQTT采用订阅/发布模式,其中HTTP已经取得广泛的应用,它的成熟经验也被C

41、oAP的制定所借鉴。本章还列举了CoAP的相关RFC文档,本书的后续章节将结合具体的示例对这些 RFC文档进行详细说明。 本章的重点并不是为了说明CoAP,而是为了说明CoAP并不是凭空捏造的,也不能脱离其他网络技术独立存在。CoAP将成为物联网应用的重要组成部分,它将与其他应用层协议一起组成多姿多彩的物 联网应用。 第2章 物联网与开源硬件 2.1 本章主要内容 本章将介绍两种在物联网领域中常用的开源硬件Arduino和树莓派。Arduino和树莓派是开源硬件领域的明星产品,Arduino和树莓派不但功能强大,而且价格便宜易于购买。Arduino和树莓派均 具有常用普通IO接口、SPI接口、

42、I2C接口和UART接口等,可通过各种各样的传感器与物理世界产生联系;除了物理世界的感知能力之外,Arduino和树莓派还具有一定的网络连接能力,通过网络连接能力 把物理世界的信息传递至互联网中。Arduino和树莓派既可以作为物联网系统的终端节点,也可以作为整个系统的中转设备或枢纽设备。 Arduino和树莓派虽然功能相似,但是也存在一定的区别。Arduino属于低功耗受限制设备范畴;而树莓派属于非受限制设备,可以运行Linux系统并具有普通PC的大多数功能。CoAP不但可以运行于 Arduino平台,也可以运行于树莓派平台。本章重点介绍几款常用的Arduino和树莓派型号。 第2章 物联网

43、与开源硬件 2.1 本章主要内容 本章将介绍两种在物联网领域中常用的开源硬件Arduino和树莓派。Arduino和树莓派是开源硬件领域的明星产品,Arduino和树莓派不但功能强大,而且价格便宜易于购买。Arduino和树莓派均 具有常用普通IO接口、SPI接口、I2C接口和UART接口等,可通过各种各样的传感器与物理世界产生联系;除了物理世界的感知能力之外,Arduino和树莓派还具有一定的网络连接能力,通过网络连接能力 把物理世界的信息传递至互联网中。Arduino和树莓派既可以作为物联网系统的终端节点,也可以作为整个系统的中转设备或枢纽设备。 Arduino和树莓派虽然功能相似,但是也

44、存在一定的区别。Arduino属于低功耗受限制设备范畴;而树莓派属于非受限制设备,可以运行Linux系统并具有普通PC的大多数功能。CoAP不但可以运行于 Arduino平台,也可以运行于树莓派平台。本章重点介绍几款常用的Arduino和树莓派型号。 2.2 Arduino 2.2.1 Arduino简介 Arduino是一款便捷灵活、方便上手的开源电子设计原型平台。Arduino包含硬件和软件两部分,硬件部分包含各种Arduino开发板和扩展板,软件部分包括Arduino IDE、驱动扩展库和应用扩展库等 部分。Arduino使用Processing/Wiring作为开发语言,该开发语言具有

45、很多Java和C语言特性,上手简单且容易学习。 Arduino具有以下特点: 1)跨平台:Arduino IDE可以在Windows、Mac OS、Linux三大主流操作系统上运行。 2)简单清晰:Arduino IDE基于Processing IDE开发。对于初学者来说,极易掌握,同时具有足够的灵活性。Arduino语言基于Wiring语言开发,是对avr-gcc库的二次封装,不需要太多的单片机基 础、编程基础,简单学习后就可以进行快速开发。 3)开放性:Arduino的硬件原理图、电路图、IDE软件及核心库文件都是开源的,在开源协议范围内里可以任意修改原始设计及相应代码。 4)发展迅速:A

46、rduino不仅仅是全球最流行的开源硬件,也是一个优秀的硬件开发平台,是硬件开发的趋势。Arduino简单的开发方式使得开发者更关注创意与实现,更快地完成项目开发,大大节约 了学习成本,缩短了开发周期。 2.2 Arduino 2.2.1 Arduino简介 Arduino是一款便捷灵活、方便上手的开源电子设计原型平台。Arduino包含硬件和软件两部分,硬件部分包含各种Arduino开发板和扩展板,软件部分包括Arduino IDE、驱动扩展库和应用扩展库等 部分。Arduino使用Processing/Wiring作为开发语言,该开发语言具有很多Java和C语言特性,上手简单且容易学习。

47、Arduino具有以下特点: 1)跨平台:Arduino IDE可以在Windows、Mac OS、Linux三大主流操作系统上运行。 2)简单清晰:Arduino IDE基于Processing IDE开发。对于初学者来说,极易掌握,同时具有足够的灵活性。Arduino语言基于Wiring语言开发,是对avr-gcc库的二次封装,不需要太多的单片机基 础、编程基础,简单学习后就可以进行快速开发。 3)开放性:Arduino的硬件原理图、电路图、IDE软件及核心库文件都是开源的,在开源协议范围内里可以任意修改原始设计及相应代码。 4)发展迅速:Arduino不仅仅是全球最流行的开源硬件,也是一

48、个优秀的硬件开发平台,是硬件开发的趋势。Arduino简单的开发方式使得开发者更关注创意与实现,更快地完成项目开发,大大节约 了学习成本,缩短了开发周期。 2.2.2 常用Arduino型号 下面介绍两款常用的Arduino型号:Arduino UNO和Arduino 101。 1.Arduino UNO Arduino UNO1是Arduino USB接口系列的最新版本,作为Arduino平台的参考标准模板。Arduino UNO的核心处理器为ATmega328,它同时具有14路数字输入输出口(其中5路可作为PWM输 出)、6路模拟输入、一个16MHz晶体振荡器、一个USB口、一个电源插座、

49、一个ICSP插座和一个复位按钮。Arduino UNO的外观如图2-1所示。 UNO已经发布到第三版,与前两版相比该版本有以下新的特点: 1)在AREF处增加了两个管脚SDA和SCL,支持I2C接口。 2)增加IOREF和一个预留管脚,扩展板将能兼容5V和3.3V核心板。 3)改进了复位电路设计。 4)USB接口芯片由ATmega16U2替代了ATmega8U2。 图2-1 Arduino UNO外观 2.Arduino 101 Arduino 1012是一个性能出色的低功耗开发板,它基于Intel Curie模组,价格便宜,使用简单。101不仅有着与UNO一样的特性和外设,还额外增加了Bluetooth LE和6轴加速计、陀螺仪。Intel Curie模组包含一个x86的夸克核心和一个32位的ARC架构核心Zephyr,时钟频率均为32MHz。Arduino 101具有14路I/O口(其中4路可用作PWM输出)、6个模拟输入、一个用于串口通信和上传程序的 USB接口、1个电源插座、1个带SPI和I2C脚

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/环境 > 建筑资料


经营许可证编号:宁ICP备18001539号-1