IoT开发实战:CoAP卷(txt+pdf+epub+mobi电子书下载)


发布时间:2020-05-20 17:08:05

点击下载

作者:徐凯

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

IoT开发实战:CoAP卷

IoT开发实战:CoAP卷试读:

前言

为何写作本书

几年前我作为一名嵌入式工程师参与了一个关于低功耗车载终端的研发项目,该低功耗车载终端中包含一个GPS模块和一个GPRS(2G)模块,工程师们希望通过最少的能量消耗把终端的GPS坐标上传至Web服务器中。虽然需求直截了当,但是在开发的过程中却出现了各种各样的分歧。例如传输协议采用UDP还是TCP,有的工程师认为UDP没有连接过程,传输时间更短,有的工程师认为TCP更加可靠而UDP也许会出现“丢包”现象。经过多次争论最终选择了UDP传输加自定义重传的方式。所谓自定义重传,就是车载终端把相同的数据包按照一定的时间间隔连续传输三次,每个数据包都包含一个递增的子序号,服务器通过子序号来剔除重复内容。通过增加这种容错机制似乎解决了UDP的“缺陷”,但是由于终端设备采用单向传输方式,并不要求服务器返回响应,所以终端根本不知道它上传的数据是否被正确处理。

在项目开发的过程中,工程师们在终端设备与Web平台的衔接方式的选择上也出现了不少分歧。在定制应用层协议时嵌入式工程师更喜欢二进制协议,但对于Web开发工程师来说JSON和XML才是他们所擅长的内容。因此,Web开发工程师单独做了一个UDP套接字服务,使终端设备可以把二进制内容转化为JSON格式的数据包,再把这个JSON数据包“POST”到一个HTTP服务器。此时对于Web开发工程师来说,设备其实是在提交表单。

经过工程师们的不断努力,这个低功耗车载终端如期完成。但是项目完成之后我不禁思考:这个项目是不是可以做得更好一点,是不是可以打破嵌入式工程师和Web开发工程师的技术鸿沟,是不是有更好的应用协议可以满足项目需求,是不是低功耗终端也可以提交表单?查阅了众多资料之后,我找到了CoAP。

回想硕士毕业之后我“执着”地成为一名专注于物联网的软件工程师,而我本科和硕士的专业都与机械工程相关。与其他计算机或电子专业不同,机械工程特别强调规范和标准,所以设计过程必须严格遵守规范。虽然表面上这显得异常死板,但是这种规范却大大提高了系统的互换性,节约了开发成本。在这种理念的指导下,我总是先寻找标准解决方案而不是随时随地准备“造轮子”。CoAP是一个由IETF(Internet Engineering Task Force,互联网工程任务组)组织编写的面向低功耗设备的物联网应用层协议,协议编号为RFC 7252。我非常高兴找到了应用“标准”,而不是又找到了一组“轮子”。

CoAP有很多优点,而这些优点正好可以解决上文提到的低功耗车载终端所遇到的问题:

1)CoAP传输层协议采用UDP,对于终端来说UDP的确可以减少一部分能耗。

2)CoAP采用请求/响应工作模式,当终端设备发送CoAP请求之后,服务器将返回响应码,终端通过响应码可以判断服务器的处理结果。

3)CoAP包含重传机制,不用再重新设计重传方法。

4)CoAP参考了HTTP的大量成功经验,如CoAP请求方法、CoAP选项定义和CoAP响应码等,所以Web开发工程师也可以非常容易地掌握CoAP。

CoAP可以帮助低功耗智能终端接入网络,通过这种标准协议也可以降低物联网系统的开发难度,尤其可降低物联网Web平台的开发难度。对于应用CoAP的终端设备来说,同样会遵守REST标准,使用类似的资源描述方法,使用相同的请求方法,应用相同的JSON数据包。对于物联网Web平台来说,处理一次终端设备的数据上传和处理一次Ajax表单提交同样容易。

我个人喜欢阅读技术图书,通过阅读图书可以系统地掌握一门新技术,我也希望本书可以帮助读者熟练掌握CoAP,并把它应用于物联网系统中。

