第I 部分 物聯網與萬維物聯網基礎 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素之間的松耦合 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.1JavaScript 崛起:從客戶端到服務端到智能產品 58
3.1.1在智能產品中引入JavaScript 59
3.2Node.js 簡介 60
3.2.1在電腦上安裝Node.js 61
3.2.2用Node.js 寫一個Web 服務器 61
3.2.3以JSON 格式返回傳感器數據 63
3.3Node.js 的模塊化 64
3.3.1npm——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.3IoT 個人局域網 118
5.2.4IoT 廣域網 122
5.2.5網絡層協議的選擇 124
5.3智能產品的應用層協議 127
5.3.1ZigBee 和藍牙的應用層 128
5.3.2Apple 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
第II 部分 構建萬維物聯網 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.1WoT 需要事件 161
6.2.2發布/ 訂閱 162
6.2.3webhook——HTTP 回調 163
6.2.4Comet——用hack 的方式讓HTTP 支持實時Web 165
6.2.5WebSocket 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.2Web 上的資源發現 219
8.3描述Web 智能產品 222
8.3.1Web 智能產品模型簡介 224
8.3數據 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.3JSON-LD 243
8.4.4課外閱讀 245
8.5總結 246
9 共享層:安全地分享Web 智能產品 247
9.1保障智能產品安全性 248
9.1.1加密基礎 250
9.1.2Web 安全與TLS :HTTPS 的S 251
9.1.3在樹莓派中啟用TLS 以支持HTTPS 和WSS 253
9.2授權和訪問控制 258
9.2.1通過 REST 和 API token 進行訪問控制 258
9.2.2OAuth :一個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.1Web 智能產品的通用用戶界面 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