第Ⅰ部分物联网与万维物联网基础 1
1从物联网到万维物联网 3
1.1定义物联网 4
1.2进入万维物联网 6
1.2.1万维物联网场景:连接旅店 6
1.2.2对比物联网和万维物联网 8
1.2.3物联网简史 11
1.3使用案例——为什么连接设备 13
1.3.1无线传感器网络和分布式传感 13
1.3.2可穿戴和自我量化 14
1.3.3智能家居和建筑 16
1.3.4智能城市和能源网络 16
1.3.5智能制造与工业4.0 17
1.3.6智能物流和供应链 18
1.3.7营销2.0 19
1.4万维物联网——增强版的物联网 21
1.4.1更容易编程 22
1.4.2开放和可扩展标准 22
1.4.3快速且易于部署、维护与集成 23
1.4.4元素之间的松耦合 23
1.4.5广泛使用的安全和隐私机制 24
1.4.6万维物联网的弊端 25
1.5总结 26
2你好,万维物联网 27
2.1初识万维物联网设备 28
2.1.1主角登场:树莓派 29
2.2练习1——在万维物联网上浏览一个设备 30
2.2.1第1部分——Web作为用户界面 30
2.2.2第2部分——Web作为API 34
2.2.3小结 39
2.3练习2——从一个WoT传感器中轮询数据 40
2.3.1第1部分——轮询当前传感器读数 40
2.3.2第2部分——轮询和绘制传感器读数 41
2.3.3第3部分——实时更新数据 42
2.3.4小结 44
2.4练习3——作用于现实世界 44
2.4.1第1部分——使用一个表单来更新显示的文字 44
2.4.2第2部分——创建你自己的表单来控制设备 46
2.4.3小结 48
2.5练习4——让别人知道你的设备存在 49
2.5.1小结 52
2.6练习5——创建你的第一个物理网聚合应用 53
2.6.1小结 55
2.7总结 55
3 Node .js与万维物联网 57
3.1 JavaScript崛起:从客户端到服务端到智能产品 58
3.1.1在智能产品中引入JavaScript 59
3.2 Node .js简介 60
3.2.1在电脑上安装Node.js 61
3.2.2用Node .js写一个Web服务器 61
3.2.3以JSON格式返回传感器数据 63
3.3 Node .js的模块化 64
3.3.1 npm—— Node的包管理器 64
3.3.2通过package .json和npm完全管理依赖 65
3.3.3你的第一个Node模块 67
3.4理解Node.js事件循环 68
3.4.1多线程Web服务器 68
3.4.2单线程、非阻塞Web服务器 69
3.5开始异步编程 71
3.5.1匿名回调 72
3.5.2具名回调 75
3.5.3控制流库 76
3.6总结和课外阅读 79
4嵌入式系统入门 81
4.1进入嵌入式设备的世界 82
4.1.1业余爱好者的设备与工业级设备 82
4.1.2实时操作系统与Linux 83
4.1.3小结及超越树莓派 85
4.2建立你的第一台WoT设备——树莓派 86
4.2.1入手树莓派 86
4.2.2选择你的树莓派 88
4.2.3购物清单 88
4.2.4设置你的树莓派 89
4.2.5连接你的设备 94
4.3安装Node.js到树莓派 95
4.3.1在树莓派上使用Git和GitHub 97
4.3.2小结 97
4.4连接传感器和执行器到树莓派 98
4.4.1理解GPIO端口 98
4.4.2使用面包板连接电子元件 98
4.4.3用Node.js访问GPIO 100
4.4.4课外阅读 105
4.5总结 106
5构建智能产品网络 107
5.1连接智能产品 109
5.1.1网络拓扑结构 109
5.1.2网络分层模型 111
5.2智能产品的网络层协议 112
5.2.1从空间的角度考虑 113
5.2.2网络协议和IoT 113
5.2.3 IoT个人局域网 118
5.2.4 IoT广域网 122
5.2.5网络层协议的选择 124
5.3智能产品的应用层协议 127
5.3.1 ZigBee和蓝牙的应用层 128
5.3.2 Apple HomeKit和Google Weave 129
5.3.3消息队列遥测传输 130
5.3.4资源受限的应用协议 133
5.3.5应用层协议的选择 134
5.4万维物联网架构 134
5.4.1第1层:接入层 135
5.4.2第2层:发现层 136
5.4.3第3层:共享层 136
5.4.4第4层:整合层 136
5.4.5为什么WoT是重要的 137
5.4.6课外阅读 137
5.5总结 138
第Ⅱ部分构建万维物联网 139
6接入层:智能产品的API 141
6.1设备、资源和Web智能产品 142
6.1.1表述性状态转移 142
6.1.2为什么需要一致的接口 144
6.1.3原则1:可访问资源 145
6.1.4原则2:通过表述来操作资源 149
6.1.5原则3:自描述信息 151
6.1.6原则4:超媒体作为应用程序状态引擎 157
6.1.7小结——Web智能产品设计过程 160
6.2超越REST:实时万维物联网 161
6.2.1 WoT需要事件 161
6.2.2发布/订阅 162
6.2.3 webhook—— HTTP回调 163
6.2.4 Comet——用hack的方式让HTTP支持实时Web 165
6.2.5 WebSocket 166
6.2.6未来:从HTTP/ 1.1到HTTP/2 170
6.3总结 171
7实现 Web智能产品 173
7.1连接设备到Web 174
7.2直接集成模式——在设备上实现REST 175
7.2.1创建WoT服务器 175
7.2.2资源设计 177
7.2.3表述设计 184
7.2.4接口设计 187
7.2.5通过WebSocket实现pub/sub接口 189
7.2.6小结——直接集成模式 192
7.3网关集成模式——CoAP 193
7.3.1运行一个CoAP服务器 194
7.3.2通过网关代理CoAP 195
7.3.3小结——网关集成模式 197
7.4云端集成模式——EVRYTHNG的MQTT 198
7.4.1设置EVRYTHNG账号 200
7.4.2创建MQTT客户端应用程序 204
7.4.3使用action来控制智能插座 206
7.4.4创建一个简单的Web控制应用 208
7.4.5小结——云端集成模式 211
7.5总结 212
8发现层:描述和发现Web智能产品 213
8.1可发现性问题 214
8.2发现智能产品 216
8.2.1网络发现(Network discovery) 216
8.2.2 Web上的资源发现 219
8.3描述Web智能产品 222
8.3.1 Web智能产品模型简介 224
8.3.2元数据 226
8.3.3属性 226
8.3.4行为 228
8.3.5智能产品 230
8.3.6在树莓派上实现Web智能产品模型 231
8.3.7小结——Web智能产品模型 237
8.4语义化的Web智能产品 238
8.4.1关联数据和RDFa 238
8.4.2约定的语义:schema.org 242
8.4.3 JSON-LD 243
8.4.4课外阅读 245
8.5总结 246
9共享层:安全地分享Web智能产品 247
9.1保障智能产品安全性 248
9.1.1加密基础 250
9.1.2 Web安全与TLS:HTTPS的S 251
9.1.3在树莓派中启用TLS以支持 HTTPS和WSS 253
9.2授权和访问控制 258
9.2.1通过REST和API token进行访问控制 258
9.2.2 OAuth:一个Web身份验证框架 261
9.3社交化万维物联网 264
9.3.1社交化万维物联网认证代理 264
9.3.2实现社交化万维物联网认证代理 267
9.4课外阅读 274
9.5总结 276
10整合层:物理网聚合应用 277
10.1构建一个简单的App——自动生成UI 278
10.1.1 Web智能产品的通用用户界面 279
10.2物理网聚合应用 286
10.2.1使用Node-RED工具创建物理网聚合应用 287
10.3使用向导式工具来创建物理网聚合应用:IFTTT 293
10.3.1将入侵者警报推送到Google电子表格上 294
10.3.2使用自建通道发送请求 296
10.3.3将入侵警报信息从Twitter推送到Google电子表格 297
10.4课外阅读 299
10.4.1从简单的聚合应用到大数据聚合应用 299
10.4.2更好的用户体验 300
10.5总结 300
附录A Arduino 、 BeagleBone、 Intel Edison与WoT 301