目标读者

本书适合物联网爱好者、嵌入式工程师和Web开发工程师。

·对于物联网爱好者而言,本书的示例可以让你更快地熟悉物联网系统。本书包括很多与物联网系统相关的基础知识,通过这些基础知识的学习可以加深你对物联网系统的理解。通过本书中的多个动手示例,你可以掌握物联网系统的调试方法。

·对于嵌入式工程师而言,本书可以帮助你从不同角度了解低功耗设备如何连接网络。通过CoAP的学习可以从另一个角度熟悉HTTP。CoAP和HTTP都是设备连接网络的常见手段。

·对于Web开发工程师而言,可以从另一个角度了解设备如何提交“表单”,通过学习CoAP你会发现低功耗终端设备也可以很流畅地接入系统,而不需要做多余的协议转换。

如何阅读本书

本书的主要内容大致分为三部分:

第一部分:第1~3章。第1章介绍与物联网应用直接相关的各种协议,这些协议包括IP、6LoWPAN协议、IEEE 802.15.4协议、HTTP、MQTT协议和CoAP等;第2章介绍与物联网应用相关的开源硬件Arduino和树莓派,无论是Arduino还是树莓派都是开源硬件领域的“明星产品”,在这些硬件平台上可以快速实现CoAP;第3章与前面两章不同,该章通过多个示例详细介绍与CoAP息息相关的网络协议——IP、UDP、TCP和HTTP,掌握这些协议是学习CoAP的基础。

第二部分:第4~8章。在第4章中先通过一个简洁示例让读者对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章)包括Web前端、后端和数据库部分的实现内容,与其他Web系统不同,该系统还包括CoAP服务器实现;设备部分(第10章)使用一个低功耗受限制设备作为CoAP客户端,该设备使用Contiki作为嵌入式操作系统,使用IEEE 802.15.4这样的无线方式连接网络。

相关资料

本书提供多个基础示例,这些示例代码可以帮助读者深入了解CoAP。

示例代码仓库:https://github.com/xukai871105/the_beginning_of_coap。

本书还提供一个CoAP测试服务器,该测试服务器部署于阿里云,国内用户可以非常方便地访问该服务器。

CoAP测试服务器:coap://wsncoap.org。

勘误和支持

由于时间和水平方面的限制,书中难免出现错误或者描述不准确的地方,恳请读者批评指正。如果读者在阅读过程中发现问题,可通过个人博客或邮箱与我取得联系。

我的邮箱:xukai19871105@126.com。

我的博客:http://blog.csdn.net/xukai871105。

致谢

感谢机械工业出版社华章公司的编辑,没有你们的鼓励就不会有这本书。感谢我的同事崔红鹏、王耀庭、许静和伊明,感谢你们与我一同讨论CoAP的各种细节问题,并把CoAP真正应用到实际产品中。最后感谢我的妻子左文娟,在这一年多的时间里始终支持我的写作,是你的鼓励让我最终完成本书。第1章物联网与网络协议1.1 本章主要内容

CoAP是受限制应用协议(Constrained Application Protocol)的简称,CoAP是物联网应用层协议之一。当前市面上有很多物联网应用层协议,它们之间既相互关联也存在明显区别。本章将重点介绍三种物联网应用层协议——CoAP、HTTP和MQTT,三种协议具有各自不同的适用场景,在物联网领域均有广泛的应用。

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技术也是物联网应用的基础。本章中IP技术分为IPv4、IPv6和6LoWPAN三个部分进行介绍。1.2.1 IPv4

IPv4即互联网协议版本4,又称互联网通信协议第4版。IPv4为标准化互联网络的核心部分,也是使用最广泛的互联网协议版本,其后继版本为IPv6,直到2011年IANA IPv4 pool地址已经完全用尽时,IPv6仍处在部署的初期。IPv4是一种无连接的协议,此协议会尽最大努力交付分组数据,IPv4不保证任何分组数据均能送达目的地,也不保证所有分组数据均按照正确的顺序无重复地到达。

