首页>参考读物>计算机科学与技术>软件与程序设计

物联网系统开发:从0到1构建IoT平台
作者 : 付强 著
出版日期 : 2020-08-14
ISBN : 978-7-111-66240-2
定价 : 79.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 266
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

内容简介
这是一本从技术原理、工程实践、设计模式和最佳实践4个维度讲解物联网系统开发的著作,是作者10余年实践经验的总结。首先,通过代码实例循序渐进、深入浅出地介绍了物联网协议的原理与实践;然后,以一个功能完备的综合性物联网平台的搭建过程为例,讲解了如何从0到1搭建一个物联网平台,同时总结了物联网平台开发中常用的设计模式和最佳实践。
全书一共12章,逻辑上可分为3大部分:
第一部分(第1-2章) 物联网基础
对物联网的一些关键常识和各种协议进行了详细的介绍。
第二部分(第3-5章) 物联网协议
通过大量实例代码详细分析和讲解了MQTT协议的规范、特性、原理和应用。
第三部分(第6-12章)物联网平台开发
详细讲解了如何使用开源组件和云服务从0到1搭建一个具备完备功能的物联网平台。

图书特色

资深物联网专家10余年经验总结,让从业者少走弯路、少踩坑、少重复造轮子
详解MQTT协议、从0到1搭建物联网平台的方法
总结物联网平台开发的设计模式和最佳实践

图书前言

