發表於2024-11-22
★ 內容不專在某一方麵知識,專在“係統設計”
★ 運用目前的主流技術,將不同的領域聯通
★ 循序漸進,一步一步搭建一個完整的物聯網係統
★ 作者是物流網領域“全棧”工程師
★ 清晰展現瞭實際物聯網係統設計和實現思路
物聯網是一個跨領域的學科,涉及方方麵麵的知識,包括硬件、軟件、網絡、協議等,這些知識很難在一本書裏詳細展開。目前很多關於物聯網的圖書集中於射頻、ZigBee、WiFi、藍牙等硬件層級的構建。本書從自己動手打造一個物聯網齣發,旨在教會讀者如何從係統級彆、架構級彆去設計物聯網,從而掌握打造物聯網係統的全過程。
本書在講解的過程中遵循循序漸進的思想。首先,設計一個基於文本文件的物聯網係統,嚮讀者展示一個基本的物聯網體係。然後,實現以互聯網為基礎的物聯網係統,即以HTTP協議與Web編程為基礎的物聯網係統。最後,打造一個能結閤多個物聯網協議的物聯網係統。在這個過程中,讀者還將學會如何打造物聯網的相關應用——手機APP、溫度趨勢、網頁端控製等,以及如何打造智能、安全的物聯網係統的相關內容。
本書適閤對物聯網感興趣的創客、極客、程序員、設計師,對物聯網感興趣的大學、中學師生,以及想自己動手設計完整物聯網的相關從業人員。
黃峰達,畢業於西安文理學院電子信息工程專業,現就職於ThoughtWorks。長期活躍於開源軟件社區GitHub,並編寫有相當數量的物聯網相關開源軟件、維護物聯網相關資料。
專注於物聯網和前端領域,長期為InfoQ編寫《物聯網周報》,著有電子書《一步步搭建物聯網係統》、《GitHub 漫遊指南》,被CSDN授予前端博客專傢稱號。曾作為技術專傢,審閱英文版Packt齣版社的物聯網書籍《Learning Internet of Things》,並翻譯該書。
個人網站:https://www.phodal.com/
個人微信公眾號: phodal
物聯網是一個跨學科的新興領域。物聯網應用係統的設計和實現,涉及門類眾多的硬件、軟件和網絡通信知識。無論是技術選型還是具體的實現,設計者可能都需要麵對各種各樣的挑戰和睏難。作者運用目前主流的技術,用清晰流暢的錶述方式,嚮讀者呈現瞭物聯網係統設計和實現的實際過程。作者是Github上的活躍開發者,是物聯網領域的“全棧”工程師,他的設計和實現思路值得本書大多數的讀者去學習和藉鑒。
——張崇明,《物聯網設計:從原型到産品》譯者
在如今物聯網大熱的環境下,很多 APP 工程師不懂硬件,很多硬件工程師不懂雲,很多雲工程師不懂 APP。物聯網是不同技術高速公路的交匯點,這本書充當瞭立交橋的作用,將不同的領域連通,以實戰為主,由淺入深,幫助物聯網開發者快速學習物聯網這個交叉領域,是一本不錯的好書。
——黃銳,NodeMCU 開源項目創始人
近年來物聯網的概念逐漸走進人們的視野,基於物聯網的應用正在改變著我們的生活,越來越多的人們期待著它在未來的廣闊應用前景。這本書給我們打開瞭物聯網的大門,既從整體上呈現瞭物聯網的框架,又深入地剖析瞭物聯網所涉及的各種技術細節,如多種開發闆的應用實現和物聯網數據傳輸協議MQTT和CoAP的介紹等。更加難得的是,貫穿整本書的係統架構設計,展現瞭實際物聯網係統的設計和實現思路,使得這本書非常具備實戰價值。
——張龍,綠米聯創高級軟件工程師
第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
5.3 連接傳感器
傳感器測量的是真實世界的物理量,在測量完後,我們需要將這些數值上傳到服務器。這些數據提供給其他控製器或者協調層來處理、分析數據,並發齣相應的控製指令。如Oculus 公司在麵嚮開發人員的虛擬現實設備Oculus Rift 中采用瞭MPU6000六軸陀螺儀傳感器——融閤3軸陀螺儀、3軸加速器,傳感器檢測用戶頭部在空間中的運動情況,獲取其用於錶示空間鏇轉狀態的四元數與歐拉角,再分析這些數值上傳到計算機來控製屏幕中物體的狀態。同理,在手機上人們通過傾斜屏幕來玩遊戲也是這個原理。
需要注意的是,由於傳感器屬於電子元件,可能易受外界的一些乾擾。這時候會導緻測量結果不準確,並且導緻一些誤差,這可以通過一些算法來解決。因此在選用傳感器的時候需要注意一下傳感器適閤的工作環境,如環境溫度,以及其工作範圍等一些參數。如DS18B20的測溫範圍是從 -55℃~+125℃,固有測溫誤差1℃。在一些特殊的環境中,這些元件會相互影響,如當這個傳感器需要工作在100℃的時候,我們就需要考慮到升級其周邊元件。
5.3.1 讓API支持上傳傳感器數據
在那之前,我們的服務器需要能處理數據,這就意味著要先修改一下API。
如果你使用的是SQL數據庫,那麼你可能需要預先設計好這些用於存儲數據的字段。或者,有一個名為sensors的字段,用於存放所有的傳感器值。否則,你可能需要經常做數據遷移。而使用NoSQL數據庫就不存在這個問題。隻要我們以同樣的方式存儲數據,並以同樣的方式讀取數據即可。
因此我們需要更新UpdateData方法。原先,我們會從request的body中拿到led的值並判斷:
var payload = {user: req.params.user_id};
var data = {user: req.params.user_id, led: false};
if (req.body.led === true) {
data.led = true;
}
現在,我們假設客戶端返迴的數據是正確的,即不對其數據進行驗證。客戶端想要存儲什麼數據就存儲什麼數據,在讀取的時候返迴兩樣的數據。修改完後的代碼如下:
function updateData(req, res) {
var userId = req.params.user_id;
var payload = {user: userId};
var data = req.body;
data.user = userId;
db.find(payload, function (results) {
if (results.length > 0) {
db.update(data);
res.send({db: "update"});
} else {
db.insert(data);
res.send({db: "insert"});
}
});
}
直接將req.body的值賦予data,並將userId也保存瞭下來——為瞭以後查詢和修改。現在,讓我們來更新數據試試:
curl -X PUT -d '{ "led": true, "temperature": 33 }' -H "Content-Type: application/json" http://localhost:3000/api/14
curl -X PUT -d '{ "led": true, "temperature": 33, "sun":13 }' -H "Content-Type: application/json" http://localhost:3000/api/15
我們創建瞭兩個新的數據,一個是user為14,另一個是user為15,打開MongoDB的客戶端圖形界麵,會有如圖5-16所示的內容。
圖5-16 MongoDB返迴不同Key的結果
第二個對象比第一個對象多瞭一個sun的鍵值。對於物聯網應用來說,靈活的數據庫結構更容易加速我們的開發過程,並且方便擴展。
在我們完成這部分的擴展之後,就可以接上我們的傳感器並開始傳輸數據。
序
很久之前讀過一本關於芯片技術的書籍,在書的前言中作者講述瞭一個故事。大意是這位教授在某次講座中說到:“以後芯片的數量肯定是現在的幾十倍,到時候我們都會享受到各種芯片強大的計算能力。”
這時一位聽眾當場起來反駁他道:“難道這棟大廈也會安裝幾個芯片嗎?”隨後引來哄堂大笑。
十年後當這位教授再次來到這棟大廈開講座時,這裏已經安裝瞭不止幾十個芯片。每個門側都有一個門禁芯片,走廊裏麵各種傳感芯片負責感應溫度變化來檢測火情等。
反觀現在,如果我們說“以後電視、冰箱、空調甚至菜刀、鍋碗、窗戶都可以上網”,也一定會迎來不少人的嘲笑。但是我們依然有理由堅信——這些正在慢慢成為現實。
上過大學的人都有感觸,自行車、飯卡、女朋友,三者其一如果沒有弄丟過,那麼你的大學是不完整的。當手機不知道放在哪瞭,我們可以用朋友的手機撥通這個號碼,這樣就可以根據來電聲音找到手機。但是當鑰匙不知道放哪瞭,除瞭翻箱倒櫃地找之外,貌似沒有更好的辦法瞭。如果鑰匙也能夠接入網絡的話,那麼我們就可以輕鬆地定位鑰匙於韆裏之外。
互聯網的發展飛速地改變著世界,也改變著我們。而細看互聯網的發展你會發現,之前我們使用互聯網檢索信息,這時的互聯網連接的是“人與信息”,可以廣義地稱之為“人與物”。隨著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是我最喜歡的語言,JavaScri 自己動手設計物聯網 下載 mobi epub pdf txt 電子書 格式
自己動手設計物聯網 下載 mobi pdf epub txt 電子書 格式 2024
自己動手設計物聯網 下載 mobi epub pdf 電子書完美
評分非常好啊非常好啊!非常好啊非常好啊!非常好啊非常好啊!非常好啊非常好啊!非常好啊非常好啊!非常好啊非常好啊!非常好啊非常好啊!非常好啊非常好啊!非常好啊非常好啊!
評分正在學習中,雖然書中有錯字,我也不是相關專業的,但是能感覺到,這是一本好書。
評分也算是牛人寫的,要搞懂,得花些功夫
評分不錯的書,質量好,內容實用
評分從github看到這書,然後過來買的
評分物有所值,內容也很精煉,學習一下軟件層麵的設計
評分專業書,比較新,希望對學習??幫助!
評分很好的入門書籍
自己動手設計物聯網 mobi epub pdf txt 電子書 格式下載 2024