IPv4使用32位(4字节)地址,因此地址空间中只有4294967296个地址。不过,一些地址为特殊用途所保留,如专用网络(约1800万个地址)和多播地址(约2.7亿个地址),专用网络和多播地址也减少了可在互联网上路由的地址数量。随着地址不断被分配给最终用户,IPv4地址枯竭问题也随之产生。基于NAT(网络地址转换)等地址结构重构的技术显著地降低了IPv4地址枯竭的速度。

毫无疑问IPv4技术是物联网应用的基础。关于终端设备,具有网络连接能力的设备很有可能包含IPv4协议栈,这就意味着该设备可以很容易地访问网络中的任意一个IPv4应用;关于网关设备,对于那些尚没有网络连接能力的设备来说,也可以通过定制的网关设备转发有用内容,这些定制的网关设备往往把非IP数据包转换成IP数据包;关于服务器,绝大多数Web应用、数据库存储应用和搜索服务器均依赖于IPv4技术。对于终端设备、网关设备和服务器而言,当前IPv4技术支撑着整个物联网应用。

但是IPv4技术也不是万能的,随着物联网终端设备的爆发,IPv4地址枯竭的问题显得越来越严重,已经被长期依赖的IPv4技术并不一定是物联网应用未来发展的方向。1.2.2 IPv6

IPv6即互联网通信协议第6版,是互联网协议的最新版本,旨在解决IPv4地址枯竭问题。在因特网中,数据以分组的形式传输。IPv6定义了一种全新的分组格式,目的是为了最小化路由器处理的报文首部。由于IPv4报文和IPv6报文首部存在很大不同,因此这两种协议无法互操作。IPv6具有比IPv4大得多的编码地址空间,IPv6采用了128128位的地址,而IPv4使用的是32位。因此新增的地址空间支持2(约383.4×10)个地址。从IPv4到IPv6最显著的变化就是网络地址的长度,RFC 2373和RFC 2374定义的IPv6地址有128位长,IPv6地址的表达形式一般采用32个十六进制数。如图1-2为IPv6 Ready认证标签。图1-2 IPv6 Ready认证标签

IPv6技术摒除了IPv4技术的多数局限,是一种更加进步与优化的互联网协议,它具有以下优势:

1)强大的地址空间:正如上文所述IPv6的地址长度为128位,而IPv4的地址长度仅为32位,强大的地址空间可以满足物联网终端设备数量增长的需求。

2)即插即用:IPv6采用即插即用的机制实现与各种设备的网络连接,相关配置可以自动生成而并不需要向服务器申请。

3)更高的安全性:IPv6特性描述中要求通过加密有效载荷和通信源认证等方式增强网络的安全性。

4)更加灵活与完善的首部:IPv6中移除了IPv4中并不常用的字段,如分段与校验和等,采用了固定头加可选扩展头的组合方式。1.2.3 6LoWPAN

虽然IPv6协议是更为高效和完善的互联网协议,但是对于大多数受限制的物联网设备来说,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可以很好地说明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协议中的有效载荷部分。

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)短距离:节点信号覆盖范围一般为10~100米,覆盖范围有限。

6)低复杂度:相比于IEEE 802.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适配层之上的网络层采用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应用于低功耗无线个域网的最大亮点就是庞大的地址空间。这恰恰满足了部署大规模、高密度设备的需要。

4)支持无状态自动地址配置:IPv6中当节点启动时,可以自动读取MAC地址,并根据相关规则配置好所需的IPv6地址。

5)易接入:低速率无线个域网使用IPv6技术,更易于接入其他基于IP技术的网络及下一代互联网,使其可以充分利用IP网络的技术进行快速发展。

图1-4可以很好地说明6LoWPAN头压缩技术如何与IEEE 802.15.4标准配合工作。IEEE 802.15.4标准的物理层部分一般包括先导码、同步字和物理层长度指示域和物理层有效载荷等部分;在数据链路层部分又可分为帧控制域、序列号域、地址域、数据链路层有效数据载荷与校验区域等部分;在数据链路层有效载荷部分又可分为IPv6压缩头部分和IPv6有效负载部分。图1-4 6LoWPAN头压缩技术与IEEE 802.15.4之间的关系1.3 物联网与HTTP

