自己動手設計物聯網

自己動手設計物聯網

《自己動手設計物聯網》是2016年7月電子工業出版社出版的圖書,作者是黃峰達。

基本介紹

  • 書名:自己動手設計物聯網
  • 作者:黃峰達
  • ISBN:978-7-121-29053-4
  • 頁數:252頁
  • 定價:59.00元
  • 出版社電子工業出版社
  • 出版時間:2016年7月
內容簡介,編輯推薦,內容提要,目錄,精彩節摘,前言,

內容簡介

物聯網是一個跨領域的學科,涉及方方面面的知識,包括硬體、軟體、網路、協定等,這些知識很難在一本書里詳細展開。目前很多關於物聯網的圖書集中於射頻、ZigBee、WiFi、藍牙等硬體層級的構建。《自己動手設計物聯網》從自己動手打造一個物聯網出發,旨在教會讀者如何從系統級別、架構級別去設計物聯網,從而掌握打造物聯網系統的全過程。

編輯推薦

★內容不專在某一方面知識,專在“系統設計”
★運用目前的主流技術,將不同的領域聯通
★循序漸進,一步一步搭建一個完整的物聯網系統
★作者是物流網領域“全棧”工程師
★清晰展現了實際物聯網系統設計和實現思路

內容提要

物聯網是一個跨領域的學科,涉及方方面面的知識,包括硬體、軟體、網路、協定等,這些知識很難在一本書里詳細展開。目前很多關於物聯網的圖書集中於射頻、ZigBee、WiFi、藍牙等硬體層級的構建。《自己動手設計物聯網》從自己動手打造一個物聯網出發,旨在教會讀者如何從系統級別、架構級別去設計物聯網,從而掌握打造物聯網系統的全過程。
《自己動手設計物聯網》在講解的過程中遵循循序漸進的思想。首先,設計一個基於文本檔案的物聯網系統,向讀者展示一個基本的物聯網體系。然後,實現以網際網路為基礎的物聯網系統,即以HTTP協定與Web編程為基礎的物聯網系統。末尾,打造一個能結合多個物聯網協定的物聯網系統。在這個過程中,讀者還將學會如何打造物聯網的相關套用——手機APP、溫度趨勢、網頁端控制等,以及如何打造智慧型、安全的物聯網系統的相關內容。
《自己動手設計物聯網》適合對物聯網感興趣的創客、極客、程式設計師、設計師,對物聯網感興趣的大學、中學師生,以及想自己動手設計完整物聯網的相關從業人員。

目錄

