√ 物聯(lián)網(wǎng)的潛能絕不止于解決特定場景的小問題,而是用務實|結構化的方法論來構建大型系統(tǒng)、實現(xiàn)創(chuàng)新、重建秩序。
√ 對 WoT 及其工具鏈的深刻理解和良好把握,讓你得以用成熟的萬維網(wǎng)協(xié)議建立更大、更智能、更簡單的萬維物聯(lián)網(wǎng)。
√ IoT 離不開更大圖景及完整生態(tài),作者要用超前視野和大局觀,解決無數(shù)工具|標準|協(xié)議及云服務構成的高度碎片化。
√ 易讀到物聯(lián)網(wǎng)新手可按圖索驥建立一個完整的端到端物聯(lián)網(wǎng);深刻到創(chuàng)建完所有元素后你已成為熟練的物聯(lián)網(wǎng)開發(fā)者。
本書是介紹萬維物聯(lián)網(wǎng)的入門教材。作者通過將樹莓派作為物理設備網(wǎng)關,提出一種構建萬物互聯(lián)的可行方案――利用現(xiàn)有的萬維網(wǎng)標準、HTTP 協(xié)議,以及HTML、CSS 和JavaScript 技術,讓智能產品終端成為開放的萬維網(wǎng)的一部分,最終形成物聯(lián)網(wǎng)和萬維網(wǎng)的結合體――萬維物聯(lián)網(wǎng)。本書分為兩個部分,第1 章到第5 章是第I 部分,內容涵蓋萬維物聯(lián)網(wǎng)基本概念、JavaScript 和Node.js 介紹,通過一個簡單的例子來說明如何使用Node.js 的Web 框架與遠程設備進行交互。第6 章到第10 章是第II 部分,詳細介紹萬維物聯(lián)網(wǎng)技術棧中的各層架構及如何用現(xiàn)有的Web 技術實現(xiàn)各層架構,最終能夠形成物理網(wǎng)聚合應用,能夠快速創(chuàng)建復雜應用程序,整合各種設備和數(shù)據(jù)。本書涉獵的技術范圍廣泛,包括各種Web 和物聯(lián)網(wǎng)協(xié)議、Web 標準及樹莓派的原理與實踐。適合之前沒有豐富嵌入式開發(fā)經驗,但希望探索物聯(lián)網(wǎng)世界的Web 開發(fā)人員閱讀,也適合作為一本初級教程指導樹莓派開發(fā)者和Node.js 愛好者進行物聯(lián)網(wǎng)開發(fā)實踐。
Dominique “Dom” Guinard 是 EVRYTHNG 的 CTO 和聯(lián)合創(chuàng)始人,EVRYTHNG 是一個大規(guī)模的萬維物聯(lián)網(wǎng)云平臺,通過連接產品到萬維網(wǎng)讓它們變得更智能化。Dom 擁有蘇黎世聯(lián)邦理工大學的博士學位,他在學校期間致力于萬維物聯(lián)網(wǎng)架構的早期研究:萬維物聯(lián)網(wǎng)架構是物聯(lián)網(wǎng)的一個開放的應用層。早在 2012 年,他的博士論文被授予 ETH 勛章。在這之前,Dom 花了十年時間研究了許多物聯(lián)網(wǎng)項目:與 Sun Microsystems 公司合作探索大規(guī)模 RFID 網(wǎng)絡,研究移動電話作為物聯(lián)網(wǎng)網(wǎng)關的作用,在蘇黎世聯(lián)邦理工大學的 Auto-ID 實驗室參與諾基亞的一些研究,在麻省理工學院的 Auto-ID 實驗室將 EPCglobal RFID 網(wǎng)絡用于萬維物聯(lián)網(wǎng),以及用四年時間在 SAP 的企業(yè)級軟件中整合標記的對象和無線傳感器網(wǎng)絡。
Vlad Trifa 是 EVRYTHNG 的聯(lián)合創(chuàng)始人、產品研發(fā)的執(zhí)行副總裁。他是分布式嵌入傳感器和交互式設備與使用 Web 技術的企業(yè)應用軟件集成方面的公認專家。曾經他是麻省理工學院的感知城市實驗室的研究員,在美國和新加坡研究城市與移動計算,在加州大學洛杉磯分校研究生物和分布式信號處理,以及在日本東京的國際電器通信基礎研究所(ATR)研究人與機器人交互和神經系統(tǒng)科學。他也曾經作為 SAP 的助理研究員,在工廠自動化與企業(yè)計算方面獲得工業(yè)經驗。Vlad 以博士學位畢業(yè)于蘇黎世聯(lián)邦理工大學計算機科學專業(yè)并擁有瑞士洛桑聯(lián)邦理工學院機器人學、人工智能和機器學習方向的計算機科學碩士學位。
吳亮(月影)奇虎360高級技術經理,360前端團隊 奇舞團 負責人,w3ctech顧問。曾先后在微軟亞洲研究院做過訪問學生、金蝶軟件擔任項目經理,百度電子商務事業(yè)部擔任Web開發(fā)項目經理。多年來致力于Web標準和JavaScript技術的推廣,活躍于國內各技術社區(qū)。
第I 部分 物聯(lián)網(wǎng)與萬維物聯(lián)網(wǎng)基礎
1 從物聯(lián)網(wǎng)到萬維物聯(lián)網(wǎng)
1.1 定義物聯(lián)網(wǎng)
1.2 進入萬維物聯(lián)網(wǎng)
1.2.1 萬維物聯(lián)網(wǎng)場景:連接旅店
1.2.2 對比物聯(lián)網(wǎng)和萬維物聯(lián)網(wǎng)
1.2.3 物聯(lián)網(wǎng)簡史
1.3 使用案例――為什么連接設備
1.3.1 無線傳感器網(wǎng)絡和分布式傳感
1.3.2 可穿戴和自我量化
1.3.3 智能家居和建筑
1.3.4 智能城市和能源網(wǎng)絡
1.3.5 智能制造與工業(yè)4.0
1.3.6 智能物流和供應鏈
1.3.7 營銷2.0
1.4 萬維物聯(lián)網(wǎng)――增強版的物聯(lián)網(wǎng)
1.4.1 更容易編程
1.4.2 開放和可擴展標準
1.4.3 快速且易于部署、維護與集成
1.4.4 元素之間的松耦合
1.4.5 廣泛使用的安全和隱私機制
1.4.6 萬維物聯(lián)網(wǎng)的弊端
1.5 總結
2 你好,萬維物聯(lián)網(wǎng)
2.1 初識萬維物聯(lián)網(wǎng)設備
2.1.1 主角登場:樹莓派
2.2 練習1――在萬維物聯(lián)網(wǎng)上瀏覽一個設備
2.2.1 第1 部分――Web 作為用戶界面
2.2.2 第2 部分――Web 作為API
2.2.3 小結
2.3 練習2――從一個WoT 傳感器中輪詢數(shù)據(jù)
2.3.1 第1 部分――輪詢當前傳感器讀數(shù)
2.3.2 第2 部分――輪詢和繪制傳感器讀數(shù)
2.3.3 第3 部分――實時更新數(shù)據(jù)
2.3.4 小結
2.4 練習3――作用于現(xiàn)實世界
2.4.1 第1 部分――使用一個表單來更新顯示的文字
2.4.2 第2 部分――創(chuàng)建你自己的表單來控制設備
2.4.3 小結
2.5 練習4――讓別人知道你的設備存在
2.5.1 小結
2.6 練習5――創(chuàng)建你的第一個物理網(wǎng)聚合應用
2.6.1 小結
2.7 總結
3 Node.js 與萬維物聯(lián)網(wǎng)
3.1 JavaScript 崛起:從客戶端到服務端到智能產品
3.1.1 在智能產品中引入JavaScript
3.2 Node.js 簡介
3.2.1 在電腦上安裝Node.js
3.2.2 用Node.js 寫一個Web 服務器
3.2.3 以JSON 格式返回傳感器數(shù)據(jù)
3.3 Node.js 的模塊化
3.3.1 npm――Node 的包管理器
3.3.2 通過package.json 和npm 完全管理依賴
3.3.3 你的第一個Node 模塊
3.4 理解Node.js 事件循環(huán)
3.4.1 多線程Web 服務器
3.4.2 單線程、非阻塞Web 服務器
3.5 開始異步編程
3.5.1 匿名回調
3.5.2 具名回調
3.5.3 控制流庫
3.6 總結和課外閱讀
4 嵌入式系統(tǒng)入門
4.1 進入嵌入式設備的世界
4.1.1 業(yè)余愛好者的設備與工業(yè)級設備
4.1.2 實時操作系統(tǒng)與Linux
4.1.3 小結及超越樹莓派
4.2 建立你的第一臺WoT 設備――樹莓派
4.2.1 入手樹莓派
4.2.2 選擇你的樹莓派
4.2.3 購物清單
4.2.4 設置你的樹莓派
4.2.5 連接你的設備
4.3 安裝Node.js 到樹莓派
4.3.1 在樹莓派上使用Git 和GitHub
4.3.2 小結
4.4 連接傳感器和執(zhí)行器到樹莓派
4.4.1 理解GPIO 端口
4.4.2 使用面包板連接電子元件
4.4.3 用Node.js 訪問GPIO
4.4.4 課外閱讀
4.5 總結
5 構建智能產品網(wǎng)絡
5.1 連接智能產品
5.1.1 網(wǎng)絡拓撲結構
5.1.2 網(wǎng)絡分層模型
5.2 智能產品的網(wǎng)絡層協(xié)議
5.2.1 從空間的角度考慮
5.2.2 網(wǎng)絡協(xié)議和IoT
5.2.3 IoT 個人局域網(wǎng)
5.2.4 IoT 廣域網(wǎng)
5.2.5 網(wǎng)絡層協(xié)議的選擇
5.3 智能產品的應用層協(xié)議
5.3.1 ZigBee 和藍牙的應用層
5.3.2 Apple HomeKit 和Google Weave
5.3.3 消息隊列遙測傳輸
5.3.4 資源受限的應用協(xié)議
5.3.5 應用層協(xié)議的選擇
5.4 萬維物聯(lián)網(wǎng)架構
5.4.1 第1 層:接入層
5.4.2 第2 層:發(fā)現(xiàn)層
5.4.3 第3 層:共享層
5.4.4 第4 層:整合層
5.4.5 為什么WoT 是重要的
5.4.6 課外閱讀
5.5 總結
第II 部分 構建萬維物聯(lián)網(wǎng)
6 接入層:智能產品的API
6.1 設備、資源和Web 智能產品
6.1.1 表述性狀態(tài)轉移
6.1.2 為什么需要一致的接口
6.1.3 原則1 :可訪問資源
6.1.4 原則2 :通過表述來操作資源
6.1.5 原則3 :自描述信息
6.1.6 原則4 :超媒體作為應用程序狀態(tài)引擎
6.1.7 小結――Web 智能產品設計過程
6.2 超越REST :實時萬維物聯(lián)網(wǎng)
6.2.1 WoT 需要事件
6.2.2 發(fā)布/ 訂閱
6.2.3 webhook――HTTP 回調
6.2.4 Comet――用hack 的方式讓HTTP 支持實時Web
6.2.5 WebSocket
6.2.6 未來:從HTTP/1.1 到HTTP/2
6.3 總結
7 實現(xiàn) Web 智能產品
7.1 連接設備到Web
7.2 直接集成模式――在設備上實現(xiàn) REST
7.2.1 創(chuàng)建WoT 服務器
7.2.2 資源設計
7.2.3 表述設計
7.2.4 接口設計
7.2.5 通過WebSocket 實現(xiàn)pub/sub 接口
7.2.6 小結――直接集成模式
7.3 網(wǎng)關集成模式――CoAP
7.3.1 運行一個CoAP 服務器
7.3.2 通過網(wǎng)關代理CoAP
7.3.3 小結――網(wǎng)關集成模式
7.4 云端集成模式――EVRYTHNG 的MQTT
7.4.1 設置EVRYTHNG 賬號
7.4.2 創(chuàng)建MQTT 客戶端應用程序
7.4.3 使用action 來控制智能插座
7.4.4 創(chuàng)建一個簡單的Web 控制應用
7.4.5 小結――云端集成模式1
7.5 總結
8 發(fā)現(xiàn)層:描述和發(fā)現(xiàn)Web 智能產品
8.1 可發(fā)現(xiàn)性問題
8.2 發(fā)現(xiàn)智能產品
8.2.1 網(wǎng)絡發(fā)現(xiàn)(Network discovery)
8.2.2 Web 上的資源發(fā)現(xiàn)
8.3 描述Web 智能產品
8.3.1 Web 智能產品模型簡介
8.3.2 元數(shù)據(jù)
8.3.3 屬性
8.3.4 行為
8.3.5 智能產品
8.3.6 在樹莓派上實現(xiàn)Web 智能產品模型
8.3.7 小結――Web 智能產品模型
8.4 語義化的Web 智能產品
8.4.1 關聯(lián)數(shù)據(jù)和RDFa
8.4.2 約定的語義:schema.org
8.4.3 JSON-LD
8.4.4 課外閱讀
8.5 總結
9 共享層:安全地分享Web 智能產品
9.1 保障智能產品安全性
9.1.1 加密基礎
9.1.2 Web 安全與TLS :HTTPS 的S
9.1.3 在樹莓派中啟用TLS 以支持HTTPS 和WSS
9.2 授權和訪問控制
9.2.1 通過 REST 和 API token 進行訪問控制
9.2.2 OAuth :一個Web 身份驗證框架
9.3 社交化萬維物聯(lián)網(wǎng)
9.3.1 社交化萬維物聯(lián)網(wǎng)認證代理
9.3.2 實現(xiàn)社交化萬維物聯(lián)網(wǎng)認證代理
9.4 課外閱讀
9.5 總結
10 整合層:物理網(wǎng)聚合應用
10.1 構建一個簡單的App――自動生成UI
10.1.1 Web 智能產品的通用用戶界面
10.2 物理網(wǎng)聚合應用
10.2.1 使用Node-RED 工具創(chuàng)建物理網(wǎng)聚合應用
10.3 使用向導式工具來創(chuàng)建物理網(wǎng)聚合應用:IFTTT
10.3.1 將入侵者警報推送到 Google 電子表格上
10.3.2 使用自建通道發(fā)送請求
10.3.3 將入侵警報信息從Twitter 推送到Google 電子表格
10.4 課外閱讀
10.4.1 從簡單的聚合應用到大數(shù)據(jù)聚合應用
10.4.2 更好的用戶體驗
10.5 總結
附錄A Arduino、BeagleBone、Intel Edison 與WoT