在互联网领域HTTP是应用最为广泛的应用层协议,在物联网领域HTTP也是不可或缺的重要组成部分。HTTP的成功应用也影响了物联网领域的专用协议,如本书讨论的CoAP借鉴了HTTP在应用过程中大量的成功经验。熟练掌握HTTP对物联网领域的专项内容学习绝对大有帮助。1.3.1 HTTP

HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络协议。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。通过HTTP或HTTPS请求的资源由统一资源标识符(Uniform Resource Identifier,URI)来标识。

HTTP采用客户端请求-服务器响应这样的工作模式。图1-5可以很好地描述这种请求/响应工作模式。通常客户端使用网页浏览器向服务器上指定端口(HTTP的默认端口为80)发起一个HTTP请求。服务器上存储着很多资源,如普通文本、HTML文本、图片或视频文件等。我们称这个应答服务器为源服务器。在用户代理和源服务器中间可能存在多个“中间层”,比如代理服务器、网关或隧道等。HTTP采用TCP作为其传输层协议。通常,由客户端发起一个HTTP请求,创建一个到服务器指定端口的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服务实现方案中,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风格可以使资源的定义方式更加清晰,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个常用方法也对应数据库中的“增删改查”四大操作。表1-1可以很好地说明在REST风格指导下如何使用HTTP中的4个常用方法操作wsncoap.org/resources/15资源。表1-1 REST风格资源操作说明1.4 物联网与CoAP

CoAP是受限制的应用协议(Constrained Application Protocol)的简称。随着最近几年物联网技术的发展,越来越多的设备接入互联网。据预测未来将有更多的设备需要相互连接,而这些设备的数量将远超人类的总和。在这种大背景下,物联网IoT和M2M技术应运而生。虽然对人们而言,接入互联网显得非常方便,但是对于那些低功耗受限制设备而言接入互联网却异常困难。在当前由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、TCP和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组织讨论并制定,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文档入手,通过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牵头制定,而HTTP与CoAP均由IETF组织制定。MQTT协议采用订阅/发布模式,这与HTTP和CoAP的请求/响应模式存在明显区别。MQTT协议虽然不是为物联网应用专门设计的协议,但是在物联网领域依然取得了不俗的成绩。1.5.1 MQTT协议

MQ遥测传输(MQTT)是轻量级基于代理的发布/订阅模式的消息传输协议,MQTT协议开放、简单、轻量级且易于实现。该协议的特点有:

1)使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。

2)对负载内容屏蔽的消息传输。

3)使用TCP/IP提供网络连接。

4)小型传输,网络传输开销非常小(固定长度的头部是2字节),协议交换最小化以降低网络流量。

5)使用Last Will和Testament特性通知有关各方客户端异常中断的机制。1.5.2 MQTT主题

MQTT协议包含一个主题的概念,MQTT的主题与HTTP中的资源URI较为相似。MQTT协议通过主题对消息进行分类,主题本质上是一个UTF-8编码的字符串,可通过斜杠表示多个层级关系。主题还可以使用通配符进行过滤。其中,“+”可以过滤一个层级,而“#”只能出现在主题最后,表示过滤任意级别的层级。

下面是几个常见的MQTT主题:

1)building-b/floor-5:表示B栋楼第5层。

2)+/floor-5:表示任何一栋楼的第5层。

3)building-b/#:表示B栋楼的所有楼层。1.5.3 MQTT服务质量

针对不同的应用场景,MQTT协议提供三种不同消息发布服务质量:

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

·QoS=1“至少一次”:使用服务质量级别QoS1时消息会始终至少传递一次。如果发布者收到应答之前消息传递失败,那么一条消息可能会传递多次。该消息必须存储在发布者本地,直到发布者收到关于接收者已发布此消息的确认消息为止。QoS=1的情况如图1-7b所示。

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

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