第1章 概覽 1
1.1 物聯網發展歷史 1
1.2 物聯網概念 3
1.3 聯網——各式各樣的聯網設備 4
1.4 物聯網系統的核心是網路 5
1.5 小結 6
第2章 一個極簡的物聯網:hello,world 8
2.1 數據的傳輸過程 9
2.1.1 將數據快遞到用戶手中 10
2.1.2 數據與服務中心 14
2.2 一個文本的物聯網 16
2.2.1 從瀏覽器到伺服器 17
2.2.2 獲取數據與狀態 22
2.3 設備狀態改變 23
2.3.1 用Raspberry Pi來讀取數據 24
2.3.2 使用Raspberry Pi控制LED 28
2.4 小結 32
2.5 練習建議 33
2.6 問題回顧 33
2.7 相關閱讀資料 33
第3章 分解物聯網系統 34
3.1 物聯網的層級結構 35
3.1.1 一個常見場景下的層級結構 35
3.1.2 理想的物聯網層級結構 38
3.1.3 與真實世界互動的物理層 41
3.1.4 物聯網的神經中樞——協調層 45
3.1.5 物聯網的核心——套用層 47
3.1.6 通信 49
3.2 小結 51
3.3 相關閱讀資料 52
第4章 基於Web的物聯網系統 53
4.1 Web套用架構 54
4.1.1 MVC 55
4.1.2 領域與適配器層 56
4.1.3 最小的HTTP API 57
4.1.4 RESTful API 58
4.2 數據持久化 63
4.2.1 資料庫簡介 63
4.2.2 連線MongoDB資料庫 65
4.3 視圖與套用層 76
4.3.1 視圖 76
4.3.2 控制層界面 78
4.4 部署 84
4.5 小結 85
4.6 練習建議 86
4.7 相關閱讀資料 86
第5章 連線設備 87
5.1 連線控制器 88
5.1.1 一個重複的示例以及仿造API 89
5.1.2 Raspberry Pi + Arduino 90
5.1.3 Arduino與網路模組 94
5.1.4 NodeMCU 98
5.2 連線執行器 103
5.2.1 直接控制示例 103
5.2.2 間接控制示例 106
5.2.3 示例代碼 109
5.3 連線感測器 111
5.3.1 讓API支持上傳感測器數據 112
5.3.2 土壤濕度感測器 114
5.3.3 溫度感測器 115
5.3.4 數據合併 121
5.4 小結 123
5.5 相關閱讀資料 123
第6章 物聯網套用示例 124
6.1 數據可視化 125
6.1.1 可視化用戶數據 127
6.1.2 儀錶盤 129
6.2 儀錶盤類型示例:溫度趨勢圖 130
6.2.1 移動設備上查看 139
6.2.2 使用Dashing 140
6.3 創建手機套用 146
6.3.1 Ionic簡介 147
6.3.2 趨勢圖 153
6.3.3 控制硬體 155
6.3.4 用藍牙來與硬體通信 158
6.4 使用AWS雲平台構建物聯網 162
6.5 小結 167
6.6 相關閱讀資料 168
第7章 真正的物聯網:MQTT與CoAP協定 169
7.1 MQTT 171
7.1.1 MQTT訊息訂閱示例 171
7.1.2 創建MQTT服務 174
7.1.3 整合MQTT服務 179
7.1.4 MQTT-SN 189
7.2 CoAP 189
7.2.1 CoAP協定示例 191
7.2.2 創建CoAP服務 194
7.2.3 整合CoAP服務 197
7.3 小結 200
7.4 相關閱讀資料 200
第8章 智慧型與安全 201
8.1 回顧我們的物聯網系統 202
8.2 智慧型化 204
8.2.1 自然語言處理 204
8.2.2 機器學習之貝葉斯分類器 207
8.3 安全與隱私 209
8.3.1 網路攻擊 209
8.3.2 認證 211
8.3.3 私有物聯網 212
8.3.4 隱私 212
8.4 小結 213
8.5 相關閱讀資料 214
附錄A Raspberry Pi快速指南 215
附錄B JavaScript基礎 217
附錄C Ionic簡單幫助文檔 228
附錄D 相關資源 233

精彩節摘