为什么要写这本书
2011年我在硅谷的时候,曾经参与设计和开发了一个物联网平台。这个平台的目的是为各种物联网设备提供统一的通信接口,以及提供数据存储和分析功能,降低物联网设备商的开发和运营成本。不过由于物联网设备的异构性太强,同时平台的愿景过于超前,而当时物联网应用的发展包括资本的投入都远不及现在,这个项目不得不半路中止。
2015年,我在国内和朋友联合创办了一家物联网相关的公司。为了支撑公司的硬件产品,我们开发了一个提供统一通信和数据服务的物联网平台,不过吸取了之前的教训,这个平台只限于对同一组织(公司)里的多个产品提供支持。当时各大云服务商,比如阿里云,也提供了非常成熟的物联网套件,我们将这些物联网套件中的一些功能移植到了自研的物联网平台上。这个平台从技术层面很好地支持了公司从0到1、从1到N持续盈利的全流程。
在这个过程中我遇到过一些问题,也总结了一些非常有用的经验。在此期间,我也加入了一些物联网开发者的社区。在日常的技术交流里,我发现一些开发人员对常用的物联网协议的理解是有问题的,对一些功能应该在协议层面解决还是在业务层面解决不是很清楚。我曾在互联网上搜索过相关的技术文章,发现系统性地讲解协议的规范和特性非常少,不是只对一两个功能进行介绍,就是翻译协议规范,缺乏代码示例。
在这种情况下,我在GitChat码字专栏写了我的第一篇文章《MQTT协议快速入门》,详细地对物联网应用中最常见的MQTT协议的规范和特性进行了讲解,并对每一个特性附以丰富的代码示例。
加入专栏文章的读者交流群后,我又发现读者们还有很多关于设计、业务架构上的疑问,深入理解MQTT协议并不能解决这些问题。这让我意识到,在物联网行业,并不像Web开发那样有成熟的设计模式和框架可以使用,开发者往往都是从协议级别开始往上搭,重复地造轮子。
这时,我觉得有必要把我们在开发物联网平台中遇到的困难和总结的经验分享出来,从协议开始讲起,再覆盖物联网后台开发中常见的设计模式和最佳实践,让其他的物联网开发者少走一些弯路,少造一些轮子,进而更快速、高效地上线自己的产品。
读者对象
物联网应用开发者
物联网架构师
物联网平台开发者
对物联网感兴趣的开发人员
有一定经验的IM平台、移动推送平台开发人员
渴望学习更多物联网实际开发经验的人员
如何阅读本书
本书涵盖物联网应用开发80%的场景,理论和实战并重。本书内容分为三大部分。
第一部分(第1~2章)为物联网基础知识介绍,涵盖物联网的概念和常用协议。
第二部分(第3~5章)为MQTT协议详解,通过详尽的示例代码对MQTT协议的规范和特性进行讲解。
第三部分(第6~12章)为物联网平台开发实战,从0开始用开源的组件搭建一个名为“Maque IotHub”的物联网平台,在这个过程中讲解物联网后台开发中常见的设计模式和最佳实践。
在最后补充有结语与附录。结语总结了本书讲到的相关系统与知识体系,附录介绍了运行Maque IotHub的方法和步骤。
如果你对MQTT协议已经非常了解,可以直接从第三部分开始看起,第二部分可用作协议规范参考。
如果你是一名初学者,请务必从第1章的基础知识开始学习。
勘误和支持
除封面署名外,参加本书编写工作的还有:赵华振、李斌锋、邓斌、戚祥、于伟、皮文星、陈育春、陆正武、虞晓东、张恒汝、高喆、刘威、刘冉、付志涛、宗杰、王大平、李振捷、李波、张鹏、管西京、闫芳、王玉芹、王秀明、杨振珂。由于作者的水平有限,编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。
书中有大量的实例代码,都可以从我的GitHub站点(https://github.com/sufish)下载。你也可以关注我在GitChat的专栏(https://gitbook.cn/gitchat/author/59ed8409991df70ecd5a0f8f),并加入专栏读者群交流。如果你有更多的宝贵意见,也欢迎发邮件到yfc@hzbook.com。期待能够得到你们的真挚反馈。
致谢
首先要感谢EMQ X的开发者和贡献者们,开发和维护一款强大的开源MQTT Broker非常不易。
感谢GitChat提供的平台,你们的引荐和帮助促成了本书的出版。
感谢机械工业出版社华章分社的杨福川老师和各位编辑,在这么长的时间中始终支持我写作,你们的鼓励和引导帮助我顺利完成全部书稿。
感谢我公司的全体同仁,是你们的共同努力才给我提供一个能够实践自己想法的机会和平台。
最后感谢关心我的家人,尤其是我的妻子和女儿,你们的支持是我完成本书的原动力!
谨以此书献给我最亲爱的家人,以及广大的物联网开发者!

付 强

上架指导

计算机\程序设计

封底文字

本书内容翔实,理论与实践结合,是目前为数不多的、专注于物联网应用架构和开发的著作,对初学者和有经验的开发者来说,都是非常优质的学习资料。
陈良银 四川大学工业互联网研究院副院长/物联网系主任
作者站在物联网的整体角度,从关键协议到系统,再到未来展望,由简入繁,娓娓道来。对于物联网开发浪潮中的每一位技术人员,本书可以帮助他们了解到物联网系统开发的清晰脉络,是专业人员不可多得的一本好书。
王玉成 IoT GDE
在这本书里,付老师先向读者展示了物联网和物联网协议的整体图景,再带领读者从MQTT协议入手,深入浅出地讲解了其他物联网协议,最后引导读者了解搭建IoT平台的精要。
王晓东 诺基亚通信有限公司研发主管/创业磨坊成都联合总监
物联网产业作为新基建的重要内容, 在未来必然会迎来更多的发展机会。本书着重介绍物联网应用的架构和设计, 经验和场景都来自实际运营的平台和产品,对物联网架构师和开发者有非常大的学习和参考价值。
王 俭 腾讯云与智慧产业事业群高级架构师
作者在 IoT领域有多年实践经验,熟悉各种 IoT实际业务场景。本书由基础开始,结合各种场景逐步展开,对于初学者来说是非常好的经验借鉴。
王 衡 字节跳动技术专家

作者简介

付强 著:作者简介
付强
资深物联网技术专家,有10余年从业经验,专注于物联网平台和产品的设计与开发,非常熟悉各种物联网协议和物联网系统的架构与开发。
现就职于某智慧社区解决方案企业的联合创始人兼CTO, 曾就职于趋势科技、诺基亚中国,以及德国和美国硅谷的初创公司。
从 C 语言到 Web 开发,从微服务架构到移动开发,都有涉猎。GitChat专栏作者, 撰写了多篇物联网和AI相关的专栏文章。

图书目录

前言
第一部分 物联网基础
第1章 什么是物联网 2
1.1 物联网和人工智能 3
1.2 物联网的现状与前景 4
第2章 常见的物联网协议 6
2.1 MQTT协议 6
2.2 MQTT-SN协议 7
2.3 CoAP协议 8
2.4 LwM2M协议 9
2.5 HTTP协议 9
2.6 LoRaWAN协议 9
2.7 NB-IoT协议 10
2.8 本章小结 10
第二部分 MQTT协议详解与实战
第3章 MQTT协议基础 13
3.1 MQTT协议的通信模型 13
3.2 MQTT Client 14
3.3 MQTT Broker 15
3.4 MQTT协议数据包格式 17
3.5 本章小结 19
第4章 MQTT协议详解 20
4.1 建立到Broker的连接 20
4.1.1 CONNECT数据包 20
4.1.2 CONNACK数据包 23
4.1.3 关闭连接 25
4.1.4 代码实践 26
4.2 订阅与发布 28
4.2.1 PUBLISH数据包 30
4.2.2 代码实践:发布消息 31
4.2.3 订阅一个主题 32
4.2.4 代码实践:订阅主题 35
4.2.5 取消订阅 36
4.3 QoS及其最佳实践 39
4.3.1 MQTT协议中的QoS等级 39
4.3.2 QoS0 40
4.3.3 QoS1 40
4.3.4 QoS2 42
4.3.5 代码实践:使用不同的QoS发布消息 44
4.3.6 实际的Subscribe QoS 48
4.3.7 QoS的最佳实践 48
4.4 Retained消息和LWT 49
4.4.1 Retained消息 49
4.4.2 代码实践:发布和接收Retained消息 50
4.4.3 LWT 51
4.4.4 代码实践:监控Client连接状态 52
4.5 Keepalive与连接保活 54
4.5.1 Keepalive 54
4.5.2 代码实践 55
4.5.3 连接保活 57
4.6 MQTT 5.0的新特性 58
4.6.1 用户属性 59
4.6.2 共享订阅 59
4.6.3 消息过期 60
4.6.4 重复主题 60
4.6.5 Broker能力查询 60
4.6.6 双向DISCONNECT 61
4.7 本章小结 61
第5章 MQTT协议实战 62
5.1 “AI+IoT”项目实战 62
5.1.1 用TensorFlow在Android系统上进行物体识别 62
5.1.2 如何在MQTT协议里传输大文件 63
5.1.3 消息去重 64
5.1.4 最终的消息数据格式 64
5.1.5 代码实践:上传识别结果 64
5.1.6 在浏览器中运行MQTT Client 66
5.1.7 代码实践:接收识别结果 67
5.1.8 搭建私有MQTT Broker 68
5.1.9 传输层安全 69
5.2 MQTT常见问题解答 70
5.3 开发物联网应用,学会MQTT协议就够了吗 71
5.4 本章小结 72
第三部分 实战:从0搭建一个IoT平台
第6章 准备工作台 75
6.1 安装需要的组件 75
6.2 Maque IotHub的组成部分 76
6.3 项目结构 76
6.3.1 IotHub Server 77
6.3.2 IotHub DeviceSDK 77
6.4 本章小结 79
第7章 设备生命周期管理 80
7.1 设备注册 80
7.1.1 设备三元组 80
7.1.2 EMQ X的认证方式 81
7.1.3 设备接入流程 84
7.1.4 Server API:设备注册 84
7.1.5 调整EMQ X配置 87
7.1.6 修改DeviceSDK 87
7.1.7 Server API:设备信息查询 88
7.1.8 Server API:获取接入IotHub的一次性密码(JWT) 89
7.1.9 完善细节 91
7.2 设备连接状态管理 93
7.2.1 Poor man’s Solution 93
7.2.2 使用EMQ X的解决方案 94
7.2.3 管理设备的连接状态 97
7.3 设备的禁用与删除 101
7.3.1 禁用设备 101
7.3.2 删除设备 105
7.4 设备权限管理 106
7.4.1 为什么要控制Publish和Subscribe 106
7.4.2 EMQ X的ACL功能 106
7.4.3 集成EMQ X ACL 110
7.5 给IotHub加一点扩展性 111
7.5.1 EMQ X的纵向扩展 112
7.5.2 EMQ X的横向扩展 113
7.6 本章小结 114
第8章 上行数据处理 115
8.1 选择一个可扩展的方案 115
8.1.1 完全基于MQTT协议的方案 116
8.1.2 基于Hook的方案 117
8.1.3 数据格式 118
8.1.4 主题名规划 118
8.1.5 上行数据存储 118
8.1.6 通知业务系统 119
8.1.7 上行数据查询 119
8.1.8 上行数据处理流程 120
8.2 实现上行数据处理功能 120
8.2.1 DeviceSDK的功能实现 121
8.2.2 IotHub Server的功能实现 122
8.2.3 代码联调 125
8.2.4 通知业务系统 127
8.2.5 Server API历史消息查询 129
8.3 设备状态上报 130
8.3.1 设备状态 130
8.3.2 DeviceSDK的实现 131
8.3.3 IotHub Server 的实现 131
8.3.4 Server API:查询设备状态 134
8.3.5 代码联调 134
8.3.6 为何不用Retained Message 135
8.4 时序数据库 135
8.4.1 时序数据 136
8.4.2 时序数据库 136
8.4.3 收集设备连接状态变化的数据 137
8.5 本章小结 140
第9章 下行数据处理 141
9.1 选择一个可扩展的方案 142
9.1.1 完全基于 MQTT协议的方案 142
9.1.2 基于 EMQ X RESTful API的方案 143
9.1.3 下行数据格式 143
9.1.4 主题名规划 144
9.1.5 如何订阅主题 145
9.1.6 设备端消息去重 145
9.1.7 指令回复 146
9.2 DeviceSDK端的实现 146
9.2.1 消息去重 146
9.2.2 提取元数据 147
9.2.3 处理指令 148
9.2.4 回复指令 149
9.3 服务端的实现 150
9.3.1 更新ACL 列表 150
9.3.2 EMQ X发布功能 150
9.3.3 Server API:发送指令 151
9.3.4 服务器订阅 152
9.3.5 通知业务系统 154
9.3.6 代码联调 155
9.4 本章小结 158
第10章 IotHub的高级功能 159
10.1 RPC式调用 159
 10.1.1 主题规划 160
 10.1.2 等待指令回复 161
 10.1.3 服务端实现 161
 10.1.4 Server API: 发送RPC指令 163
 10.1.5 更新设备ACL列表 164
 10.1.6 更新服务器订阅列表 164
 10.1.7 DeviceSDK端实现 165
 10.1.8 代码联调 166
10.2 设备数据请求 167
 10.2.1 更新设备ACL列表 168
 10.2.2 服务端实现 168
 10.2.3 DeviceSDK端实现 169
 10.2.4 代码联调 170
10.3 NTP服务 171
 10.3.1 IotHub 的 NTP 服务 172
 10.3.2 DeviceSDK端实现 172
 10.3.3 服务端实现 173
 10.3.4 代码联调 174
10.4 设备分组 175
 10.4.1 功能设计 175
 10.4.2 服务端实现 177
 10.4.3 DeviceSDK端实现 180
 10.4.4 代码联调 183
10.5 M2M设备间通信 185
 10.5.1 主题名规划 185
 10.5.2 服务端实现 186
 10.5.3 DeviceSDK端实现 186
 10.5.4 代码联调 187
10.6 OTA升级 188
 10.6.1 功能设计 189
 10.6.2 服务端实现 191
 10.6.3 DeviceSDK端实现 194
 10.6.4 代码联调 196
10.7 设备影子 199
 10.7.1 什么是设备影子 199
 10.7.2 设备影子的数据结构 200
 10.7.3 设备影子的数据流向 200
 10.7.4 服务端实现 202
 10.7.5 DeviceSDK端实现 208
 10.7.6 代码联调 209
10.8 IotHub 的状态监控 211
 10.8.1 使用RESTful API 211
 10.8.2 使用系统主题 212
 10.8.3 EMQ X 的 Listener Zone 213
 10.8.4 代码演示 214
10.9 本章小结 215
第11章 扩展EMQ X Broker 216
11.1 EMQ X的插件系统 217
 11.1.1 Erlang语言 217
 11.1.2 安装Erlang 编译工具 218
11.2 我们会用到的Erlang特性 218
 11.2.1 Erlang简介 218
 11.2.2 变量和赋值 219
 11.2.3 特殊的 Erlang 数据类型 220
 11.2.4 模式匹配 221
 11.2.5 模块与函数 221
 11.2.6 宏定义 222
 11.2.7 OTP 222
11.3 搭建开发和编译环境 222
 11.3.1 下载和编译 EMQ X 222
 11.3.2 使用插件模板 223
 11.3.3 插件的代码结构 224
 11.3.4 修改模板插件 226
11.4 实现基于RabbitMQ的Hook插件:emqx-rabbitmq-hook 227
 11.4.1 代码结构 227
 11.4.2 建立RabbitMQ连接和连接池 227
 11.4.3 处理client.connected事件 228
 11.4.4 处理client.disconnected事件 230
 11.4.5 处理message.publish事件 230
 11.4.6 编译插件 231
 11.4.7 插件的配置文件 233
 11.4.8 应用配置项 235
11.5 使用emqx-rabbitmq-hook 236
 11.5.1 发布emqx-rabbitmq-hook插件 236
 11.5.2 集成emqx-rabbitmq-hook 238
 11.5.3 IotHub 的全新架构 239
11.6 本章小结 240
第12章 集成CoAP协议 241
12.1 CoAP协议简介 241
 12.1.1 CoAP协议的消息模型 242
 12.1.2 CoAP协议的请求/应答机制 243
 12.1.3 CoAP OBSERVE 244
 12.1.4 CoAP HTTP Gateway 244
12.2 集成CoAP协议 245
 12.2.1 EMQ X的CoAP插件 245
 12.2.2 CoAP 设备端代码 246
 12.2.3 代码联调 247
 12.2.4 CoAP协议的连接状态 247
12.3 本章小结 248
结语 我们学到了什么 249
附录 如何运行Maque IotHub 253

教学资源推荐
作者: 郑阿奇 主编 顾韵华 等编著
参考读物推荐
作者: Gail Anderson;Paul Anderson
作者: 王小川 编著
作者: 黄灯桥 著