本章介绍了物联网应用相关的多种协议,这些协议包括IPv4、IPv6、6LoWPAN、HTTP、CoAP和MQTT等,灵活使用这些协议将组成各种各样的物联网应用。IPv4、IPv6和6LoWPAN是物联网应用的基础,IPv4在互联网领域取得卓越的成就,但是IPv4地址空间短缺依然是物联网大规模应用的“痛处”,IPv6无疑将会在物联网中取得越来越多的应用。现阶段物联网设备依然属于受限制低功耗设备,这些设备无法像非受限制设备那样完整地使用IPv6,需要通过6LoWPAN头压缩技术降低协议本身的传输开销。除了这些基础协议之外,本章还讨论了3种应用层协议——HTTP、CoAP和MQTT,HTTP和CoAP均采用请求/响应模式,而MQTT采用订阅/发布模式,其中HTTP已经取得广泛的应用,它的成熟经验也被CoAP的制定所借鉴。本章还列举了CoAP的相关RFC文档,本书的后续章节将结合具体的示例对这些RFC文档进行详细说明。

本章的重点并不是为了说明CoAP,而是为了说明CoAP并不是凭空捏造的,也不能脱离其他网络技术独立存在。CoAP将成为物联网应用的重要组成部分,它将与其他应用层协议一起组成多姿多彩的物联网应用。第2章物联网与开源硬件2.1 本章主要内容

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

Arduino和树莓派虽然功能相似,但是也存在一定的区别。Arduino属于低功耗受限制设备范畴;而树莓派属于非受限制设备,可以运行Linux系统并具有普通PC的大多数功能。CoAP不但可以运行于Arduino平台,也可以运行于树莓派平台。本章重点介绍几款常用的Arduino和树莓派型号。2.2 Arduino2.2.1 Arduino简介

Arduino是一款便捷灵活、方便上手的开源电子设计原型平台。Arduino包含硬件和软件两部分,硬件部分包含各种Arduino开发板和扩展板,软件部分包括Arduino IDE、驱动扩展库和应用扩展库等部分。Arduino使用Processing/Wiring作为开发语言,该开发语言具有很多Java和C语言特性,上手简单且容易学习。

Arduino具有以下特点:

1)跨平台:Arduino IDE可以在Windows、Mac OS、Linux三大主流操作系统上运行。

2)简单清晰:Arduino IDE基于Processing IDE开发。对于初学者来说,极易掌握,同时具有足够的灵活性。Arduino语言基于Wiring语言开发,是对avr-gcc库的二次封装,不需要太多的单片机基础、编程基础,简单学习后就可以进行快速开发。

3)开放性:Arduino的硬件原理图、电路图、IDE软件及核心库文件都是开源的,在开源协议范围内里可以任意修改原始设计及相应代码。

4)发展迅速:Arduino不仅仅是全球最流行的开源硬件,也是一个优秀的硬件开发平台,是硬件开发的趋势。Arduino简单的开发方式使得开发者更关注创意与实现,更快地完成项目开发,大大节约了学习成本,缩短了开发周期。2.2.2 常用Arduino型号

下面介绍两款常用的Arduino型号:Arduino UNO和Arduino 101。

1.Arduino UNO

Arduino UNO是Arduino USB接口系列的最新版本,作为Arduino平台的参考标准模板。Arduino UNO的核心处理器为ATmega328,它同时具有14路数字输入输出口(其中5路可作为PWM输出)、6路模拟输入、一个16MHz晶体振荡器、一个USB口、一个电源插座、一个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 101是一个性能出色的低功耗开发板,它基于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脚的ICSP接口。Arduino 101的外观如图2-2所示。图2-2 Arduino 101外观2.2.3 Arduino扩展接口

Arduino的成功得益于它的标准化扩展接口,通过扩展接口,Arduino可以扩展各种各样的传感器检测功能、执行设备控制功能和网络连接功能。Arduino可通过具有输入和输出功能的普通IO口控制LED或蜂鸣器等低功率直流设备,也可以通过操作继电器的方式间接控制大功率交流设备;Arduino具有多路模拟量输入接口,通过这些模拟量输入接口Arduino可以连接多种传感器,如具有模拟量输入功能的角度传感器、三轴角速度传感器等;Arduino具有多路PWM输出接口,通过PWM输出接口Arduino可以实现直流电机调速等功能;Arduino还具有I2C接口和SPI接口,Arduino可通过这两种常用的接口扩展各种各样的芯片,如Arduino可通过SPI接口扩展网卡芯片W5100,通过W5100使Arduino具有有线网络功能。表2-1为Arduino扩展接口说明。表2-1 Arduino扩展接口说明2.3 树莓派2.3.1 树莓派简介