很久之前讀過一本關於晶片技術的書籍,在書的前言中作者講述了一個故事。大意是這位教授在某次講座中說到:“以後晶片的數量肯定是現在的幾十倍,到時候我們都會享受到各種晶片強大的計算能力。”
這時一位聽眾當場起來反駁他道:“難道這棟大廈也會安裝幾個晶片嗎?”隨後引來哄堂大笑。
十年後當這位教授再次來到這棟大廈開講座時,這裡已經安裝了不止幾十個晶片。每個門側都有一個門禁晶片,走廊裡面各種感測晶片負責感應溫度變化來檢測火情等。
反觀現在,如果我們說“以後電視、冰櫃、空調甚至菜刀、鍋碗、窗戶都可以上網”,也一定會迎來不少人的嘲笑。但是我們依然有理由堅信——這些正在慢慢成為現實。
上過大學的人都有感觸,腳踏車、飯卡、女朋友,三者其一如果沒有弄丟過,那么你的大學是不完整的。當手機不知道放在哪了,我們可以用朋友的手機撥通這個號碼,這樣就可以根據來電聲音找到手機。但是當鑰匙不知道放哪了,除了翻箱倒櫃地找之外,貌似沒有更好的辦法了。如果鑰匙也能夠接入網路的話,那么我們就可以輕鬆地定位鑰匙於千里之外。
網際網路的發展飛速地改變著世界,也改變著我們。而細看網際網路的發展你會發現,之前我們使用網際網路檢索信息,這時的網際網路連線的是“人與信息”,可以廣義地稱之為“人與物”。隨著QQ、微信、人人網等社交網站的興起,網際網路連線的是“人與人”。而下一個網際網路的發展方向則是連線“物與物”——我們稱之為物聯網。
小時候我們總會幻想有一個哈利·波特那樣的魔法世界,或者西遊記那樣的神話世界,而長大後我們則會暢想鋼鐵俠那樣的科幻世界。
下班後當你拖著疲憊的身體坐在捷運上,拿出手機更新自己的狀態為下班路上,這時電飯煲會自動開啟,裡面的米飯進入蒸煮狀態,窗戶自動關閉,而空調自動打開並根據室內溫度調整到最適合的溫度……不過最霸氣的當然還是每天早上,你睜開朦朧睡眼,大喊一聲“要有光”,於是整個屋子都亮了。
雖然如此便捷,但是你是一個保守派,於是你並沒有把root許可權給它們,凡是都要親自做決定,這時打開E-mail將是你最忙的時候。
冰櫃給你發來2封郵件,“牛奶不夠了,我已經查詢了各大商城和附近超市,建議從家樂福訂購打折促銷的純牛奶”,“提示:最新發現您的各項飲食指標不平衡,所攝取的食物中維生素C的含量偏低,是否購買半斤芹菜。”
床發來1封郵件,“最近七天睡眠質量圖表如下……”
就連菜刀都發來了1封郵件:“我該磨了。”
而這一切天方夜譚似的故事正在工程師們的智慧和努力下成為現實。本書就講述了如何設計並構建一個完善的物聯網系統。
最初在網上了解Phodal是那篇在GitHub連擊300天的文章,按活躍度來講Phodal應該是國內最活躍的開源貢獻者了。
當作者Phodal告訴我,他的書要出版了,讓我寫個序。我最初以為是Growth增長全棧,當他告訴我是關於物聯網的時候,確實有些吃驚。當我再重讀Phodal 的《編程之路》時發現,他不僅僅是一名前端加後端的全棧工程師,更是一位軟體加硬體的全能工程師。
去年Phodal曾向我問Flarum接口API的情況,當時我正在國內為Flarum布道,遂給他介紹了一下Flarum的源碼、接口、文檔,以及中文社區的建設情況。沒過幾天Phodal告訴我,他用Growth為Flarum做了一個全平台的客戶端——iOS、Android、WinPhone、Windows、Mac、其他。但願有一天我家的微波爐也可以在Flarum論壇發帖。
Phodal來寫這本物聯網的書,那么注定這本書將是一本科普與實戰相結合的進階讀物。裡面不會有太多的名詞概念的解釋,更多的是如何設計,如何實現。
如果你是一名創客、極客,那么這本書很適合你。
Just enjoy it.
justjavac
Flarum中國社區創始人
2016年5月,天津

前言

