当前: 首页 - 图书专区 - IoT开发实战:CoAP卷
IoT开发实战:CoAP卷


  在线购买
徐凯 编著
978-7-111-57780-5
59.00
252
2017年09月21日

计算机 > 计算机网络 > 综合

223
简体中文
16

店面
物联网核心技术丛书








物联网已经无处不在,本书主要讲解CoAP协议,这是一个IETF组织编写的面向低功耗设备的物联网应用层协议。CoAP协议具有很多优点,掌握了CoAP协议,物联网软件工程师能快速开发物联网嵌入式设备:
1)CoAP协议传输层协议采用UDP,对于终端来说UDP的确可以减少一部分能耗;
2)CoAP协议采用请求响应工作模式,当终端设备发送CoAP请求之后,服务器将返回合适响应码,终端通过响应吗可以判断服务器的处理结果;
3)CoAP协议包含重传机制,不用再重新设计重传方法;
4)CoAP协议参考很多了HTTP协议的成功经验,例如CoAP请求方法、CoAP选项定义和CoAP响应码等,所以Web开发工程师也可以非常容易掌握CoAP。
CoAP是受限制的应用协议(Constrained Application Protocol)的简称。随着近几年物联网技术的快速发展,越来越多的设备需要接入互联网。虽然对人们而言,连接互联网方便快捷,但是对于那些低功耗受限制设备,接入互联网却非常困难。在当前由PC机和智能手机组成的互联网世界中,信息交换一般通过TCP和HTTP协议实现。但是低功耗受限制设备要实现TCP和HTTP协议也许是一个非常苛刻的要求。为了让低功耗受限制设可以流畅接入互联网,CoAP应运而生。CoAP是一种物联网应用层协议,它运行于UDP协议之上,而不是像HTTP那样运行于TCP之上。CoAP借鉴了HTTP协议大量的成功经验,CoAP和HTTP都使用请求响应工作模式。与HTTP采用文本首部不同,CoAP采用完全的二进制首部,这使得CoAP的首部更短,传输效率更高。CoAP为低功耗受限制设备而生,一个内存仅有20KB的单片机也可以实现CoAP服务器或客户端。
本书主要内容包括:
学习CoAP必要的网络基础知识
CoAP与MQTT、HTTP之间的区别与联系
CoAP核心内容:二进制首部、工作模式、重传机制、响应码、选项和媒体类型等
CoAP扩展内容:CoAP资源描述和CoAP观察者
使用C语言、Python或Node.js实现CoAP客户端与服务器
使用Copper插件和Wireshark调试CoAP