树莓派是一款具有单片机功能的小型Linux开发板,基于ARM的微型电脑主机,以SD或MicroSD卡为存储硬盘,主板周围有多个USB接口和一个10/100Mbit/s以太网接口。它可连接键盘、鼠标和网线,同时拥有HDMI高清视频输出接口。树莓派功能强大且接口丰富,但各种部件却整合在一张仅比信用卡稍大的主板上。2.3.2 常用树莓派型号

市面上流行多种型号的树莓派,常见的有树莓派2代B型(见图2-3)和树莓派3代B型(见图2-4)。树莓派2代B型和树莓派3代B型在外观上并没有明显的区别,功能和性能方面树莓派2代B型和树莓派3代B型也相差不大。图2-3 树莓派2代B型外观图2-4 树莓派3代B型外观

树莓派3代B型与树莓派2代B型具有相同的40引脚外部扩展接口,树莓派3代采用了更高主频的CPU,并内置了无线网卡和低功耗蓝牙功能,但售价与树莓派2代B型同为35美元,这使得树莓派3代B型越来越流行。

1.树莓派2代B型

树莓派2代B型主板采用博通BCM2836的四核CPU,主频可达900 MHz。树莓派2代B型具有1 GB内存。相较于之前的树莓派版本,CPU主频和板载内存均大幅度提升,所以树莓派的综合性能获得了广泛的认可。树莓派2代B型不但能运行全系列ARM GNU/Linux发行版,而且还支持Snappy Ubuntu Core及Windows 10等操作系统。

树莓派2代B型主要配置如下:

·博通BCM2836900MHz四核ARM Cortex-A7 CPU。

·1GB板载内存。

·10/100Mbit/s自适应网卡接口。

·4个USB 2.0接口。

·Micro SD卡插槽。

·microUSB供电接口。

·3.5 mm音频输出接口。

·40PIN GPIO扩展接口。

·HDMI接口。

·摄像头接口。

·LCD接口。

2.树莓派3代B型

树莓派3代B型是最新型号的树莓派开发板,该主板采用64位1.2 GHz主频的四核CPU,性能相对于树莓派2代B型提升了约50%。

树莓派3代B型内置了无线网卡以及蓝牙,而树莓派2代B型仅内置了有线网卡,如果想要之前的树莓派版本支持无线网络或低功耗蓝牙功能,则需要自行添加USB WiFi适配器或USB BLE适配器,而对于树莓派3代B型来说则无需购买这些额外配件。所以树莓派3代B型是一款开箱即用的物联网开发工具。

除了增加网络连接功能、提升处理器性能之外,树莓派3代B型还升级了USB电源管理部分,树莓派3代B型USB部分的最大输出电流可达2.5 A,所以该系列树莓派可支持更多更强大的外部USB设备。

树莓派3代B型主要配置如下:

·博通BCM28371.2GHz四核ARM 64位CPU。

·1GB内存。

·板载无线网卡和低功耗蓝牙。

·10/100Mbit/s自适应网卡接口。

·4个USB 2.0接口。

·升级USB电源,最大输出可达2.5 A。

·Micro SD卡插槽。

·microUSB供电接口。

·3.5 mm音频输出接口。

·40PIN GPIO扩展接口。

·HDMI接口。

·摄像头接口。

·LCD接口。2.3.3 树莓派扩展接口