在最開始的時候,人們使用CGI來開發動態網頁。在那個時候,人們也使用CGI來開發一些聯網套用。早先及現有的物聯網套用使用Web技術作為基礎的技術,接著人們開始將一些不錯的協定使用在物聯網中,如MQTT。又有一些組織在制定一些協定,如CoAP。同時越來越多的國家和組織在出台自己的標準。
幸運的是,這些技術都是依據現有的技術發展而來的。技術在過去的幾十年里發生了快速的變化,但是它們的本質是解決問題。而問題並沒有發生快速的變化——還是一樣的問題,只是我們有了更多可用的解決方案。
本書目標
本書不是一本詳細介紹物聯網系統的書籍,也不會和國內的一些教程一樣主要集中於射頻、ZigBee、WiFi、藍牙等。我相信這些知識你已經在其他書中學到過了,而這些書籍更多的是側重於硬體層級的構建,沒有從系統級別、架構級別對系統進行設計。設計這樣一個完整的系統,則是本書的核心。本書旨在教會用戶如何去設計的思想,以及如何打造物聯網系統的過程。至於系統底層硬體的實現細節則需要用戶去把握。
本書遵循循序漸進的思想,從設計一個極其簡單的物聯網系統,再到基於以網際網路為基礎的物聯網系統,最後打造了一個基於物聯網協定的物聯網系統。在這個過程中我們還將教會讀者打造物聯網的相關套用——手機APP、溫度趨勢、網頁端控制等。
由於設計這個物聯網系統本身有太多的知識點,並且涉及方方面面的知識,本書將儘可能地向讀者推薦一些擴展閱讀資料,並且建議讀者多多實踐。同時,由於章節間是一步步加深的關係,如果你在這其中遇到什麼問題可以及時與作者聯繫。
目標讀者:對物聯網感興趣的創客、極客、程式設計師、設計師;對物聯網感興趣的大學、中學師生;想自己動手設計完整物聯網的相關從業人員。
為什麼是JavaScript
在思考著用哪門語言來編寫程式的時候,我考慮到了Python、Java、JavaScript。Python是我最喜歡的語言,JavaScript是我最擅長的語言,Java是我最常用(工作)的語言。它們都是非常不錯的跨平台語言,它們都有廣泛的使用者。
如果考慮將其商業化,我會考慮使用Java語言。Java語言是一門“正統”的語言,即在國內的計算機科學領域,各個院校都將之列為必學語言。除去Java Web的流行帶來的需求,Android也增大了對Java語言的需求。由於Java語言是一門編譯語言,並且經過二十多年的發展,積累了大量的技術和智慧,使得它相當穩定。因而多數企業都採用這門語言作為其主要語言。儘管Java語法簡單,但是語法卻比較煩瑣、開發效率低,並不利於我們表述。
如果僅僅是考慮學習服務端,我會考慮使用Python來寫我們的物聯網系統。Python是一門簡單、易學、易懂的腳本語言,在科學計算領域非常受歡迎。並且,在書中的一些例子裡我會使用Python語言。Python語言富有表現力,可以更容易地讓我們將自然語言轉換為機器語言。然而,對於讀者來說可能存在更多的學習成本。
So,JavaScript有什麼優點?無論我們使用Java還是Python語言來開發我們的物聯網套用,凡是涉及到網頁前端相關的內容,我們都需要JavaScript,這就足夠了!
那么,為什麼我們不使用JavaScript來完成所有的這些工作呢?它有:
Node.js框架——最流行的JavaScript服務端平台,可以創建Web套用。
Cordova框架——最流行的混合套用框架,可以使用Web技術來開發手機套用(iOS、Android、Windows Phone等)。
這就意味著,我們可以用這門語言完成所有的開發任務——服務端、客戶端、移動套用。如果你想,也可以用這門語言完成硬體端的開發。三星推出了可以適用於嵌入式設備的小型JerryScript,谷歌的兩名前員工推出了適用於物聯網領域的軟體平台Smart.js。並且已經有幾個開發板,如Tessel 2、Espruino,可以讓你使用JavaScript為你的晶片編程。
其他語言
在服務端、客戶端和移動套用的例子裡,我們會用JavaScript、HTML、CSS來向讀者展示其中的原理。在硬體部分,我們會用C/C++語言。在Raspberry Pi上編程的時候,會使用Python。其他部分,如Dashborad和NodeMCU的介紹,會有一些Lua或者Ruby語言的例子。
我們之所以在Raspberry Pi上使用Python語言,不僅僅是因為使用Python語言更容易讀懂,而且在這個領域中主要使用的也是Python語言。同理於Dashboard的示例,我們使用了Dashing這個流行的框架,只是因為它更容易上手,並且使用的人較多。這就意味著,在我們遇到問題的時候更容易解決。
我們並不希望這些語言會阻礙你前進。在適當的時候你可以先跳過這一部分——如Dashing,我們展示了如何自己去寫類似的界面,使用這個框架只是為了開發更快。隨後在真正使用它的時候去深入它們。
為了用而學習是最有效率的學習。
本書內容
如下所示,本書分為8個章節和4個附錄。
第1章 概覽
本章介紹了物聯網的歷史背景和相關技術,以及其與網際網路的關係。
第2章 一個極簡的物聯網:hello,world
本章以一個文本檔案的數據為中心,快速搭建一個極簡的物聯網原型。其中將向讀者展示物聯網的一些基礎知識。
第3章 分解物聯網系統
本章將描述常用的物聯網系統架構,並對每一個層級進行詳細的描述和介紹。
第4章 基於Web的物聯網系統
本章將介紹常用API的模式RESTful,並將帶領讀者打造基於HTTP協定的物聯網系統。
第5章 連線設備
本章將介紹一些容易上手的設備,並將這些設備連線到物聯網。不僅可以控制LED,也可以上傳感測器數據。
第6章 物聯網套用示例
本章將介紹用趨勢圖來顯示感測器的數據,還將展示如何打造一個跨平台的APP來控制物聯網設備。同時,還有使用一些當前的雲服務來降低開發難度。
第7章 實現超越網際網路的物聯網
本章將介紹MQTT、CoAP等物聯網協定,它們可以幫助我們更好地處理物聯網系統中的訊息通信。
第8章 智慧型與安全
本章將關注於一些額外的話題,如安全、智慧型、私有化。
附錄
附錄提供了簡單的JavaScript入門指引、Ionic的一些介紹、物聯網資料及Raspberry Pi的初始化等。

相關詞條

熱門詞條

聯絡我們