徐 凯
嵌入式软件工程师,现就职于美的集团洗衣机事业部。擅长嵌入式Web系统和6LoWPAN无线传感网应用,精通物联网应用层协议CoAP和物联网操作系统Contiki。
为何写作本书
几年前我作为一名嵌入式工程师参与了一个关于低功耗车载终端的研发项目,该低功耗车载终端中包含一个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.1 本章主要内容1
1.2 物联网与IP2
1.2.1 IPv42
1.2.2 IPv62
1.2.3 6LoWPAN3
1.3 物联网与HTTP 6
1.3.1 HTTP6
1.3.2 REST风格6
1.4 物联网与CoAP7
1.4.1 CoAP8
1.4.2 RFC文档汇总8
1.5 物联网与MQTT协议10
1.5.1 MQTT协议10
1.5.2 MQTT主题10
1.5.3 MQTT服务质量11
1.6 本章小结12
第2章 物联网与开源硬件13
2.1 本章主要内容13
2.2 Arduino13
2.2.1 Arduino简介13
2.2.2 常用Arduino型号14
2.2.3 Arduino扩展接口15
2.3 树莓派16
2.3.1 树莓派简介16
2.3.2 常用树莓派型号16
2.3.3 树莓派扩展接口19
2.4 本章小结20
第3章 网络技术回顾22
3.1 本章主要内容22
3.2 IP23
3.2.1 动手尝试23
3.2.2 IPv4首部26
3.2.3 IPv4地址27
3.2.4 IPv6首部28
3.2.5 IPv6地址30
3.3 UDP31
3.3.1 动手尝试31
3.3.2 UDP首部35
3.3.3 UDP示例分析35
3.4 TCP37
3.4.1 动手尝试37
3.4.2 TCP首部41
3.4.3 TCP示例分析42
3.4.4 UDP与TCP对比43
3.5 HTTP44
3.5.1 动手尝试44
3.5.2 HTTP工作模式50
3.5.3 HTTP首部51
3.5.4 HTTP请求方法53
3.5.5 HTTP状态码53
3.5.6 HTTP首部字段54
3.5.7 HTTP的优势与问题54
3.6 本章小结56
第4章 CoAP快速入门57
4.1 本章主要内容57
4.2 Copper插件入门58
4.2.1 Copper插件安装58
4.2.2 Copper插件入门示例59
4.3 Arduino CoAP服务器实现61
4.3.1 获取示例61
4.3.2 示例说明62
4.3.3 动手测试67
4.3.4 着手分析70
4.4 本章小结73
第5章 CoAP核心74
5.1 本章主要内容74
5.2 CoAP首部74
5.2.1 版本编号Ver75
5.2.2 报文类型T75
5.2.3 标签长度指示TKL75
5.2.4 准则Code76
5.2.5 报文序号Message ID77
5.2.6 标签Token77
5.2.7 选项Options77
5.2.8 分隔符0xFF78
5.2.9 负载Payload78
5.3 CoAP工作模式78
5.3.1 逻辑分层结构79
5.3.2 报文类型79
5.3.3 请求/响应模式81
5.4 CoAP重传机制83
5.4.1 CoAP重传情况分析83
5.4.2 传输参数说明84
5.4.3 最大传输耗时(MAX_TRANSMIT_SPAN)85
5.4.4 最大等待时间(MAX_TRANSMIT_WAIT)86
5.5 CoAP方法87
5.5.1 GET87
5.5.2 POST87
5.5.3 PUT87
5.5.4 DELETE87
5.6 CoAP响应码87
5.6.1 正确响应88
5.6.2 客户端错误88
5.6.3 服务器错误89
5.7 CoAP选项90
5.7.1 选项格式90
5.7.2 URI相关选项91
5.7.3 Content-Format选项92
5.7.4 Accept选项92
5.7.5 Etag选项92
5.7.6 If-Match选项94
5.7.7 If-None-Match选项96
5.7.8 选项示例97
5.8 CoAP媒体类型99
5.8.1 link-format类型100
5.8.2 文本与二进制类型100
5.8.3 JSON类型101
5.9 本章小结102
第6章 CoAP扩展103
6.1 本章主要内容103
6.2 CoAP资源描述103
6.2.1 CoAP资源描述原理103
6.2.2 CoAP资源描述详解105
6.3 CoAP观察者模式106
6.3.1 观察者模式原理106
6.3.2 CoAP观察选项107
6.3.3 观察者模式示例108
6.4 本章小结110
第7章 CoAP软件实现111
7.1 本章主要内容111
7.2 libcoap112
7.2.1 libcoap安装112
7.2.2 libcoap使用详解114
7.2.3 libcoap入门示例117
7.3 aiocoap119
7.3.1 aiocoap安装120
7.3.2 aiocoap入门示例120
7.3.3 aiocoap块传输示例124
7.3.4 aiocoap树莓派GPIO示例126
7.4 node-coap129
7.4.1 Node.js安装130
7.4.2 node-coap入门示例132
7.4.3 node-coap媒体类型示例135
7.5 Californium137
7.5.1 准备工作137
7.5.2 Californium入门示例140
7.6 本章小结149
第8章 CoAP调试工具150
8.1 本章主要内容150
8.2 Copper调试工具150
8.2.1 Copper地址栏151
8.2.2 Copper工具栏152
8.2.3 Copper响应首部153
8.2.4 Copper负载内容154
8.2.5 Copper请求选项154
8.2.6 Copper使用示例155
8.3 Wireshark163
8.3.1 Wireshark安装164
8.3.2 Wireshark使用164
8.3.3 Wireshark示例166
8.4 本章小结169
第9章 微型物联网系统——服务器部分171
9.1 本章主要内容171
9.2 假想需求171
9.3 原型设计172
9.3.1 系统结构说明172
9.3.2 系统流程设计173
9.3.3 网页原型设计174
9.4 详细设计174
9.4.1 技术选型说明175
9.4.2 数据库设计176
9.4.3 CoAP API设计176
9.4.4 HTTP API设计177
9.5 具体实现179
9.5.1 数据库实现180
9.5.2 CoAP路由实现183
9.5.3 Web前端实现190
9.5.4 Web后端实现195
9.6 综合测试199
9.6.1 启动微型物联网系统199
9.6.2 增加模拟数据200
9.6.3 访问默认设备200
9.6.4 使用分页功能200
9.6.5 访问其他设备201
9.7 本章小结202
第10章 微型物联网系统——设备部分203
10.1 本章主要内容203
10.2 设备与网络结构说明203
10.2.1 设备说明203
10.2.2 网络结构说明205
10.3 Contiki入门206
10.3.1 Contiki初步207
10.3.2 native入门示例211
10.3.3 安装交叉工具链212
10.3.4 SensorTag入门示例213
10.4 搭建边界路由218
10.4.1 创建Slip-Radio218
10.4.2 创建Native-Border-Router219
10.5 增加NAT64223
10.5.1 NAT64简介223
10.5.2 安装Jool224
10.5.3 UDP NAT64示例225
10.6 CoAP Client Sensor231
10.6.1 加入网络并启动任务232
10.6.2 获取传感器数据233
10.6.3 传递传感器数据235
10.7 综合测试238
10.7.1 启动CoAP服务器238
10.7.2 启动边界路由和NAT64239
10.7.3 生成并下载固件239
10.7.4 查看运行结果239
10.8 本章小结242
参考文献243
物联网
读者书评
发表评论



高级搜索
运营前线2:一线运营专家的运营方法、技巧与实践
物联网设备安全
物联网工程设计与实施


版权所有© 2017  北京华章图文信息有限公司 京ICP备08102525号 京公网安备110102004606号
通信地址:北京市百万庄南街1号 邮编:100037
电话:(010)68318309, 88378998 传真:(010)68311602, 68995260
高校教师服务
华章教育微信
诚聘英才
诚聘英才