树莓派的成功不但得益于它卓越的性能、便宜的价格,还与它与生俱来的GPIO扩展接口有关。树莓派GPIO扩展接口共有40个引脚,这些引脚包括具有输入输出功能的普通IO、SPI接口、I2C接口和UART接口等;这些扩展接口使树莓派能够控制各种各样的硬件。通过GPIO扩展接口,树莓派可非常方便地控制LED和蜂鸣器等低功率设备;树莓派也可以通过GPIO控制继电器的方式,控制直流大功率设备或者高压交流设备;树莓派GPIO扩展接口还具有I2C接口和SPI接口,通过这两种接口可以连接多种数字传感器,如三轴加速度传感器ADXL345、三轴加速度/角速度传感器MPU6050、温度传感器LM75等;树莓派通过I2C接口和SPI接口,还可以扩充A/D转换芯片,树莓派可通过A/D转换芯片连接各种模拟量传感器,如甲烷传感器等。可以说,树莓派GPIO扩展接口是树莓派与物理世界的一个桥梁。

1.接口定义

表2-2详细说明了树莓派GPIO扩展接口的各引脚功能。表2-2 GPIO扩展接口说明

2.编号方式

为了更好地控制树莓派扩展接口,树莓派爱好者开发了各种计算机语言的扩展库,如使用Python语言开发的RPi.GPIO扩展库,使用C语言开发的WiringPi扩展库等。这些扩展库屏蔽了Linux相关驱动的实现细节,用户并不需要熟悉Linux驱动相关的知识也可以非常方便地控制树莓派GPIO。这些扩展库功能相似,但是却使用了不同的编号策略。一般情况下,树莓派的引脚编号方式包括插座引脚编号方式、BCM28XX编号方式和WiringPi编号方式:

·插座引脚编号方式:编号方式侧重扩展插座引脚编号,从上到下、从左到右依次排列。这种编号方式最为简单直接。

·BCM28XX编号方式:编号方式侧重BCM28XX寄存器,这种编号方式根据BCM2835的GPIO寄存器进行编号。在表2-2中,引脚编号为11的端口对应BCM28XX GPIO17寄存器,若采用BCM28XX编号方式,该端口的编号将使用17。

·WiringPi编号方式:编号方式侧重逻辑实现,这种编号方式把仅具有普通IO功能的端口从0开始重新编号,这种编号方式更利于代码编写。表2-3可以很好地反映这三种不同编号方式的区别与联系。表2-3 三种不同编号方式对应关系2.4 本章小结

本章介绍了物联网领域中常用的两种开源硬件——Arduino和树莓派。在2.2节重点介绍了Arduino UNO和Arduino 101两款型号,Arduino UNO是Arduino领域的入门级开发板,其采用Atmega系列MCU;而Arduino 101是Arduino领域的最新型号,采用Intel芯片组并集成了低功耗蓝牙和6轴传感器功能。在2.3节重点介绍了树莓派2代B型和3代B型两种型号,树莓派3代B型较2代B型在整体性能上有所提升,并集成了无线WiFi网络和低功耗蓝牙功能。

无论是Arduino还是树莓派,均需要通过外部扩展接口与真实的物理世界产生联系,Arduino和树莓派均具有标准的外部扩展接口,也就是说不同型号之间虽然性能存在差异但硬件连接方式却完全一致。这种标准化方式使得市面上出现了大量的Arduino或树莓派扩展板,这些扩展板集成了各种各样的传感器和执行设备,这些外部配套设备也促进了Arduino和树莓派的流行。第3章网络技术回顾3.1 本章主要内容

本章我们将回顾与CoAP相关的网络技术,从CoAP的历史发展轨迹可以发现,CoAP并不是凭空产生的,也并不是完全独立设计,而是充分吸收其他协议的使用经验,针对受限制低功耗设备的特点“量身定制”的应用层协议。本章将介绍CoAP的“兄弟姐妹”——IPv4、IPv6、UDP、TCP和HTTP。现代网络一般采用分层结构设计,若参考OSI标准模型从上至下依次为应用层、表示层、会话层、传输层、网络层、数据链路层和物理层。通常来说,IPv4和IPv6属于网络层协议,UDP和TCP属于传输层协议,CoAP和HTTP属于应用层协议。图3-1可以简单直接地展现CoAP和其他协议间的关系。

