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