学习CoAP需要了解较多的Web应用方面的基础知识。如果读者还不熟悉如何使用TCP或UDP的话,建议动手尝试本章的相关示例。如果读者已经熟练掌握Web前端开发或者后端开发的话,那么CoAP学习曲线将变得相对平坦,所以这些读者可以完全忽略本章内容;如果读者对HTTP GET方法或POST方法还没有任何概念的话,那么学习CoAP的曲线将变得相对陡峭,所以强烈建议这些读者动手尝试本章示例。图3-1 CoAP的“兄弟姐妹”

本章将通过动手尝试的方式帮助读者复习IP、TCP、UDP和HTTP相关网络知识。在3.2节中,将通过ping命令访问不同的服务器,通过这种简单的方法回顾IPv4地址、IPv6地址、IPv4首部和IPv6首部等基础知识;在3.3节,将通过一个UDP Echo示例回顾UDP首部和UDP端口号等概念;在3.4节依然通过一个TCP Echo示例回顾TCP首部和TCP工作流程等内容;在3.5节,将通过一个示例网页回顾HTTP方法、HTTP首部、HTTP响应和HTTP媒体类型等内容。

除了3.2节,其他所有小节均有服务器和客户端两个角色,在相关章节的示例中,服务器的程序均运行于树莓派中,而客户端的程序均运行于Windows主机中。为了更好地分析IP、UDP、TCP和HTTP,需要在Windows主机中安装较新版本的Wireshark,通过抓取树莓派和Windows主机之间的网络分组数据分析相关协议的实现细节。3.2 IP

IP是一种在源地址和目标地址之间传输数据分包的协议,IP是现代网络技术的重要组成部分,是整个协议族的基础,它为传输层协议UDP和TCP提供服务。IP分为IPv4版本和IPv6版本,IPv4为人熟知并取得了海量的应用。但是随着IPv4地址的枯竭,IPv6技术进入工程师的视野。相比于IPv4技术,IPv6技术有更大的地址空间、即插即用、更好的安全性和移动性等特点。与大多数工程师的一般印象相反,IPv6协议比IPv4协议更加简单,借助6LoWPAN这样的IPv6头压缩技术,IPv6可以很好地在受限制低功耗设备中使用,所以在物联网领域IPv6将有很好的前景。在本书第10章将展现一个受限制低功耗设备通过IPv6/6LoWPAN技术连接网络的实例。

由于IPv6技术并没有普及,从长远来看IPv4和IPv6将会长期并存,那么有必要同时掌握这两种技术。本节为了避免教科书式的讲解,将通过两个简单的示例说明IPv4和IPv6,并说明它们之间的区别。我们将使用ping命令连接两个不同的服务器——腾讯服务器(www.qq.com)和百度服务器(www.baidu.com),通过Wireshark抓取网络数据分包分析IPv4和IPv6的相关细节,最后比较IPv4和IPv6之间的区别与联系。3.2.1 动手尝试

本节将使用ping命令访问www.baidu.com和www.qq.com,ping命令一般用于测试目标主机是否可达,在Windows主机中使用ping指令,Windows主机将会发送ICMP请求,若服务器收到ICMP请求将会立即返回ICMP响应,Windows主机收到了ICMP响应则说明目标服务器可达。在本节相关测试环境中,www.baidu.com仅提供了IPv4访问,而www.qq.com提供了IPv4和IPv6访问能力。

1.测试环境说明

在本节示例中,测试Windows主机已经具备了IPv4和IPv6访问能力,通过ipconfig命令可以查看本机IPv4地址和IPv6地址,此时测试主机IPv4地址为100.84.243.XXX,而IPv6地址为240e:ec:4252:5095:2073:3e82:3e3:ABCD,如图3-2所示。图3-2 测试环境说明此处测试主机的IPv4地址隐去最后一字节,采用XXX代替;而测试主机IPv6地址隐去最后两字节,采用ABCD替代。

2.尝试IPv4连接

启动Wireshark,选择合适的网卡以捕获网络数据。在过滤器中输入“icmp”表示仅显示ICMP请求和响应数据分包。在Windows主

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载